From 54a87bb7118c5176ee77f0b1562bbd7eb5c8ef81 Mon Sep 17 00:00:00 2001 From: redfast00 Date: Wed, 26 Aug 2020 23:35:13 +0200 Subject: [PATCH] Change library to use callback functions, add basic hardware --- lib/obus_can.cpp | 5 ++++- lib/obus_module.cpp | 39 +++++++++++++++++++++++++++++++++++- lib/obus_module.h | 6 +++++- src/template_module/main.ino | 13 ++++++++++-- 4 files changed, 58 insertions(+), 5 deletions(-) diff --git a/lib/obus_can.cpp b/lib/obus_can.cpp index 6068597..daacb36 100644 --- a/lib/obus_can.cpp +++ b/lib/obus_can.cpp @@ -2,9 +2,12 @@ #include "obus_can.h" +// Chip select for the CAN module +#define MCP_CS 8 + namespace obus_can { -MCP2515 mcp2515(10); +MCP2515 mcp2515(MCP_CS); bool is_init = false; diff --git a/lib/obus_module.cpp b/lib/obus_module.cpp index b3b6a21..8903f5b 100644 --- a/lib/obus_module.cpp +++ b/lib/obus_module.cpp @@ -1,11 +1,23 @@ #include "obus_can.h" #include "obus_module.h" +#define RED_LED A4 +#define GREEN_LED A5 + +#define MCP_INT 2 + namespace obus_module { + struct obus_can::module this_module; uint8_t strike_count; +bool running; +bool error; +uint32_t time_stop_strike_led; +void interrupt_can_error() { + error = true; +} void setup(uint8_t type, uint8_t id) { this_module.type = type; @@ -14,19 +26,44 @@ void setup(uint8_t type, uint8_t id) { obus_can::init(); strike_count = 0; + running = false; + error = false; + pinMode(RED_LED, OUTPUT); + pinMode(GREEN_LED, OUTPUT); + digitalWrite(RED_LED, LOW); + digitalWrite(GREEN_LED, LOW); } -void loop() { +bool loop(obus_can::message* message) { + // Check if the message buffer overflowed + if (error) { + // Loop forever while blinking status led orange + bool blink = false; + while (true) { + digitalWrite(RED_LED, blink); + digitalWrite(GREEN_LED, blink); + blink = !blink; + delay(500); + } + } + if (time_stop_strike_led && time_stop_strike_led > millis()) { + digitalWrite(RED_LED, LOW); + } + // TODO receive CAN frame and call callback functions } void strike() { strike_count++; + digitalWrite(RED_LED, HIGH); + time_stop_strike_led = millis() + 1000; obus_can::send_m_strike(this_module, strike_count); } void solve() { obus_can::send_m_solved(this_module); + digitalWrite(GREEN_LED, HIGH); + running = false; } } diff --git a/lib/obus_module.h b/lib/obus_module.h index 163c5e0..10dca7b 100644 --- a/lib/obus_module.h +++ b/lib/obus_module.h @@ -4,11 +4,15 @@ #include "Arduino.h" #include +void callback_game_start(); + +void callback_game_stop(); + namespace obus_module { void setup(uint8_t type, uint8_t id); -void loop(); +bool loop(obus_can::message* message); void strike(); diff --git a/src/template_module/main.ino b/src/template_module/main.ino index 0d704b4..d98c8d7 100644 --- a/src/template_module/main.ino +++ b/src/template_module/main.ino @@ -4,7 +4,7 @@ #include void setup() { - Serial.begin(9600); + Serial.begin(115200); // Choose one // Puzzle: a module that must be solved @@ -13,7 +13,16 @@ void setup() { // obusmodule_init(OBUS_TYPE_NEEDY, /* Retrieve ID from MOANA */); } +obus_can::message message; void loop() { - obus_module::loop(); + bool is_message_valid = obus_module::loop(&message); +} + +void callback_game_start() { + +} + +void callback_game_stop() { + }