add module code
This commit is contained in:
parent
f1ca1097ae
commit
db8d13fb37
1 changed files with 179 additions and 0 deletions
179
src/module/module.ino
Normal file
179
src/module/module.ino
Normal file
|
@ -0,0 +1,179 @@
|
|||
#include <CAN.h>
|
||||
#include <ezButton.h>
|
||||
|
||||
#define HANDLE_MESSAGE(type) case type: handle_##type(); break;
|
||||
|
||||
#define PUZZLE_M_HANLO 0
|
||||
#define PUZZLE_M_STRIKE 1
|
||||
#define PUZZLE_M_SOLVED 2
|
||||
|
||||
|
||||
enum gamestate {
|
||||
PENDING, RUNNING, SOLVED, TIMEOUT, STRIKEOUT
|
||||
};
|
||||
|
||||
enum controller_m_type {
|
||||
ACK, HELLO, GAME_START, GAME_STATE, GAME_SOLVED, GAME_TIMEOUT, GAME_STRIKEOUT
|
||||
};
|
||||
|
||||
typedef struct state {
|
||||
gamestate game_state;
|
||||
uint32_t time;
|
||||
uint8_t cur_strikes;
|
||||
uint8_t max_strikes;
|
||||
} state_s;
|
||||
|
||||
state_s state = { .game_state = PENDING, .time = (uint32_t) -1 };
|
||||
|
||||
uint16_t id = 0b00100000010;
|
||||
|
||||
ezButton green_button(5); // create ezButton object that attach to pin 5;
|
||||
ezButton red_button(7); // create ezButton object that attach to pin 7;
|
||||
|
||||
/* Send Hanlo to controller */
|
||||
void hanlo() {
|
||||
Serial.println("-> HANLO");
|
||||
CAN.beginPacket(id);
|
||||
CAN.write(PUZZLE_M_HANLO); /* Message Type */
|
||||
CAN.endPacket();
|
||||
}
|
||||
|
||||
/* Send Hanlo to controller */
|
||||
void strike() {
|
||||
Serial.println("-> STRIKE");
|
||||
CAN.beginPacket(id);
|
||||
CAN.write(PUZZLE_M_STRIKE); /* Message Type */
|
||||
CAN.endPacket();
|
||||
}
|
||||
|
||||
/* Send Hanlo to controller */
|
||||
void solved() {
|
||||
Serial.println("-> SOLVED");
|
||||
CAN.beginPacket(id);
|
||||
CAN.write(PUZZLE_M_SOLVED); /* Message Type */
|
||||
CAN.endPacket();
|
||||
}
|
||||
|
||||
/* Handle Ack message from controller */
|
||||
void handle_ACK() {
|
||||
Serial.println("<- ACK");
|
||||
}
|
||||
|
||||
/* Handle Hello message from controller */
|
||||
void handle_HELLO() {
|
||||
Serial.println("<- HELLO");
|
||||
hanlo();
|
||||
}
|
||||
|
||||
/* Handle Game start message from controller */
|
||||
void handle_GAME_START() {
|
||||
Serial.println("<- GAME_START");
|
||||
state.game_state = RUNNING;
|
||||
handle_GAME_STATE();
|
||||
}
|
||||
|
||||
/* Handle State message from controller */
|
||||
void handle_GAME_STATE() {
|
||||
Serial.println("<- GAME_STATE");
|
||||
state.time =
|
||||
((uint32_t) CAN.read() << 24) |
|
||||
((uint32_t) CAN.read() << 16) |
|
||||
((uint32_t) CAN.read() << 8) |
|
||||
CAN.read();
|
||||
state.cur_strikes = CAN.read();
|
||||
state.max_strikes = CAN.read();
|
||||
|
||||
Serial.print("TIME: ");
|
||||
Serial.println(state.time);
|
||||
Serial.print("CUR_STRIKES: ");
|
||||
Serial.println(state.cur_strikes);
|
||||
Serial.print("MAX_STRIKES: ");
|
||||
Serial.println(state.max_strikes);
|
||||
}
|
||||
|
||||
/* Handle Solved message from controller */
|
||||
void handle_GAME_SOLVED() {
|
||||
Serial.println("<- GAME_SOLVED");
|
||||
state.game_state = SOLVED;
|
||||
}
|
||||
|
||||
/* Handle Timeout message from controller */
|
||||
void handle_GAME_TIMEOUT() {
|
||||
Serial.println("<- GAME_TIMEOUT");
|
||||
state.game_state = TIMEOUT;
|
||||
}
|
||||
|
||||
/* Handle Strikeout message from controller */
|
||||
void handle_GAME_STRIKEOUT() {
|
||||
Serial.println("<- GAME_STRIKEOUT");
|
||||
state.game_state = STRIKEOUT;
|
||||
}
|
||||
|
||||
void doCAN() {
|
||||
if (CAN.parsePacket()) {
|
||||
Serial.println("--- GOT_CAN ---");
|
||||
/* only react to messages from the controller */
|
||||
if (CAN.filter(0b00000000000, 0b01100000000)) {
|
||||
Serial.println("--- HANDLING ---");
|
||||
if (CAN.peek() != -1) {
|
||||
uint8_t message_type = CAN.read();
|
||||
Serial.print("MESSAGE_TYPE: ");
|
||||
Serial.println(message_type, HEX);
|
||||
switch(message_type) {
|
||||
HANDLE_MESSAGE(ACK)
|
||||
HANDLE_MESSAGE(HELLO)
|
||||
HANDLE_MESSAGE(GAME_START)
|
||||
HANDLE_MESSAGE(GAME_STATE)
|
||||
HANDLE_MESSAGE(GAME_SOLVED)
|
||||
HANDLE_MESSAGE(GAME_TIMEOUT)
|
||||
HANDLE_MESSAGE(GAME_STRIKEOUT)
|
||||
default:
|
||||
Serial.println("--- NO_HANDLER_FOUND ---");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Serial.println("--- IGNORING ---");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void setup() {
|
||||
/* Init Serial */
|
||||
Serial.begin(9600);
|
||||
Serial.println("--- INITIATING ---");
|
||||
Serial.print("ID: ");
|
||||
Serial.println(id, HEX);
|
||||
|
||||
/* Init Can pins */
|
||||
// CAN.setPins(cs,irq);
|
||||
|
||||
/* Set SPI Frequency */
|
||||
// CAN.setSPIFrequency(frequency);
|
||||
|
||||
if (!CAN.begin(50E3)) {
|
||||
Serial.println("--- FAILED_TO_INIT_CAN ---");
|
||||
while(1) {};
|
||||
}
|
||||
|
||||
red_button.setDebounceTime(50);
|
||||
green_button.setDebounceTime(50);
|
||||
|
||||
Serial.println("--- INITIALIZED ---");
|
||||
}
|
||||
|
||||
void loop() {
|
||||
red_button.loop();
|
||||
green_button.loop();
|
||||
|
||||
/* Handle CAN messages */
|
||||
doCAN();
|
||||
|
||||
if (green_button.isPressed()) {
|
||||
solved();
|
||||
}
|
||||
|
||||
if (red_button.isPressed()) {
|
||||
strike();
|
||||
}
|
||||
// TODO
|
||||
}
|
Loading…
Reference in a new issue