#include <XNode.h>
#include <TimedAction.h>
#include <Servo.h>
//GLOBALS
const int servoPin = 0; // Pin für die steuerung des Servos
bool increment = true; // true, wenn Winkel des Servos erhöht werden soll
short pos = 0; // aktueller Winkel des Servos
const int ledPin = 12; // Pin für die LED
int ledState = LOW; // LED standardmäßig ausgeschalted
int randomAngle = random(90);
int LEDrandom = random(100);
bool virus = false;
int i = 0;
int output_pin = 14;
int output_virus_pin = 2;
int input_pin = 4;
int input_virus_pin = 5;
XNode node(input_pin, output_pin, input_virus_pin, output_virus_pin);
Servo myservo;
//FUNCTIONS
// schaltet LED ein/aus
void ledBlink() {
// ist LED ein oder aus – kehrt wert um
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
// Versetzt LED in den aktuellen Status
digitalWrite(ledPin, ledState);
}
//timers – müssen NACH den Funktionen kommen
TimedAction ledThread = TimedAction(500, ledBlink);
void setup() {
pinMode(ledPin, OUTPUT); // deklariert ledpin als output
Serial.begin(115200); // definiert datenfrequetz – nur für Serial Monitor
node.init();
node.setInterval(50);
}
void loop() {
if (/*node.virusDetect()*/ virus == true) {
myservo.attach(0); // Servo wird aktiviert
myservo.write(randomAngle);
delay(30);
randomAngle = random(90);
LEDrandom = random(100);
if (LEDrandom < 50) {
digitalWrite(ledPin, LOW);
}
else {
digitalWrite(ledPin, HIGH);
}
}
else {
ledThread.check();
myservo.attach(0); // Servo wird aktiviert
for (pos = 0; pos <= 90; pos++) { // geht von 0 bis 90 Grad durch
// prüften wann aktionen durchgeführt werden sollen, auch wärend der Schleife
ledThread.check();
myservo.write(pos); // Servo nimmt position aus Variable 'pos' ein
Serial.println(pos);
delay(15); // pause damit Servo Zeit hat die Position einzunehmen
if (pos == 90) {
node.send();
Serial.println("senden");
}
}
myservo.detach(); //deaktiviert Servo – braucht weniger Strom
digitalWrite(0, LOW);
for (i = 0; i <= 5000; i++) {
ledThread.check();
delay(1);
}
myservo.attach(0); // Servo wird aktiviert
for (pos = 90; pos >= 0; pos--) { // geht von 0 bis 90 Grad durch
// prüften wann Aktionen durchgeführt werden sollen, auch während der Schleife
ledThread.check();
myservo.write(pos); // Servo nimmt position aus Variable 'pos' ein
Serial.println(pos);
delay(15); // Pause damit Servo Zeit hat die Position einzunehmen
}
myservo.detach(); //deaktiviert Servo – braucht weniger Strom
digitalWrite(0, LOW);
for (i = 0; i <= 5000; i++) {
ledThread.check();
delay(1);
}
}
}