mirror of
https://github.com/SemvdH/OBD2-car-display.git
synced 2025-12-15 04:01:04 +00:00
use duetimer and fix bug where if the next state is the same the exit function would still get called
This commit is contained in:
@@ -9,8 +9,8 @@ Program to create a car monitor display using:
|
|||||||
#include "Arduino.h"
|
#include "Arduino.h"
|
||||||
/* include UTFT library */
|
/* include UTFT library */
|
||||||
#include <UTFT.h>
|
#include <UTFT.h>
|
||||||
// #include <DueTimer.h>
|
#include <DueTimer.h>
|
||||||
#include "obd2_timer.h"
|
// #include "obd2_timer.h"
|
||||||
#include "obd2_display.h"
|
#include "obd2_display.h"
|
||||||
#include "statemachine.h"
|
#include "statemachine.h"
|
||||||
|
|
||||||
@@ -22,6 +22,9 @@ Program to create a car monitor display using:
|
|||||||
#define PIN_BT_TX 18
|
#define PIN_BT_TX 18
|
||||||
#define PIN_BT_STATE 3 /* connected/disconnected state of BT */
|
#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 BigFont[];
|
||||||
extern uint8_t SmallFont[];
|
extern uint8_t SmallFont[];
|
||||||
|
|
||||||
@@ -45,7 +48,7 @@ void __state_none(){ /* do nothing */}
|
|||||||
state_t init_state =
|
state_t init_state =
|
||||||
{
|
{
|
||||||
.id = STATE_INIT,
|
.id = STATE_INIT,
|
||||||
.next = STATE_INIT,
|
.next = STATE_CAR_INFO,
|
||||||
.on_enter = &on_init_enter,
|
.on_enter = &on_init_enter,
|
||||||
.on_run = &on_init_run,
|
.on_run = &on_init_run,
|
||||||
.on_exit = &on_init_exit};
|
.on_exit = &on_init_exit};
|
||||||
@@ -66,19 +69,12 @@ void on_init_enter()
|
|||||||
{
|
{
|
||||||
display.clrScr();
|
display.clrScr();
|
||||||
Serial.println("Entering init state!");
|
Serial.println("Entering init state!");
|
||||||
// obd2_TC_init();
|
|
||||||
// Serial.println("init done");
|
|
||||||
// obd2_TC_set_RC_value(1000000); /* 1 million microseconds? */
|
|
||||||
// Serial.println("set RC");
|
|
||||||
// obd2_TC_start();
|
|
||||||
// Serial.print("Timer initialized and started");
|
|
||||||
// Timer3.attachInterrupt(timer_handler);
|
|
||||||
// Timer3.start(50000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_init_run()
|
void on_init_run()
|
||||||
{
|
{
|
||||||
Serial.println("Running!");
|
delay(500);
|
||||||
|
Serial.println("init!");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,25 +91,13 @@ void on_main_enter()
|
|||||||
|
|
||||||
void on_main_run()
|
void on_main_run()
|
||||||
{
|
{
|
||||||
|
delay(500);
|
||||||
}
|
Serial.println("main!");
|
||||||
|
|
||||||
// void RTT_Handler()
|
|
||||||
// {
|
|
||||||
// flag = 0;
|
|
||||||
// obd2_RTT_reset();
|
|
||||||
// }
|
|
||||||
|
|
||||||
void TC0_Handler(void)
|
|
||||||
{
|
|
||||||
#if (DEBUG == 1)
|
|
||||||
Serial.println("Interrupt!");
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void timer_handler()
|
void timer_handler()
|
||||||
{
|
{
|
||||||
Serial.println("Timer yeet");
|
statemachine_next();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
@@ -138,28 +122,19 @@ void setup()
|
|||||||
|
|
||||||
pinMode(LED_BUILTIN, OUTPUT);
|
pinMode(LED_BUILTIN, OUTPUT);
|
||||||
|
|
||||||
// statemachine_register_state(&init_state, STATE_INIT);
|
statemachine_register_state(&init_state, STATE_INIT);
|
||||||
// statemachine_register_state(&main_state, STATE_CAR_INFO);
|
statemachine_register_state(&main_state, STATE_CAR_INFO);
|
||||||
// statemachine_init();
|
statemachine_init();
|
||||||
|
|
||||||
|
|
||||||
obd2_TC_init();
|
|
||||||
Serial.println("init done");
|
|
||||||
obd2_TC_set_RC_value(50000);
|
|
||||||
Serial.println("set RC");
|
|
||||||
obd2_TC_start();
|
|
||||||
Serial.print("Timer initialized and started");
|
|
||||||
// Timer3.attachInterrupt(timer_handler);
|
|
||||||
// Timer3.start(50000);
|
|
||||||
Serial.println("gagfadfgadfsd");
|
|
||||||
|
|
||||||
|
Timer3.attachInterrupt(timer_handler);
|
||||||
|
Timer3.start(S(5));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
|
|
||||||
// statemachine_loop();
|
statemachine_loop();
|
||||||
// Serial.println("Running");
|
// Serial.println("Running");
|
||||||
// delay(10);
|
// delay(10);
|
||||||
// while (Serial1.available())
|
// while (Serial1.available())
|
||||||
|
|||||||
@@ -60,9 +60,7 @@ void obd2_TC_init()
|
|||||||
TC0->TC_CHANNEL[0].TC_IDR = 0xFFFFFFFF;
|
TC0->TC_CHANNEL[0].TC_IDR = 0xFFFFFFFF;
|
||||||
/* Clear status register by reading it*/
|
/* Clear status register by reading it*/
|
||||||
TC0->TC_CHANNEL[0].TC_SR;
|
TC0->TC_CHANNEL[0].TC_SR;
|
||||||
|
|
||||||
/* disable the quadrature decoder, to route the IO pins of TIOA and TIOB directly to the timer counter function (36.6.14.1) */
|
|
||||||
// TC0->TC_BMR &= ~(TC_BMR_QDEN);
|
|
||||||
/* Set wave mode to UP mode with automatic trigger, select wave mode, set the clock to MCK / 2*/
|
/* Set wave mode to UP mode with automatic trigger, select wave mode, set the clock to MCK / 2*/
|
||||||
TC0->TC_CHANNEL[0].TC_CMR = TC_CMR_WAVSEL_UP_RC | TC_CMR_WAVE | TC_CMR_TCCLKS_TIMER_CLOCK1;
|
TC0->TC_CHANNEL[0].TC_CMR = TC_CMR_WAVSEL_UP_RC | TC_CMR_WAVE | TC_CMR_TCCLKS_TIMER_CLOCK1;
|
||||||
/* Enable the RC Compare interrupt*/
|
/* Enable the RC Compare interrupt*/
|
||||||
|
|||||||
@@ -33,6 +33,11 @@ __UINT8_TYPE__ statemachine_init()
|
|||||||
|
|
||||||
void statemachine_loop()
|
void statemachine_loop()
|
||||||
{
|
{
|
||||||
|
if (states[current_state_id].next == current_state_id)
|
||||||
|
{
|
||||||
|
next = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (next)
|
if (next)
|
||||||
{
|
{
|
||||||
next = 0;
|
next = 0;
|
||||||
@@ -41,13 +46,13 @@ void statemachine_loop()
|
|||||||
{
|
{
|
||||||
states[current_state_id].on_exit();
|
states[current_state_id].on_exit();
|
||||||
}
|
}
|
||||||
if (states[current_state_id].next >= 0 && states[current_state_id].next != current_state_id)
|
if (states[current_state_id].next >= 0)
|
||||||
{
|
{
|
||||||
current_state_id = states[current_state_id].next;
|
current_state_id = states[current_state_id].next;
|
||||||
}
|
}
|
||||||
states[current_state_id].on_enter();
|
states[current_state_id].on_enter();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (states[current_state_id].on_run != NULL)
|
if (states[current_state_id].on_run != NULL)
|
||||||
{
|
{
|
||||||
states[current_state_id].on_run();
|
states[current_state_id].on_run();
|
||||||
|
|||||||
Reference in New Issue
Block a user