Hi wendtdir,
ich hatte grade mal wieder Lust auf C++ schreiben. Daher hab ich deinen Code mal umgebaut und ein paar grundlegende Programmierregeln umgesetzt.
Was ich da gemacht habe, und warum? - Das darfst du dir gerne selber erarbeiten.
Code:#include <LiquidCrystal.h> #include <IRremote.h> const byte ANALOG_PIN_TEMP = 0; const byte PIN_MOVEMENT = 2; const byte PIN_RECEIVER = 3; const byte PIN_LED_GREEN = 11; const byte PIN_LED_RED = 12; enum {CODE_TASTE1 = 16724175, CODE_TASTE2 = 16743045}; const int MESSAGE_EINDRINGLING_DURATION = 3000; LiquidCrystal lcd(4,5,6,7,8,9); IRrecv irrecv(PIN_RECEIVER); volatile boolean movementDetected = false; void setup() { lcd.begin(16,2); lcd.clear(); pinMode(PIN_MOVEMENT, INPUT); pinMode(PIN_LED_GREEN, OUTPUT); pinMode(PIN_LED_RED, OUTPUT); digitalWrite(PIN_LED_RED, LOW); digitalWrite(PIN_LED_GREEN, LOW); irrecv.enableIRIn(); Serial.begin(9600); Serial.println("Start"); } void ISR_OnMovement() { movementDetected = true; } void printEindringling() { lcd.setCursor(0, 0); lcd.print("Eindringling"); lcd.setCursor(0, 1); lcd.print("erkannt"); } void printTemperatur(float celsius) { lcd.clear(); lcd.setCursor(0,0); lcd.print("Temperatur:"); lcd.setCursor(0,1); lcd.print(celsius,0); lcd.setCursor(3,1); lcd.print("Grad"); } float analog2celsius(float analogValue) { float voltage = analogValue*5000/1023 - 500; float celsius = voltage / 10; return celsius; } void loop() { decode_results results; static unsigned long detectionMoment = -MESSAGE_EINDRINGLING_DURATION-1; if (movementDetected) { digitalWrite(PIN_LED_RED, HIGH); printEindringling(); Serial.println("1"); detectionMoment = millis(); movementDetected = false; } if (irrecv.decode(&results)) { irrecv.resume(); switch(results.value) { case CODE_TASTE1: digitalWrite(PIN_LED_GREEN, HIGH); attachInterrupt(0, ISR_OnMovement, RISING); Serial.println("2"); break; case CODE_TASTE2: digitalWrite(PIN_LED_GREEN, LOW); detachInterrupt(0); Serial.println("3"); break; } } boolean messageTimeExpired = millis()-detectionMoment > MESSAGE_EINDRINGLING_DURATION; if (messageTimeExpired ) { digitalWrite(PIN_LED_RED, LOW); float celsius = analog2celsius(analogRead(ANALOG_PIN_TEMP)); printTemperatur(celsius); detectionMoment = millis()-MESSAGE_EINDRINGLING_DURATION-1; // Meldung nach 49 Tagen vermeiden } }







Zitieren
Lesezeichen