- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 20

Thema: Sketch - fehlermeldung "expected initializer before 'switch'"

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #19
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    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
      }
    }
    Geändert von Sisor (09.08.2015 um 11:07 Uhr)

Ähnliche Themen

  1. Antworten: 13
    Letzter Beitrag: 02.12.2014, 09:13
  2. Error: expected identifier before "." token
    Von Artemis_Simetra im Forum Arduino -Plattform
    Antworten: 13
    Letzter Beitrag: 18.01.2014, 20:15
  3. Antworten: 3
    Letzter Beitrag: 06.01.2012, 15:30
  4. "initializer element is not constant"
    Von Mauro im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 21.05.2010, 20:11
  5. Antworten: 13
    Letzter Beitrag: 27.01.2009, 12:50

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests