|
ModuloArduino
Módulo Arduino - IFSPresente
|
O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC. More...
#include <Wire.h>#include <LiquidCrystal_I2C.h>#include <RTClib.h>#include "frame.h"Classes | |
| struct | ProtocolMessage |
| Representa a decodificação de uma mensagem recebida. More... | |
| struct | Display |
| Representa o estado de uma linha do display LCD. More... | |
Macros | |
Códigos de Mensagens do Protocolo. | |
Constantes usadas na comunicação serial com a TV-Box. Cada constante representa um tipo de mensagem disparada pelo master (TV-Box). | |
| #define | PING 100 |
| #define | TIME 200 |
| #define | LECTURE_NAME 300 |
| #define | SPEAKER 400 |
| #define | ATTENDEE 500 |
| #define | SUCCESS 600 |
| #define | FAIL 601 |
| #define | SETTIME 700 |
| #define | GETTIME 701 |
Macros de controle dos dispositivos. | |
Constantes usadas para I2C e controles adicionais. Essas constantes são relacionadas aos endereços I2C e demais ajustes sobre os dispositivos externos. | |
| #define | BUZZER 2 |
| #define | COL 20 |
| #define | ROW 4 |
| #define | ADDRESS 0x27 |
| #define | DISPLAY_UPDATE_DELAY 500 |
| #define | LOOP_DELAY 10 |
| #define | KEEP_AT_ZERO 1 |
| #define | KEEP_AT_LAST 1 |
Functions | |
| LiquidCrystal_I2C | lcd (ADDRESS, COL, ROW) |
| void | copiaN (char dest[], int sizeDest, char origem[], int sizeOrigem, int start) |
| Copia um trecho de uma string de origem para um buffer de destino, ajustando posição inicial e preenchendo com espaços em branco, se necessário. | |
| void | atualizaDisplay (int lines) |
| Atualiza o conteúdo exibido no display LCD linha a linha. | |
| void | parseMessage () |
| Interpreta a mensagem recebida pela serial USB e atualiza a estrutura global netMessage. | |
| void | setup () |
| Configuração inicial do sistema Arduino. | |
| void | loop () |
| Loop principal do firmware. | |
Variables | |
| ProtocolMessage | netMessage |
| Mantém uma única mensagem recebida. | |
| Display | dispArray [ROW] |
| Informações para as quatro linhas do Display. | |
| const char * | VERSION = "1.0" |
| Versão do firmware. | |
| char | strReply [MAX_STRING+1] |
| char | auxStr [MAX_STRING+1] |
| unsigned long | uptime |
| Tempo em que o Arduino está ligado em milissegundos. | |
| RTC_DS3231 | rtc |
| DateTime | now |
| SerialProtocol | usbProto |
| Classe que implementa a transmissão e recepção de quadros pela serial sobre USB. | |
O Arduino Nano gerencia a exibição no Display de quatro linhas, o acionamento do buzzer e o ajuste e leitura do RTC.
O Arduino Nano comunica-se por via serial sobre USB com a TV-Box. O protocolo de comunicação está na classe SerialProtocol. São mensagens de quadro encapsuladas com os caracteres '<' e '>'. No interior do quadro é possível usar o caracter de escape para: '<', '>' e '\'. A semântica das mensagens é específica para a aplicação IFSPresente. Há nove tipos de mensagens emitidas pela TV-Box.
O Arduino responde com três tipos de mensagens.
Outras aplicações podem definir outros modelos de mensagens nos quadros do protocolo.
| #define ADDRESS 0x27 |
Serve para definir o endereço do display.
| #define ATTENDEE 500 |
Linha 3: estudante que aponta sua presença.
| #define BUZZER 2 |
Pino digital ligado ao buzzer.
| #define COL 20 |
Serve para definir o numero de colunas do display utilizado.
| #define DISPLAY_UPDATE_DELAY 500 |
Tempo em milissegundos em que um texto é exibido numa linha do display antes de sofrer scroll.
| #define FAIL 601 |
Beep de falha no registro, seja por leitor biométrico de digital ou por senha no teclado numérico.
| #define GETTIME 701 |
Comando para solicitar data/hora do RTC ligado ao Arduino, além da temperatura.
| #define KEEP_AT_LAST 1 |
Quando um texto é exibido numa linha do display, deve ficar um tempo a mais antes de reiniciar o scroll.
| #define KEEP_AT_ZERO 1 |
Quando um texto é exibido numa linha do display, deve ficar um tempo a mais antes de iniciar o scroll.
| #define LECTURE_NAME 300 |
Linha 1: nome da palestra.
| #define LOOP_DELAY 10 |
Tempo em que o loop principal do código do Arduino dorme à espera de uma mensagem.
| #define PING 100 |
Obtém o timestamp do uptime e a versão do firmware.
| #define ROW 4 |
Serve para definir o numero de linhas do display utilizado.
| #define SETTIME 700 |
Comando para ajustar data/hora do RTC ligado ao Arduino.
| #define SPEAKER 400 |
Linha 2: nome do professor responsável pela aula em curso.
| #define SUCCESS 600 |
Beep de sucesso no registro, seja por leitor biométrico de digital ou por senha no teclado numérico.
| #define TIME 200 |
Linha 0: sala, data e hora.
| void atualizaDisplay | ( | int | lines | ) |
Atualiza o conteúdo exibido no display LCD linha a linha.
Esta função gerencia a exibição de mensagens no display, considerando:
millis() e DISPLAY_UPDATE_DELAY).COL), realiza deslocamento progressivo, mantendo o início por alguns ciclos (KEEP_AT_ZERO) antes de avançar.O comportamento difere conforme a mensagem ativa:
dispArray[i].TTL expirou → mostra defaultMessage com rolagem.message com rolagem.| [in] | lines | Índice da linha a ser atualizada:
|
copiaN() para preencher o buffer de exibição (toPrint).usbProto.machState) para evitar atualizações durante recepção de dados.lcd.setCursor(0,i)).startPosition == 0, mantém a mensagem parada por KEEP_AT_ZERO ciclos.startPosition até o limite calculado, com espera em KEEP_AT_LAST no final. | void copiaN | ( | char | dest[], |
| int | sizeDest, | ||
| char | origem[], | ||
| int | sizeOrigem, | ||
| int | start | ||
| ) |
Copia um trecho de uma string de origem para um buffer de destino, ajustando posição inicial e preenchendo com espaços em branco, se necessário.
Esta função garante que o conteúdo copiado caiba exatamente no tamanho do display (ou outro destino), ajustando o índice inicial (start) caso:
Após a cópia, o restante do buffer de destino é preenchido com espaços em branco, e o finalizador ‘’\0'` é adicionado ao fim.
| [out] | dest | Buffer de destino (receberá a string copiada). |
| [in] | sizeDest | Tamanho da string que ficará em dest, número de caracteres visíveis no display. O buffer dest precisa ter pelo menos (sizeDest+1) bytes. |
| [in] | origem | String de origem. |
| [in] | sizeOrigem | Tamanho da string de origem. |
| [in] | start | Posição inicial na string de origem a partir da qual a cópia deve começar (pode ser ajustada internamente pelo algoritmo). |
min(sizeDest, sizeOrigem) para calcular o máximo de caracteres a copiar. O destino é sempre terminado em ‘’\0'`.
| void loop | ( | ) |
Loop principal do firmware.
O loop() executa continuamente o ciclo de atualização do display, recepção de mensagens da TV-Box e execução dos comandos recebidos.
O comportamento segue o protocolo definido:
atualizaDisplay(-1)).usbProto.receiveFrame().machState == RECEIVED):parseMessage() para decodificar.netMessage.code."002|OK" após comandos de atualização.dispArray (conteúdo, tamanho, TTL, rolagem).machState = START).goto CONTINUE) sem esperar o delay.LOOP_DELAY antes do próximo ciclo.goto CONTINUE garante responsividade, reiniciando o ciclo imediatamente após processar uma mensagem (sem aguardar LOOP_DELAY).atualizaDisplay(3) no caso ATTENDEE deixa a linha 3 mais responsiva a eventos de digitação no teclado.usbProto, que mantém a decodificação de um frame recebido.| void parseMessage | ( | ) |
Interpreta a mensagem recebida pela serial USB e atualiza a estrutura global netMessage.
Esta função:
usbProto.receivedChars).strtok para separar os campos da mensagem, assumindo o caractere | como delimitador.netMessage.code).netMessage.message).netMessage.TTL).usbProto e netMessage. | void setup | ( | ) |
Configuração inicial do sistema Arduino.
Esta função é chamada automaticamente pelo framework Arduino logo após o reset ou inicialização da placa. Ela é chamada uma única vez.
Inicializações realizadas:
BUZZER) como saída.lcd.init()).lcd.clear()).usbProto.setBaudRate(9600)).dispArray.loop(). Informações para as quatro linhas do Display.
Contém as quatro linhas do display LCD. Cada posição tem:
message)defaultMessage)toPrint)setup())setup())Inicialmente preenchido com mensagens padrão do sistema:
| char * VERSION = "1.0" |
Versão do firmware.