Skip to content

Commit e9e271b

Browse files
committed
Ajustes nas classes e documentação. A enumeração de estados agora está dentro da classe SerialProtocol.
1 parent 2e578dd commit e9e271b

File tree

2 files changed

+35
-27
lines changed

2 files changed

+35
-27
lines changed

CristalLiq-serial/CristalLiq-serial.ino

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* * <600|0|0> &rarr; SUCCESS (Beep de sucesso no registro)
1515
* * <601|0|0> &rarr; FAIL (Beep de falha no registro)
1616
* * <700|YYYY:MM:DD:HH:MM:SS|0> &rarr; SETTIME (Define a hora do RTC)
17-
* * <701|0|0> &rarr; GETTIME (Recebe a hora do RTC)
17+
* * <701|0|0> &rarr; GETTIME (Recebe a hora do RTC, além da temperatura)
1818
*
1919
* O Arduino responde com três tipos de mensagens.
2020
* * <001|uptime em milissegundos|versão de firmware> &rarr; Resposta ao ping
@@ -136,8 +136,8 @@ Display dispArray[ROW] = {
136136
*/
137137
const char* VERSION = "1.0";
138138

139-
char strReply[80];
140-
char auxStr[80];
139+
char strReply[MAX_STRING + 1];
140+
char auxStr[MAX_STRING + 1];
141141

142142
/**
143143
* @var unsigned long uptime
@@ -219,7 +219,7 @@ void copiaN(char dest[], int sizeDest, char origem[], int sizeOrigem, int start
219219
* Esta função gerencia a exibição de mensagens no display, considerando:
220220
* - **Tempo mínimo entre atualizações** (usando `millis()` e `DISPLAY_UPDATE_DELAY`).
221221
* - **Mensagens temporárias (TTL)**: quando expiram, voltam para a mensagem padrão.
222-
* - **Rolagem (scroll)**: caso a mensagem seja maior que o número de colunas (`COL`),
222+
* - **Rolagem horizontal (scroll)**: caso a mensagem seja maior que o número de colunas (`COL`),
223223
* realiza deslocamento progressivo, mantendo o início por alguns ciclos
224224
* (`KEEP_AT_ZERO`) antes de avançar.
225225
*
@@ -228,8 +228,8 @@ void copiaN(char dest[], int sizeDest, char origem[], int sizeOrigem, int start
228228
* - Caso contrário → mostra `message` com rolagem.
229229
*
230230
* @param[in] lines Índice da linha a ser atualizada:
231-
* - `-1` → atualiza todas as linhas.
232-
* - `0..ROW-1` → atualiza apenas a linha especificada.
231+
* - `-1` → atualiza todas as linhas, para efeito de rolagem horizontal, então faz a cada DISPLAY_UPDATE_DELAY.
232+
* - `0..ROW-1` → atualiza apenas a linha especificada, e faz automaticamente independentemente de DISPLAY_UPDATE_DELAY para ter boa responsividade.
233233
*
234234
* @note
235235
* - Usa `copiaN()` para preencher o buffer de exibição (`toPrint`).
@@ -251,11 +251,11 @@ void atualizaDisplay(int lines) {
251251
bool updateNext = false;
252252

253253
if (currentTime < nextUpdate) { //Avalia se o tempo de realizar update no display expirou
254-
if (usbProto.machState != RECEIVED)
254+
if (usbProto.machState != SerialProtocol::RECEIVED)
255255
return;
256256
}
257257

258-
if (usbProto.machState != RECEIVED)
258+
if (usbProto.machState != SerialProtocol::RECEIVED)
259259
nextUpdate = currentTime + DISPLAY_UPDATE_DELAY;
260260

261261
for (int i = 0; i < ROW; i++) {
@@ -383,8 +383,10 @@ void setup()
383383
* - **LECTURE_NAME (300):** atualiza linha 1 (nome da palestra).
384384
* - **SPEAKER (400):** atualiza linha 2 (nome do professor).
385385
* - **ATTENDEE (500):** atualiza linha 3 (participante) e força atualização imediata.
386-
* - **SUCCESS (600):** feedback sonoro curto (registro aceito).
387-
* - **FAIL (601):** feedback sonoro duplo (registro rejeitado).
386+
* - **SUCCESS (600):** _feedback_ sonoro curto (registro aceito, pode ser usuário/senha correto ou leitura correta de impressão digital).
387+
* - **FAIL (601):** _feedback_ sonoro duplo (registro rejeitado).
388+
* - **SETTIME (700):** Define a data e hora do RTC do Arduino.
389+
* - **GETTIME (701):** Obtém a data/hora do RTC, além da temperatura em Celcius.
388390
*
389391
* ### Estrutura do loop
390392
* 1. Atualiza o display (`atualizaDisplay(-1)`).
@@ -417,7 +419,7 @@ void loop()
417419
CONTINUE:
418420
atualizaDisplay(-1); //Atualiza todas as linhas do display
419421
usbProto.receiveFrame();
420-
if (usbProto.machState == RECEIVED) {
422+
if (usbProto.machState == SerialProtocol::RECEIVED) {
421423
parseMessage();
422424
switch (netMessage.code) {
423425
case PING:
@@ -431,32 +433,36 @@ void loop()
431433
strcat(strReply, VERSION);
432434
usbProto.sendFrame(strReply);
433435
break;
436+
434437
case TIME:
435-
usbProto.sendFrame("002|OK");
438+
usbProto.sendFrame("002|OK|");
436439
strcpy(dispArray[0].message, netMessage.message);
437440
dispArray[0].messageSize = strlen(netMessage.message);
438441
dispArray[0].TTL = millis() + netMessage.TTL;
439442
dispArray[0].startPosition = 0;
440443
dispArray[0].keepAtZeroPosition = KEEP_AT_ZERO;
441444
break;
445+
442446
case LECTURE_NAME:
443-
usbProto.sendFrame("002|OK");
447+
usbProto.sendFrame("002|OK|");
444448
strcpy(dispArray[1].message, netMessage.message);
445449
dispArray[1].messageSize = strlen(netMessage.message);
446450
dispArray[1].TTL = millis() + netMessage.TTL;
447451
dispArray[1].startPosition = 0;
448452
dispArray[1].keepAtZeroPosition = KEEP_AT_ZERO;
449453
break;
454+
450455
case SPEAKER:
451-
usbProto.sendFrame("002|OK");
456+
usbProto.sendFrame("002|OK|");
452457
strcpy(dispArray[2].message, netMessage.message);
453458
dispArray[2].messageSize = strlen(netMessage.message);
454459
dispArray[2].TTL = millis() + netMessage.TTL;
455460
dispArray[2].startPosition = 0;
456461
dispArray[2].keepAtZeroPosition = KEEP_AT_ZERO;
457462
break;
463+
458464
case ATTENDEE:
459-
usbProto.sendFrame("002|OK");
465+
usbProto.sendFrame("002|OK|");
460466
strcpy(dispArray[3].message, netMessage.message);
461467
dispArray[3].messageSize = strlen(netMessage.message);
462468
dispArray[3].TTL = millis() + netMessage.TTL;
@@ -466,7 +472,7 @@ void loop()
466472
break;
467473

468474
case SETTIME:
469-
usbProto.sendFrame("002|OK");
475+
usbProto.sendFrame("002|OK|");
470476
char * strtokIndx; // this is used by strtok() as an index
471477
unsigned int year;
472478
byte month;
@@ -502,23 +508,23 @@ void loop()
502508
now.hour(),
503509
now.minute(),
504510
now.second(),
505-
tempBuf);
506-
511+
tempBuf);
507512
usbProto.sendFrame(strReply);
508513
break;
509514

510515
case SUCCESS:
511-
usbProto.sendFrame("002|OK");
516+
usbProto.sendFrame("002|OK|");
512517
tone(BUZZER,1000,150);
513518
break;
519+
514520
case FAIL:
515-
usbProto.sendFrame("002|OK");
521+
usbProto.sendFrame("002|OK|");
516522
tone(BUZZER,2000,150);
517523
delay(300);
518524
tone(BUZZER,2000,150);
519525
break;
520526
}
521-
usbProto.machState = START;
527+
usbProto.machState = SerialProtocol::START;
522528
goto CONTINUE;
523529
}
524530
delay(LOOP_DELAY); // delay do loop principal

CristalLiq-serial/frame.h

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,6 @@
55
#define MAX_STRING 50
66
#define MAX_PROTOCOL_MESSAGE MAX_STRING + 4 // ddd,maior string já desprezados os caracteres de inicio e fim '<' e '>'
77

8-
/**
9-
* @enum machineState
10-
* @brief Estados possíveis da máquina de recepção de frames.
11-
*/
12-
enum machineState {START, RECEIVING, ESCAPE, RECEIVED};
13-
148
/**
159
* @class SerialProtocol
1610
* @brief Gerencia a comunicação serial no protocolo master/slave usado pela TV-Box.
@@ -29,14 +23,22 @@ enum machineState {START, RECEIVING, ESCAPE, RECEIVED};
2923
*/
3024
class SerialProtocol {
3125
public:
26+
/**
27+
* @enum machineState
28+
* @brief Estados possíveis da máquina de recepção de frames.
29+
*/
30+
enum machineState {START, RECEIVING, ESCAPE, RECEIVED};
31+
3232
/**
3333
* @brief Estado atual da máquina de recepção.
3434
*/
3535
byte machState;
36+
3637
/**
3738
* @brief Buffer para armazenar a mensagem recebida.
3839
*/
3940
char receivedChars[MAX_PROTOCOL_MESSAGE+1];
41+
4042
/**
4143
* @brief Buffer para armazenar a mensagem a ser enviada.
4244
*/

0 commit comments

Comments
 (0)