- 12V Akku mit 280 Ah bauen         
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
    Benutzer Stammmitglied
    Registriert seit
    04.05.2015
    Beiträge
    41

    Sketch - fehlermeldung "expected initializer before 'switch'"

    Hallo,

    momentan bin ich am basteln, einer kleinen Temperaturanzeige mit Alarmfunktion. Ich habe eine Schaltung gebaut, die einen Temperatursensor, einen Bewegungssensor, zwei LEDs und einen IR-Empfänger enthält. Wenn ich mein Arduino einschalte, soll mir die Temperatur angezeigt werden. Wenn ich auf meiner IR Fernbedienung eine Taste drücke soll er in den Alarm-Modus wechseln und eine grüne LED als Status leuchten, weiterhin die Temperatur anzeigen, wenn aber eine Bewegung wahrgenommen wird, soll auf meinem Display eine Meldung ausgegeben werden und eine rote LED leuchten. Drücke ich eine andere Taste, soll er in den reinen Temperatur-Modus zurück wechseln. Ich denke, es wäre das richtige Problem für eine Case-Abfrage. Folgenden Code habe ich geschrieben:

    Code:
    #include <LiquidCrystal.h>
    #include <IRremote.h>
    int receiverpin = 3;
    IRrecv irrecv(receiverpin);
    decode_results results;
    
    LiquidCrystal lcd(4,5,6,7,8,9);
    float sensor = 0;
    float celsius = 0;
    float voltage = 0;
    int bewegung=13;
    int bewegungsstatus=0;
    int ledg=11;
    int ledr=12;
    
    void setup() {
      
      lcd.begin(16,2);
      lcd.clear();
      pinMode(bewegung, INPUT);
      pinMode(ledg, OUTPUT);
      pinMode(ledr, OUTPUT);
      irrecv.enableIRIn();
    
    }
    
    void translateIR()
    
    switch(results.value)
    
    {
      case 16724175:
      bewegungsstatus=digitalRead(bewegung);
    
                sensor = analogRead(0);
                voltage = (sensor*5000)/1024;
                voltage = voltage - 500;
                celsius = voltage/10;
    
    
        if(bewegungsstatus==HIGH)
    {
                lcd.setCursor(0,0);
                lcd.print("Eindringling");
                lcd.setCursor(0,1);
                lcd.print("Erkannt");
                digitalWrite(ledr, HIGH);
                digitalWrite(ledg, LOW);
                delay(10000);
                lcd.clear();
     
    
    }
    else
    
    {
                lcd.setCursor(0,0);
                lcd.print("Temperatur:");
                lcd.setCursor(0,1);
                lcd.print(celsius,0);
                lcd.setCursor(3,1);
                lcd.print("Grad");
                digitalWrite(ledr, LOW);
                digitalWrite(ledg, HIGH);
     
    }
    
    break;
    
    case 16743045:
    
                   lcd.setCursor(0,0);
                    lcd.print("Temperatur:");
                    lcd.setCursor(0,1);
                    lcd.print(celsius,0);
                    lcd.setCursor(3,1);
                    lcd.print("Grad");
                    digitalWrite(ledr, LOW);
                    digitalWrite(ledg, HIGH);
    break;
    }
    
    void loop()
    {
      translateIR();
      irrecv.resume();
    }
    Beim kompilieren bekomme ich die Fehlermeldung:

    Arduino: 1.6.5 (Windows 8.1), Platine: "Arduino Uno"

    Build-Optionen wurden verändert, alles wird neu gebaut

    Verwende die Bibliothek LiquidCrystal im Ordner: C:\Program Files (x86)\Arduino\libraries\LiquidCrystal

    Verwende die Bibliothek IRremote im Ordner: C:\Program Files (x86)\Arduino\libraries\IRremote



    C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\standa rd -IC:\Program Files (x86)\Arduino\libraries\LiquidCrystal\src -IC:\Program Files (x86)\Arduino\libraries\IRremote C:\Users\Dirk\AppData\Local\Temp\build503432504808 1929215.tmp\Temp-Bewegung-LCD-IR-Fallabfrage.cpp -o C:\Users\Dirk\AppData\Local\Temp\build503432504808 1929215.tmp\Temp-Bewegung-LCD-IR-Fallabfrage.cpp.o

    Temp-Bewegung-LCD-IR-Fallabfrage.ino:29:1: error: expected initializer before 'switch'
    Multiple libraries were found for "IRremote.h"

    Used: C:\Program Files (x86)\Arduino\libraries\IRremote

    Not used: C:\Program Files (x86)\Arduino\libraries\RobotIRremote

    expected initializer before 'switch'

    Was bedeutet das?

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    16.02.2014
    Beiträge
    80
    Ich glaube Du hast lediglich die geschweiften Klammern um den Befehlsblock von translateIR vergessen. Die öffnende wird vor switch erwartet, daher die irreführende Fehlermeldung...

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    04.05.2015
    Beiträge
    41
    Genau. Das hat gefehlt. Danke.

    Leider macht der Sketch nicht das, was er machen soll. Wenn ich auf der IR-Fernbedienung Taste 1 (entspricht dem DEC-Wert 16724175) drücke soll die Alarmfunktion aktiviert werden + Tempmesser. Wenn Taste 3 (Wert 16743045) gedrückt wird, soll nur noch die Temp-Messung funktionieren. Habe ich in dem Sketch ein Gedankenfehler?

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Vielleicht wird ein andere IR-Code empfangen. Was soll er damit tun? Oder wird überhaupt etwas empfangen? Die empfangene Code erst zu dein PC senden wurde ich sagen (oder auf das LCD abbilden), damit du das auch mit vernimmst. Jedenfalls beim testen.

    - - - Aktualisiert - - -

    Und die Gedankenfehler ist nicht erzählen WAS er macht. Statt was er nicht macht.
    Geändert von Valen (03.08.2015 um 18:49 Uhr)

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    04.05.2015
    Beiträge
    41
    Hallo Valen,

    ich habe den übermittelten Code über den seriellen Monitor ausgegeben. Der ist korrekt. Der Sketch wurde von mir auch jetzt etwas umgebaut:

    Code:
    #include <LiquidCrystal.h>
    #include <IRremote.h>
    int receiverpin = 3;
    IRrecv irrecv(receiverpin);
    decode_results results;
    
    LiquidCrystal lcd(4,5,6,7,8,9);
    float sensor = 0;
    float celsius = 0;
    float voltage = 0;
    int bewegung=13;
    int bewegungsstatus=0;
    int ledg=11;
    int ledr=12;
    
    
    void setup() {
      
      lcd.begin(16,2);
      lcd.clear();
      pinMode(bewegung, INPUT);
      pinMode(ledg, OUTPUT);
      pinMode(ledr, OUTPUT);
      irrecv.enableIRIn();
      Serial.begin(9600);
    
    }
    
    void translateIR()
    {
    switch(results.value)
    
    {
      case 16724175:
      
        
        if(bewegungsstatus==HIGH)
    {
                lcd.setCursor(0,0);
                lcd.print("Eindringling");
                lcd.setCursor(0,1);
                lcd.print("Erkannt");
                digitalWrite(ledr, HIGH);
                digitalWrite(ledg, LOW);
                delay(10000);
                lcd.clear();
                Serial.println("1");
     
    
    }
    else
    
    {
                lcd.setCursor(0,0);
                lcd.print("Temperatur:");
                lcd.setCursor(0,1);
                lcd.print(celsius,0);
                lcd.setCursor(3,1);
                lcd.print("Grad");
                digitalWrite(ledr, LOW);
                digitalWrite(ledg, HIGH);
                Serial.println("2");
     
    }
    
    break;
    
    case 16743045:
    
                    lcd.setCursor(0,0);
                    lcd.print("Temperatur:");
                    lcd.setCursor(0,1);
                    lcd.print(celsius,0);
                    lcd.setCursor(3,1);
                    lcd.print("Grad");
                    digitalWrite(ledr, LOW);
                    digitalWrite(ledg, HIGH);
                    Serial.println("3");
    break;
    }
    }
    void loop()
    {
                bewegungsstatus=digitalRead(bewegung);
                sensor = analogRead(0);
                voltage = (sensor*5000)/1024;
                voltage = voltage - 500;
                celsius = voltage/10;
                
                
      if (irrecv.decode(&results))
      {
      translateIR();
    
      {
      irrecv.resume();
      }
    }
    }
    Wenn ich die "erste taste" drücke, geht Arduino in den ersten case und gibt mir eine "2" aus, drücke ich die andere Taste, gibt er mir eine "3" aus. Somit geht er also in den Switch und auch korrekt.

    ABER, er beachtet nicht meine If-Bedingung im ersten Case. Da soll überprüft werden, ob der Bewegungssensor einen Input an Pin 13 liefert, wenn ja dann Alarm. Wenn kein Input erfolgt, soll er in den Else-Teil des ersten Cases gehen.

    Sprich, zu 2/3 funktioniert der Sketch, aber warum bearbeitet er nicht die Bedingung?
    Geändert von wendtdir (04.08.2015 um 05:31 Uhr)

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Zitat Zitat von wendtdir Beitrag anzeigen
    ...
    ABER, er beachtet nicht meine If-Bedingung im ersten Case. Da soll überprüft werden, ob der Bewegungssensor einen Input an Pin 13 liefert, wenn ja dann Alarm. Wenn kein Input erfolgt, soll er in den Else-Teil des ersten Cases gehen.

    Sprich, zu 2/3 funktioniert der Sketch, aber warum bearbeitet er nicht die Bedingung?
    Ich nehme an das an deine Arduino pin 13 auch ein LED angeschlossen ist? Eine weitere LEd von dir, oder die bekannte Blink-led? Oder beide vielleicht? Leuchtet sie? Kann den bewegungssensor diese LED zum leuchten bringen? Welcher sensor ist das? Ist es stark genug so einer last zu treiben?

Ä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
  •  

LiFePO4 Speicher Test