Skip to content

Commit 1782b5e

Browse files
committed
Documentação do arquivo e inclusão do arquivo fonte de SmartDraw no projeto.
1 parent 89314c5 commit 1782b5e

File tree

2 files changed

+88
-33
lines changed

2 files changed

+88
-33
lines changed

CristalLiq-serial/CristalLiq-serial.ino

Lines changed: 88 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,22 @@
3232
* O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol.
3333
* São mensagens de quadro encapsuladas com os caracteres '<' e '>'. No interior do quadro é possível usar o caracter de escape para: '\<', '\>' e '\\'.
3434
* A semântica das mensagens é específica para a aplicação IFSPresente.
35-
* Há seis tipos de mensagens.
36-
* * <100,0,0> &rarr; PING
37-
* * <200,TEXTO,TIMEOUT> &rarr; TIME (Linha 0, para sala, data e hora)
38-
* * <300,TEXTO,TIMEOUT> &rarr; LECTURE_NAME (Linha 1, para nome da palestra)
39-
* * <400,TEXTO,TIMEOUT> &rarr; SPEAKER (Linha 2, para nome do palestrante)
40-
* * <500,TEXTO,TIEMOUT> &rarr; ATTENDEE (Linha 3, aponta participante registrado
41-
* * <600,0,0> &rarr; SUCCESS (Beep de sucesso no registro)
42-
* * <601,0,0> &rarr; FAIL (Beep de falha no registro)
43-
* * <700,HH:MM:SS,0> &rarr; SETTIME (Define a hora do RTC)
44-
* * <701,0,0> &rarr; GETTIME (Recebe a hora do RTC)
45-
*
35+
* Há nove tipos de mensagens emitidas pela TV-Box.
36+
* * <100|0|0> &rarr; PING
37+
* * <200|TEXTO|TIMEOUT> &rarr; TIME (Linha 0, para sala, data e hora)
38+
* * <300|TEXTO|TIMEOUT> &rarr; LECTURE_NAME (Linha 1, para nome da palestra)
39+
* * <400|TEXTO|TIMEOUT> &rarr; SPEAKER (Linha 2, para nome do palestrante)
40+
* * <500|TEXTO|TIEMOUT> &rarr; ATTENDEE (Linha 3, aponta participante registrado
41+
* * <600|0|0> &rarr; SUCCESS (Beep de sucesso no registro)
42+
* * <601|0|0> &rarr; FAIL (Beep de falha no registro)
43+
* * <700|YYYY:MM:DD:HH:MM:SS|0> &rarr; SETTIME (Define a hora do RTC)
44+
* * <701|0|0> &rarr; GETTIME (Recebe a hora do RTC)
45+
*
46+
* O Arduino responde com três tipos de mensagens.
47+
* * <001|uptime em milissegundos|versão de firmware> &rarr; Resposta ao ping
48+
* * <003|YYYY:MM:DD:HH:MM:SS|temperatura> &rarr; Resposta ao gettime
49+
* * <002|OK|> &rarr; Resposta aos demais comandos
50+
*
4651
* Outras aplicações podem definir outros modelos de mensagens nos quadros do protocolo.
4752
*/
4853

@@ -84,25 +89,64 @@
8489
#define LOOP_DELAY 10 /**< Tempo em que o loop principal do código do Arduino dorme à espera de uma mensagem */
8590
#define KEEP_AT_ZERO 1 /**< Quando um texto é exibido numa linha do display, deve ficar um tempo a mais antes de iniciar o _scroll_ */
8691
#define KEEP_AT_LAST 1 /**< Quando um texto é exibido numa linha do display, deve ficar um tempo a mais antes de reiniciar o _scroll_ */
92+
/** @} */
8793

94+
/**
95+
* @struct ProtocolMessage
96+
* @brief Representa a decodificação de uma mensagem recebida.
97+
*
98+
* Uma mensagem num quadro vem em três campos separados por '|', <code|message|TTL>.
99+
*/
88100
struct ProtocolMessage {
89-
int code;
90-
int TTL;
91-
char message[MAX_STRING+1];
101+
int code; /**< Código do serviço solicitado. */
102+
int TTL; /**< Tempo de vida para mensagens que são exibidas no _display_. */
103+
char message[MAX_STRING+1]; /**< Mensagem. */
92104
};
105+
106+
/**
107+
* @var ProtocolMessage netMessage
108+
* @brief Mantém uma única mensagem recebida.
109+
*/
93110
ProtocolMessage netMessage;
94111

112+
/**
113+
* @struct Display
114+
* @brief Representa o estado de uma linha do display LCD.
115+
*
116+
* Esta estrutura guarda a mensagem principal, a mensagem padrão, a parte da
117+
* mensagem que deve ser impressa no momento, além de informações de tamanho,
118+
* posição e tempo de vida (TTL).
119+
*/
95120
struct Display {
96-
char message[MAX_STRING + 1];
97-
char defaultMessage[MAX_STRING + 1];
98-
char toPrint[COL+1];
99-
int messageSize;
100-
int defaultMessageSize;
101-
int startPosition;
102-
byte keepAtZeroPosition;
103-
unsigned long TTL;
121+
char message[MAX_STRING + 1]; /**< Mensagem atual a ser exibida. */
122+
char defaultMessage[MAX_STRING + 1]; /**< Mensagem padrão quando nenhuma outra estiver ativa. */
123+
char toPrint[COL+1]; /**< Parte da mensagem que é impressa no display num dado momento. */
124+
int messageSize; /**< Tamanho da mensagem atual. */
125+
int defaultMessageSize; /**< Tamanho da mensagem padrão. */
126+
int startPosition; /**< Posição inicial na mensagem a partir da qual imprime-se no display. */
127+
byte keepAtZeroPosition; /**< Quando o trecho inicial da mensagem está sendo impresso, permanece por um tempo maior nesse estado. */
128+
unsigned long TTL; /**< Tempo de vida da mensagem em milissegundos. Após esse período, retorna à mensagem _default_ */
104129
};
105130

131+
/**
132+
* @var Display dispArray[ROW]
133+
* @brief Informações para as quatro linhas do Display.
134+
*
135+
* Contém as quatro linhas do display LCD. Cada posição tem:
136+
* - Mensagem atual (`message`)
137+
* - Mensagem padrão (`defaultMessage`)
138+
* - Texto a imprimir (`toPrint`)
139+
* - Tamanho da mensagem (ajustado em `setup()`)
140+
* - Tamanho da mensagem padrão (ajustado em `setup()`)
141+
* - Posição inicial da string a partir da onde imprime no display
142+
* - Tempo de vida (TTL) de impressão da mensagem
143+
*
144+
* Inicialmente preenchido com mensagens padrão do sistema:
145+
* - Linha 0 → "IFSPresente"
146+
* - Linha 1 → "Local Disponivel"
147+
* - Linha 2 → "Sem reserva de palestrante"
148+
* - Linha 3 → "Aguardando Registro"
149+
*/
106150
Display dispArray[ROW] = {
107151
{"", "IFSPresente", "", 0, 0, 0, KEEP_AT_ZERO, 0},
108152
{"", "Local Disponivel", "", 0, 0, 0, KEEP_AT_ZERO, 0},
@@ -113,9 +157,20 @@ Display dispArray[ROW] = {
113157

114158

115159
char strReply[80];
116-
char auxStr[80];
160+
char auxStr[80];
161+
162+
/**
163+
* @var unsigned long uptime
164+
* @brief Tempo em que o Arduino está ligado em milissegundos.
165+
*/
117166
unsigned long uptime;
167+
118168
LiquidCrystal_I2C lcd(ADDRESS,COL,ROW); // Chamada da funcação LiquidCrystal para ser usada com o I2C
169+
170+
/**
171+
* @var SerialProtocol usbProto
172+
* @brief Classe que implementa a transmissão e recepção de quadros pela serial sobre USB.
173+
*/
119174
SerialProtocol usbProto;
120175

121176
/*****************************************************************************/
@@ -209,13 +264,13 @@ void atualizaDisplay(int lines) {
209264
void parseMessage() {
210265
char * strtokIndx; // this is used by strtok() as an index
211266
usbProto.removeAccentMarker(usbProto.receivedChars);
212-
strtokIndx = strtok(usbProto.receivedChars,","); // O código da mensagem
267+
strtokIndx = strtok(usbProto.receivedChars,"|"); // O código da mensagem
213268
netMessage.code = atoi(strtokIndx);
214269

215-
strtokIndx = strtok(NULL, ","); // A mensagem
270+
strtokIndx = strtok(NULL, "|"); // A mensagem
216271
strcpy(netMessage.message, strtokIndx);
217272

218-
strtokIndx = strtok(NULL, ","); // Tempo de vida da mensagem em milissegundos
273+
strtokIndx = strtok(NULL, "|"); // Tempo de vida da mensagem em milissegundos
219274
netMessage.TTL = atoi(strtokIndx);
220275
}
221276

@@ -253,22 +308,22 @@ void loop()
253308
switch (netMessage.code) {
254309
case PING:
255310
strReply[0] = '\0';
256-
strcat(strReply, "001,");
311+
strcat(strReply, "001|");
257312
uptime = millis();
258313
itoa( uptime, auxStr, 10);
259314
strcat(strReply, auxStr);
260315
usbProto.sendFrame(strReply);
261316
break;
262317
case TIME:
263-
usbProto.sendFrame("002,OK");
318+
usbProto.sendFrame("002|OK");
264319
strcpy(dispArray[0].message, netMessage.message);
265320
dispArray[0].messageSize = strlen(netMessage.message);
266321
dispArray[0].TTL = millis() + netMessage.TTL;
267322
dispArray[0].startPosition = 0;
268323
dispArray[0].keepAtZeroPosition = KEEP_AT_ZERO;
269324
break;
270325
case LECTURE_NAME:
271-
usbProto.sendFrame("002,OK");
326+
usbProto.sendFrame("002|OK");
272327
strcpy(dispArray[1].message, netMessage.message);
273328
dispArray[1].messageSize = strlen(netMessage.message);
274329
dispArray[1].TTL = millis() + netMessage.TTL;
@@ -277,15 +332,15 @@ void loop()
277332

278333
break;
279334
case SPEAKER:
280-
usbProto.sendFrame("002,OK");
335+
usbProto.sendFrame("002|OK");
281336
strcpy(dispArray[2].message, netMessage.message);
282337
dispArray[2].messageSize = strlen(netMessage.message);
283338
dispArray[2].TTL = millis() + netMessage.TTL;
284339
dispArray[2].startPosition = 0;
285340
dispArray[2].keepAtZeroPosition = KEEP_AT_ZERO;
286341
break;
287342
case ATTENDEE:
288-
usbProto.sendFrame("002,OK");
343+
usbProto.sendFrame("002|OK");
289344
strcpy(dispArray[3].message, netMessage.message);
290345
dispArray[3].messageSize = strlen(netMessage.message);
291346
dispArray[3].TTL = millis() + netMessage.TTL;
@@ -294,11 +349,11 @@ void loop()
294349
atualizaDisplay(3); //Atualiza forçosamente só a linha 3, o display fica mais responsivo a tecladas rápidas.
295350
break;
296351
case SUCCESS:
297-
usbProto.sendFrame("002,OK");
352+
usbProto.sendFrame("002|OK");
298353
tone(BUZZER,1000,150);
299354
break;
300355
case FAIL:
301-
usbProto.sendFrame("002,OK");
356+
usbProto.sendFrame("002|OK");
302357
tone(BUZZER,2000,150);
303358
delay(300);
304359
tone(BUZZER,2000,150);
14.4 KB
Binary file not shown.

0 commit comments

Comments
 (0)