#include <Thread.h>
#include <ThreadController.h>
#include "SoftwareSerial.h"
int RELAY = 3;
int LED = 13;
int hit = 0;
int miss = 0;
boolean relaisOn = false;
boolean keepRelaisOn = false;
unsigned long lastX = 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") {
lastX = millis();
keepRelaisOn = true;
}
}
}
// callback for Thread2
void relayCallback() {
if (keepRelaisOn && !relaisOn && millis()-lastX > 10) { // Delay to switch on = 10 msec
digitalWrite(RELAY, HIGH);
digitalWrite(LED, HIGH);
Serial.println("ON");
relaisOn = true;
keepRelaisOn = false;
}
if (relaisOn && millis()-lastX > 1000) { // Delay to switch off = 1000 msec (for manual use ;-) )
digitalWrite(RELAY, LOW);
digitalWrite(LED, LOW);
Serial.println("OFF");
relaisOn = false;
keepRelaisOn = false;
}
}
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(100);
// Adds both threads to the controller
lastX = millis();
controll.add(Thread1);
controll.add(&Thread2); // & to pass the pointer to it
}
void loop(){
controll.run();
}