const int ledPin1 = 8;
const int buttonPin = 2;
unsigned long lastButtonUpdate = 0;
//Driftstæller variabler
bool lastState_LED = false;
unsigned int timeBufferDage_LED = 0;
byte timeBufferTimer_LED = 0;
byte timeBufferMinutter_LED = 0;
byte timeBufferSekunder_LED = 0;
unsigned long timerStart_LED = 0;
unsigned int CounterTurnOnTimes_LED = 0;
//Driftstæller printer
unsigned long lastPrintUpdate = 0;
unsigned long IntervalPrintUpdate = 2000;//Print besked hver 2s
void setup() {
Serial.begin(115200);
pinMode(ledPin1, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
//Til at tænde og slukke LED. Har ikke noget med selve driftstælleren at gøre.
if(millis()-lastButtonUpdate > 500){//Latch så funktionen kun køres maks en gang hver 500ms
if(!digitalRead(buttonPin)){//Nogen har trykket på knappen, skift led tilstand.
digitalWrite(ledPin1, !digitalRead(ledPin1));//Sætter output på LED til det modsatte af nuværende
Serial.println("Skifter LED tilstand");
lastButtonUpdate = millis();
}
}
//Driftstæller
if(digitalRead(ledPin1) != lastState_LED){//LEDen har ændret tilstand
if(lastState_LED){//Den er gået fra tændt til slukket
timeBufferSekunder_LED += (millis() - timerStart_LED)/1000;//Lægger tiden som var gået siden sidste tænd, til bufferen
}else{//Den er gået fra slukket til tændt
timerStart_LED = millis();
CounterTurnOnTimes_LED++; //Læg 1 til. Samme som CounterTurnOnTimes_LED = CounterTurnOnTimes_LED + 1
}
lastState_LED = digitalRead(ledPin1);
}
// - Tidsskifte kode s -> min -> timer -> dage
if(millis() - timerStart_LED > 1000 && digitalRead(ledPin1)){//Tæller ref har opnået over 1s opsparet tid. Overfør til buffer.
timeBufferSekunder_LED++;//Læg 1s til sekund buffer
timerStart_LED += 1000;//Skub timer start 1s frem.
if(timeBufferSekunder_LED > 59){//Sekundbuffer har opnået 60s. Overfør til minut tæller.
timeBufferSekunder_LED -= 60;//Trækker 60 fra
timeBufferMinutter_LED++;
if(timeBufferMinutter_LED > 59){//60min = 1 time
timeBufferMinutter_LED -= 60;
timeBufferTimer_LED++;
if(timeBufferTimer_LED > 23){//24 timer = 1 dag
timeBufferTimer_LED -= 24;
timeBufferDage_LED++;
}
}
}
}
//Printer driftstid
if(millis() - lastPrintUpdate > IntervalPrintUpdate){
Serial.print("Driftstid LED: ");
Serial.print(timeBufferDage_LED);
Serial.print("dage - ");
Serial.print(timeBufferTimer_LED);
Serial.print("t:");
Serial.print(timeBufferMinutter_LED);
Serial.print("m:");
Serial.print(timeBufferSekunder_LED);
Serial.println("s");//Printer sekunder s tegn
Serial.print("Antal tænd: ");
Serial.print(CounterTurnOnTimes_LED);
Serial.println("gange");
Serial.println("");
lastPrintUpdate = millis();
}
}