uwezi icon

20230114_pehr_01.cpp

uwezi | PRO | 01/17/23 04:24:39 PM UTC | 0 ⭐ | 351 👁️ | Never ⏰ | []
Arduino |

2.76 KB

|

None

|

0 👍

/

0 👎

#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