mirror of
https://github.com/SemvdH/OBD2-car-display.git
synced 2025-12-15 04:01:04 +00:00
159 lines
3.1 KiB
C++
159 lines
3.1 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 "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 : <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()
|
|
{
|
|
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;
|
|
// }
|
|
}
|