#include "avr/wdt.h" // Watchdog include. Om processorn hänger sig startar den om.
#define ledPin 15
#define testled 13 // pin 13 inbyggd LED
unsigned long timeLimit=20000; // vänta XX millisekunder innan frånslag vid offline
unsigned long timern; // mellantid
bool offline = LOW; // flagga så processorn inte gör samma sak hela tiden utan bara en gång
int onPackageCounter = 0; // Räknare för inkommande paket
int offPackageCounter = 0; // Räknare för inkommande paket
int requiredPackages = 8; // Antal paket som krävs för att utföra digitalWrite
void setup()
{
wdt_enable(WDTO_8S); // set watchdog att vänta 8 sekunder innan omstart (längsta möjliga tid)
Serial.begin(115200); // lägre hastighet betyder ofta säkrare överföring
pinMode(ledPin, OUTPUT);
pinMode(testled, OUTPUT);
digitalWrite(ledPin, LOW); // definera startup läge low
digitalWrite(testled, LOW);
Serial.println("Startup done, OFF");
}
void loop()
{
wdt_reset(); // nollställ watchdog
if(Serial.available()) // om nya data kommit in
{
timern =millis(); // ny mellantid
String incomingString; // definiera variabel inom klammrarna (scope) för att minska risken för att minne tar slut
incomingString = Serial.readString();
Serial.println(incomingString);
if(incomingString.indexOf("ON") > -1)
{
onPackageCounter++;
offPackageCounter = 0;
incomingString=""; // töm incoming
offline=LOW; // online
if(onPackageCounter >= requiredPackages){
digitalWrite(ledPin, HIGH);
digitalWrite(testled, HIGH);
Serial.println("ON");
onPackageCounter = 0;
}
}
else if(incomingString.indexOf("OFF") > -1)
{
offPackageCounter++;
onPackageCounter=0;
incomingString=""; // töm incoming
offline=LOW; // online
if(offPackageCounter >= requiredPackages){
digitalWrite(ledPin, LOW);
digitalWrite(testled, LOW);
Serial.println("OFF");
offPackageCounter = 0;
}
}
} // end if Serial.available()
//om timeLimit överskriden och inte offline görs detta en gång
if( (millis()-timern > timeLimit) && (offline == LOW) )
{
digitalWrite(ledPin, LOW);
digitalWrite(testled, LOW);
Serial.print("Offline");
offline=HIGH; // nu är det offline
}
} // end loop
Comments