diff --git a/src/Firmware/Firmware.ino b/src/Firmware/Firmware.ino new file mode 100644 index 0000000..e098116 --- /dev/null +++ b/src/Firmware/Firmware.ino @@ -0,0 +1,58 @@ +#define HAPTIC_FWD_PIN 3 +#define HAPTIC_MID_PIN 5 +#define HAPTIC_BACK_PIN 6 +#define MQ3_ENABLE_PIN 4 +#define MQ3_READ_PIN A0 +#define MQ3_READ_RATE 100 + +unsigned long lastSend = 0; +uint8_t cmd = 0xFF; + +void setup() { + pinMode(HAPTIC_FWD_PIN, OUTPUT); + pinMode(HAPTIC_MID_PIN, OUTPUT); + pinMode(HAPTIC_BACK_PIN, OUTPUT); + pinMode(MQ3_ENABLE_PIN, OUTPUT); + pinMode(MQ3_READ_PIN, INPUT); + Serial.begin(9600); +} + +void loop() { + if (millis() - lastSend > MQ3_READ_RATE) { + Serial.print(analogRead(MQ3_READ_PIN)); + Serial.print("\n"); + lastSend = millis(); + } + + if (Serial.available() > 0) { + if (cmd == 0xFF) { + cmd = Serial.read(); + } + + if (cmd == 0x00) { // Turn off MQ3 + digitalWrite(MQ3_ENABLE_PIN, LOW); + cmd = 0xFF; + } else if (cmd == 0x01) { // Turn on MQ3 + digitalWrite(MQ3_ENABLE_PIN, HIGH); + cmd = 0xFF; + } else if (cmd == 0x02) { // Send motor commands + if (Serial.available() >= 3) { + analogWrite(HAPTIC_FWD_PIN, Serial.read()); + analogWrite(HAPTIC_MID_PIN, Serial.read()); + analogWrite(HAPTIC_BACK_PIN, Serial.read()); + cmd = 0xFF; + } + } else if (cmd == 0x10) { // Ping + Serial.print("P\n"); + cmd = 0xFF; + } else if (cmd == 0x11) { // Oh god oh fuck it's on fire + analogWrite(HAPTIC_FWD_PIN, 0); + analogWrite(HAPTIC_MID_PIN, 0); + analogWrite(HAPTIC_BACK_PIN, 0); + digitalWrite(MQ3_ENABLE_PIN, LOW); + cmd = 0xFF; + } else { + cmd = 0xFF; + } + } +}