/** Program to create a car monitor display using: - Arduino Due - a TFT display (https://www.tinytronics.nl/shop/en/displays/tft/3.5-inch-tft-display-320*480-pixels-mega-compatible-ili9486) - ELM327 Bluetooth OBD2 scanner - FSC-DB004 (BT 836B) bluetooth module */ #include "Arduino.h" /* include UTFT library */ #include #include "obd2_display.h" #include "obd2_timer.h" #include "statemachine.h" #define DEBUG 1 // #define RTT_MR 0x400E1A30U /* pins */ #define PIN_BT_RX 19 #define PIN_BT_TX 18 #define PIN_BT_STATE 3 /* connected/disconnected state of BT */ extern uint8_t BigFont[]; extern uint8_t SmallFont[]; char should_clear = 1; char led_state = LOW; char flag = 0; char counter_temp = 0; char main_color = 0; char init_text_i = 0; int init_text_x = 100; char init_text[] = "Initialising..."; char text_temp[2] = {'a','\0'}; void on_init_enter(); void on_init_run(); void on_init_exit(); void on_main_enter(); void on_main_run(); void __state_none(){ /* do nothing */} state_t init_state = { .id = STATE_INIT, .next = STATE_CAR_INFO, .on_enter = &on_init_enter, .on_run = &on_init_run, .on_exit = &on_init_exit}; state_t main_state = { .id = STATE_CAR_INFO, .next = STATE_CAR_INFO, .on_enter = &on_main_enter, .on_run = &on_main_run, .on_exit = &__state_none}; /* Set the pins for the display and dev board */ /* Standard Arduino Mega/Due shield : ,38,39,40,41 */ UTFT display(ILI9486, 38, 39, 40, 41); void on_init_enter() { display.clrScr(); Serial.println("Entering init state!"); } void on_init_run() { Serial.println("Running!"); } void on_init_exit() { Serial.println("Exiting init state!"); display.clrScr(); } void on_main_enter() { obd2_RTT_reset(); Serial.println("Entering main loop"); } void on_main_run() { } void RTT_Handler() { flag = 0; obd2_RTT_reset(); } void setup() { /* TODO change for TRNG (section 42 of datasheet)*/ randomSeed(analogRead(0)); #if (DEBUG == 1) Serial.begin(9600); #endif /* Serial1 is bluetooth module, pin 18 and 19. */ Serial1.begin(115200); /* Init display */ display.InitLCD(); display.setFont(BigFont); #if (DEBUG == 1) Serial.println("Starting"); #endif pinMode(LED_BUILTIN, OUTPUT); obd2_RTT_init(); statemachine_register_state(&init_state, STATE_INIT); statemachine_register_state(&main_state, STATE_CAR_INFO); statemachine_init(); } void loop() { statemachine_loop(); counter_temp++; if (counter_temp == 50) { statemachine_next(); } delay(100); // while (Serial1.available()) // { // char rec = Serial1.read(); // #if (DEBUG == 1) // Serial.println(rec); // #endif // } // if (should_clear) // { // display.clrScr(); // display.setColor(255, 0, 166); // display.fillRect(LCD_W / 2 - 200, LCD_H / 2 - 100, LCD_W / 2 + 200, LCD_H / 2 + 100); // display.setColor(0, 247, 255); // display.print("OBD2 display yeet", CENTER, LCD_H / 2); // delay(10); // should_clear = 0; // } }