- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 20

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

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    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)

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    04.05.2015
    Beiträge
    41
    Erstmal ein Danke an alle, für die Hilfe. Ich muss wirklich sagen, dass bei allen Problemen, die ich bis jetzt hatte hier immer geholfen wurde, anders als in anderen Foren.

    Zu dem Sketch von Sisor, ich habe halbwegs versucht das nachzuvollziehen, da ich bisher wenig Erfahrung habe mit C und noch weniger mit C++ ist es natürlich für mich nur teilweise möglich, denn ich versuche mich da mit einem Buch ein wenig einzuarbeiten.

    Dein Sketch funktioniert ohne Probleme, etwas musste ich je doch verändern, die Temperaturanzeige war nicht zu lesen, da sie im Loop immer wieder schnell hintereinander ausgegeben wurde. Jetzt läuft es so, dass sie angezeigt wird. Danke also nochmals für die Arbeit.

    Für mich bleibt jetzt nur noch eins, ich werde meine Schaltung abspeichern zusammen mit dem Code und weiter mit dem Workshop fortfahren.

    Gab es nicht mal die Möglichkeit ein Thema als "Erledigt" zu markieren?

Ä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