Files
OBD2-car-display/due_obd2/due_obd2.ino

159 lines
3.2 KiB
C++

/**
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 <UTFT.h>
#include <DueTimer.h>
// #include "obd2_timer.h"
#include "obd2_display.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 */
#define MS(x) x * 1000
#define S(x) MS(x) * 1000
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 : <display model>,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()
{
delay(500);
Serial.println("init!");
}
void on_init_exit()
{
Serial.println("Exiting init state!");
display.clrScr();
}
void on_main_enter()
{
Serial.println("Entering main loop");
}
void on_main_run()
{
delay(500);
Serial.println("main!");
}
void timer_handler()
{
statemachine_next();
}
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);
statemachine_register_state(&init_state, STATE_INIT);
statemachine_register_state(&main_state, STATE_CAR_INFO);
statemachine_init();
Timer3.attachInterrupt(timer_handler);
Timer3.start(S(5));
}
void loop()
{
statemachine_loop();
// Serial.println("Running");
// delay(10);
// 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;
// }
}