Files
bobbycar-buttonboard-firmware/bobbycar-buttonboard-firmware.ino
2022-04-25 20:23:18 +02:00

176 lines
3.9 KiB
C++

#include <ezButton.h>
#include <Arduino.h>
#include <eXoCAN.h>
#define BTN1 PB4
#define BTN2 PB3
#define BTN3 PA15
#define BTN4 PB12
#define BTN5 PB11
#define BTN6 PB10
#define MDBT1 PB7
#define MDBT2 PA8
#define MDBT3 PB13
#define MDBT4 PB0
#define MDLED4 PB6
#define MDLED3 PB15
#define MDLED2 PB14
#define MDLED1 PB1
int txMsgID = 0x100;
int rxMsgID = 0x180;
uint8_t txData[1]{0x00};
uint8_t txDataLen = 1;
uint32_t txDly = 5000; // mSec
int id, fltIdx;
uint8_t rxbytes[8];
eXoCAN can;
ezButton ModeButton1(MDBT1);
ezButton ModeButton2(MDBT2);
ezButton ModeButton3(MDBT3);
ezButton ModeButton4(MDBT4);
ezButton Button1(BTN1);
ezButton Button2(BTN2);
ezButton Button3(BTN3);
ezButton Button4(BTN4);
ezButton Button5(BTN5);
ezButton Button6(BTN6);
void setup()
{
can.begin(STD_ID_LEN, BR250K, PORTA_11_12_WIRE_PULLUP); // 11b IDs, 250k bit rate, no transceiver chip, portA pins 11,12
can.filterMask16Init(0, 0, 0x7ff, 0, 0); // filter bank 0, filter 0: don't pass any, flt 1: pass all msgs
pinMode(MDLED1, OUTPUT);
pinMode(MDLED2, OUTPUT);
pinMode(MDLED3, OUTPUT);
pinMode(MDLED4, OUTPUT);
ModeButton1.setDebounceTime(50); // set debounce time to 50 milliseconds
ModeButton2.setDebounceTime(50); // set debounce time to 50 milliseconds
ModeButton3.setDebounceTime(50); // set debounce time to 50 milliseconds
ModeButton4.setDebounceTime(50); // set debounce time to 50 milliseconds
Button1.setDebounceTime(50); // set debounce time to 50 milliseconds
Button2.setDebounceTime(50); // set debounce time to 50 milliseconds
Button3.setDebounceTime(50); // set debounce time to 50 milliseconds
Button4.setDebounceTime(50); // set debounce time to 50 milliseconds
Button5.setDebounceTime(50); // set debounce time to 50 milliseconds
Button6.setDebounceTime(50); // set debounce time to 50 milliseconds
}
void signal_can(uint8_t button_number, bool on_off)
{
txData[0] = button_number;
txMsgID = 0x100|on_off;
can.transmit(txMsgID, txData, txDataLen);
}
uint32_t last = 0;
void loop()
{
ModeButton1.loop(); // MUST call the loop() function first
ModeButton2.loop(); // MUST call the loop() function first
ModeButton3.loop(); // MUST call the loop() function first
ModeButton4.loop(); // MUST call the loop() function first
Button1.loop(); // MUST call the loop() function first
Button2.loop(); // MUST call the loop() function first
Button3.loop(); // MUST call the loop() function first
Button4.loop(); // MUST call the loop() function first
Button5.loop(); // MUST call the loop() function first
Button6.loop(); // MUST call the loop() function first
if(Button1.isPressed())
signal_can(1,1);
if(Button1.isReleased())
signal_can(1,0);
if(Button2.isPressed())
signal_can(2,1);
if(Button2.isReleased())
signal_can(2,0);
if(Button3.isPressed())
signal_can(3,1);
if(Button3.isReleased())
signal_can(3,0);
if(Button4.isPressed())
signal_can(4,1);
if(Button4.isReleased())
signal_can(4,0);
if(Button5.isPressed())
signal_can(5,1);
if(Button5.isReleased())
signal_can(5,0);
if(Button6.isPressed())
signal_can(6,1);
if(Button6.isReleased())
signal_can(6,0);
if(ModeButton1.isPressed())
signal_can(10,1);
if(ModeButton1.isReleased())
signal_can(10,0);
if(ModeButton2.isPressed())
signal_can(11,1);
if(ModeButton2.isReleased())
signal_can(11,0);
if(ModeButton3.isPressed())
signal_can(12,1);
if(ModeButton3.isReleased())
signal_can(12,0);
if(ModeButton4.isPressed())
signal_can(13,1);
if(ModeButton4.isReleased())
signal_can(13,0);
if (can.receive(id, fltIdx, rxbytes) > -1) // poll for rx
{
if (id == rxMsgID)
{
digitalWrite(MDLED1, rxbytes[0] & 0x01);
digitalWrite(MDLED2, rxbytes[0] & 0x02);
digitalWrite(MDLED3, rxbytes[0] & 0x04);
digitalWrite(MDLED4, rxbytes[0] & 0x08);
}
}
}