Add support for the LCD and using it for displaying animations. Animations are automatically played if available for the ID of the detected tag. The code should support adding other kind of animations, for tags being removed or for other UI interactions for example.
71 lines
1.7 KiB
C++
71 lines
1.7 KiB
C++
#include <Arduino.h>
|
|
|
|
#include "Pinout.h"
|
|
|
|
#include "Com.h"
|
|
#include "LCD.h"
|
|
#include "RFID.h"
|
|
|
|
__attribute__((noreturn)) int main() {
|
|
pinMode(pin_DBG_LED_1, OUTPUT);
|
|
pinMode(pin_DBG_LED_2, OUTPUT);
|
|
|
|
pinMode(pin_Reg_en, OUTPUT);
|
|
pinMode(pin_Audio_Amp_enable, OUTPUT);
|
|
pinMode(pin_Audio_AMP_GAIN_EN, OUTPUT);
|
|
|
|
pinMode(pin_NFC1_RST, OUTPUT);
|
|
pinMode(pin_LCD_RST, OUTPUT);
|
|
|
|
/* Preemptively disable what we can before the regulator is ON. */
|
|
digitalWrite(pin_Audio_Amp_enable, LOW);
|
|
digitalWrite(pin_NFC1_RST, LOW);
|
|
digitalWrite(pin_LCD_RST, LOW);
|
|
|
|
pinMode(pin_BAT_SNS, INPUT);
|
|
/*
|
|
* Voltage divider ratio is 1.5 and analog input has 10 significant bits.
|
|
* Which gives us 0-1023 <=> 0V-4.95V, so 650 is a measure of 3.14V.
|
|
* This is quite low, but there's a voltage drop because of the diode, and
|
|
* we don't want to be at the very end of the battery's charge anyway.
|
|
* Let's be conservative.
|
|
*/
|
|
if (analogRead(pin_BAT_SNS) < 650) { /* TODO: Low battery handling */ }
|
|
|
|
digitalWrite(pin_Reg_en, HIGH);
|
|
/*
|
|
* System is powered up after this point.
|
|
*/
|
|
|
|
Serial.begin(115200);
|
|
Com::sendComment("System is powered up, running set-up.");
|
|
|
|
/* TODO: Setups once module structure is up. */
|
|
RFID rfid;
|
|
digitalWrite(pin_NFC1_RST, HIGH);
|
|
rfid.init();
|
|
|
|
if (!SD.begin(BUILTIN_SDCARD))
|
|
Com::sendComment("Could not use the SD Card.");
|
|
|
|
LCD lcd;
|
|
digitalWrite(pin_LCD_RST, HIGH);
|
|
lcd.init();
|
|
|
|
/* Main loop */
|
|
while (true) {
|
|
int8_t tagEvent;
|
|
|
|
/* Display first, in case the RFID communication delays it too much. */
|
|
lcd.checkAndDisplay();
|
|
|
|
tagEvent = rfid.checkTags();
|
|
if (tagEvent) {
|
|
Com::sendFigUpdate(tagEvent);
|
|
lcd.startNewAnim(tagEvent);
|
|
}
|
|
|
|
/* TODO: Drop delay, WFE+timer interrupt(s) ? */
|
|
delay(25);
|
|
}
|
|
}
|