#include <Thread.h>
#include <ThreadController.h>
#include "SoftwareSerial.h"
int RELAY = 3;
int LED = 13;
int hit = 0;
int miss = 0;
uint32_t mytime = 0;
uint32_t mytime2 = 0;
String command = "0";
SoftwareSerial Serial1(4,5);
// ThreadController that will controll all threads
ThreadController controll = ThreadController();
//My Thread (as a pointer)
Thread* Thread1 = new Thread();
//His Thread (not pointer)
Thread Thread2 = Thread();
// callback for Thread1
void serialCallback(){
if (Serial.available() > 0) {
command = Serial.readString();
command.trim();
if (command == "X") {
hit += 10;
} else {
miss++;
}
Serial1.println(String(hit) + " " + String(miss));
} else {
//hit = 0;
}
}
// callback for Thread2
void relayCallback() {
if (((millis() - mytime) > 100) && (miss < hit)) {
mytime = millis();
digitalWrite(RELAY, HIGH);
digitalWrite(LED, HIGH);
Serial1.println("ON");
}
if (((millis() - mytime2) > 100) && (miss > hit)) {
mytime2 = millis();
digitalWrite(RELAY, LOW);
digitalWrite(LED, LOW);
Serial1.println("OFF");
}
}
void setup(){
Serial.begin(115200, SERIAL_8N1);
Serial.setTimeout(3);
Serial1.begin(9600); //DEBUG PORT
Serial1.setTimeout(3);
Serial.println("Start");
pinMode(LED, OUTPUT);
pinMode(RELAY, OUTPUT);
digitalWrite(RELAY, LOW);
digitalWrite(LED, LOW);
// Configure Thread1
Thread1->onRun(serialCallback);
Thread1->setInterval(1);
// Configure Thread2
Thread2.onRun(relayCallback);
Thread2.setInterval(1);
// Adds both threads to the controller
controll.add(Thread1);
controll.add(&Thread2); // & to pass the pointer to it
}
void loop(){
controll.run();
}