#include "GLOBALS.hpp"
void setup() {
Serial.begin(9600);
// bleSerial.begin(9600);
myChances.begin();
sevenSegment.begin();
buzz.begin();
startButton.begin();
buzzWire.begin();
winWire.begin();
attachInterrupt(digitalPinToInterrupt(pushbuttonPin), buttonPressedISR, CHANGE);
attachInterrupt(digitalPinToInterrupt(buzzWirePin), touchISR, CHANGE);
attachPinChangeInterrupt(digitalPinToPCINT(winWirePin), winISR, CHANGE);
}
void loop() {
if (Serial.available()) {
String receivedString = Serial.readString();
buzzWireStatus = static_cast<buzzWireStates>(receivedString.charAt(0));
}
// if (bleSerial.available()){
// String receivedString = bleSerial.readString();
// buzzWireStatus = static_cast<buzzWireStates>(receivedString.charAt(0));
// }
//state machine switch case
switch (buzzWireStatus) {
case buzzWireStates::READY:
Serial.println("READY");
if (startButton.getStateChange()) {
switchGo();
}
if(buzzWire.getStateChange()) {
buzzWire.resetState();
}
break;
case buzzWireStates::GO:
Serial.println("GO");
buzz.off();
if(startButton.getStateChange()) {
switchReady();
}
if(buzzWire.getStateChange()) {
buzzwireTouch();
}
if(winWire.getStateChange()) {
win();
}
if(sevenSegment.timeout()) {
lose();
}
break;
case buzzWireStates::TOUCH:
Serial.println("TOUCH");
buzz.on();
if(buzzWire.getStateChange()) {
buzzwireTouch();
}
if(sevenSegment.timeout()) {
lose();
}
break;
case buzzWireStates::WIN:
Serial.println("WIN");
buzz.off();
if(startButton.getStateChange()) {
switchReset();
}
break;
case buzzWireStates::LOSE:
Serial.println("LOSE");
if(startButton.getStateChange()) {
switchReset();
}
buzz.off();
break;
case buzzWireStates::RESET:
Serial.println("RESET");
buzz.off();
myChances.reset();
sevenSegment.reset();
reset();
break;
default:
Serial.println("Code should never enter here");
break;
}
}
void switchGo() {
startButton.resetState();
switch (startButton.pushbuttonStatus) {
case Pushbutton::PRESSED:
buzzWireStatus = buzzWireStates::GO;
break;
case Pushbutton::RELEASED:
break;
}
}
void switchReady() {
startButton.resetState();
switch (startButton.pushbuttonStatus) {
case Pushbutton::PRESSED:
buzzWireStatus = buzzWireStates::READY;
break;
case Pushbutton::RELEASED:
break;
}
}
void win() {
winWire.resetState();
switch (winWire.pushbuttonStatus) {
case Pushbutton::PRESSED:
buzzWireStatus = buzzWireStates::WIN;
break;
case Pushbutton::RELEASED:
break;
}
}
void switchReset() {
startButton.resetState();
switch (startButton.pushbuttonStatus) {
case Pushbutton::PRESSED:
buzzWireStatus = buzzWireStates::RESET;
break;
case Pushbutton::RELEASED:
break;
}
}
void buzzwireTouch() {
buzzWire.resetState();
switch (buzzWire.pushbuttonStatus) {
case Pushbutton::PRESSED:
buzzWireStatus = buzzWireStates::TOUCH;
break;
case Pushbutton::RELEASED:
if(myChances.decrementChance())
buzzWireStatus = buzzWireStates::LOSE;
else
buzzWireStatus = buzzWireStates::GO;
break;
}
}
void lose() {
buzzWireStatus = buzzWireStates::LOSE;
}
void reset() {
buzzWireStatus = buzzWireStates::READY;
}