LED blinken lassen und gleichzeitig eine weitere LED einschalten

vor 2 years 8 weeks von Aser

Hallo bin noch sehr unerfahren mit der Programmierung vom Arduino.

Ich möchte ein modell Auto bauen welches Blinkt, Bremslicht und Standlicht simuliert.

Allerdings hört das blinken auf sobald ich das bremslicht betätige.
Ich weiß das ich wahrscheinlich millis () nutzen muss aber nicht genau wie ich das in mein Programm einfügen soll.

Der Code sieht wie folgt aus:

char value;
int ledpin = 13; // Bremslicht
const int ledpin2 = 12; // Blinker
int ledState = LOW;
//long previousMillis = 0;
//long interval = 1000;

void setup()
{
pinMode(ledpin, OUTPUT);
pinMode(ledpin2, OUTPUT);
Serial.begin(115200);
}

void loop() {

if( Serial.available())
{;}

value = Serial.read();

if( value == '0' )
{
digitalWrite(ledpin, LOW);
Serial.println("LED off");
}

if( value == '1' )
{
digitalWrite(ledpin, HIGH);
Serial.println("LED on");
}

if( value == '2' )
{
digitalWrite(ledpin2, LOW);
}
while( value > '2' )
{
digitalWrite(ledpin2, HIGH);
delay(1000);
digitalWrite(ledpin2, LOW);
delay(1000);
break;
}
}

Ähnliche Posts

19 Antworten auf “LED blinken lassen und gleichzeitig eine weitere LED einschalten”


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
  1. Spot sagt:

    Hallo

    Nachdem du schon von dir sagt das du sehr unerfahren bist mache ich mir jetzt mal die Arbeit und schreib dir den Spaß! Ich habe das ganze nicht ausprobiert es ist also leicht möglich das sich der eine oder andere Fehler eingeschlichen hat!

    unsigned char value;          // Ich hab dir deine Variablen so benannt das man auf einen
                                  // Blick weiß um was es geht
    unsigned char ucBremse = 13;  // Bremslicht
    unsigned char ucBlinker = 12; // Blinker
    unsigned char ucBlinkerStatus = false; // die Variable gibt an ob geblinkt werden soll
    unsigned char ucBlinkerLED = LOW;   // zeigt an ab die LED ein oder aus ist
     
    long previousMillis = 0;
    unsigned int interval = 1000; 
     
    void setup()
    {
     pinMode(ucBremse, OUTPUT);
     digitalWrite(ucBremse, LOW);                                     //nur zur Sicherheit
     pinMode(ucBlinker, OUTPUT);
     digitalWrite(ucBlinker, LOW);                                    //nur zur Sicherheit
     Serial.begin(115200);
    }
     
    void loop() 
    {
     if( Serial.available())           //das hattest du zwar vorher auch drinnen nur durch das {;}
         value = Serial.read();        //hast du die Sicherheitsmaßnahme ausgehebelt
     
     if( value == '0' )
     {
         digitalWrite(ucBremse, LOW);
         Serial.println("Bremslicht aus");
     }
     
     if( value == '1' )
     {
         digitalWrite(ucBremse, HIGH);
         Serial.println("Bremslicht ein");
     }
     
     if( value == '2' )
     {
         ucBlinkerStatus = false;                // Blinker aus
         digitalWrite(ucBlinker, LOW);           // LED aus
         ucBlinkerLED = LOW;                     // und merken das die LED aus ist
         Serial.println("Blinker aus");
     }
     
     if( value == '3' )
     {
         Serial.println("Blinker ein");
         ucBlinkerStatus = true;                //Blinker ein
         /*Diese drei Zeilen müssten nicht sein die sind nur dafür das es schöner aussieht
           Sie haben nur einen Effekt wenn du innerhalb der Intervallzeit aus und wieder    
           einschaltest, dann würde sonst der erste Blink nicht gleich erscheinen*/
         previousMillis  = millis();            //wir speichern uns die Anfangszeit
         digitalWrite(ucBlinker, HIGH);         //und schalten den Blinker gleich mal ein
         ucBlinkerLED = HIGH;                   //und merken uns auch das sie jetzt ein ist
     
     }
     
     if( value > '3' )
     {
         Serial.println("undefined");           //falls ein Wert ankommt der nicht definiert ist
     }
     
     if(ucBlinkerStatus)     //nur wenn geblinkt werden soll
     {
    /* wir überprüft ob die aktuelle Zeit größer ist als die Zeit zu der das letzte mal
       umgeschalten wurde + die Intervallzeit*/
         if(millis() >= (previousMillis + interval))   
         {
             if(ucBlinkerLED = LOW)         // jetzt schauen wir nach ob die LED gerade aus ist
             {
                 digitalWrite(ucBlinker, HIGH);  // wenn ja einschalten
                 ucBlinkerLED = HIGH;            // und auch merken das sie jetzt ein ist
             }
             else  
             {
                 digitalWrite(ucBlinker, LOW);   // wenn nein LED ausschalten
                 ucBlinkerLED = LOW;             // und wieder merken
             }
             // und zum Schluss noch die Zeit für den nächsten Durchlauf speichern
             previousMillis = millis();          
         }
     }
    }

    Das ganze funktioniert aber nur solange du es nicht länger als 50 Tage laufen lässt, ich habe den Überlauf von den millis nicht abgefangen! ;-)
    Ich hab dir den ganze Code auch noch auf "lesbar" formatiert und die neuen Zeilen habe ich kommentiert das du auch verstehst was ich da mache.

    Hoffentlich funktioniert das auf Anhieb!
    Spot

    Login or register to post comments

  1. Aser sagt:

    Vielen Dank für deine Hilfe =)

    aber mit deinem Code Blinkt es nicht, die LED ist nur an lässt sich aber abschalten.

    Ich hatte es auch schon mal in dieser Art:
    if(millis() >= (previousMillis + interval));
    versucht aber entweder es blinkt nicht oder ich kann es nicht abschalten.

    Würde das blinken auch gerne mit delay() machen um die Blinkfrequenz zu ändern.

    Kann ich den ganzen if-Abfragen vielleicht in eine einzige if-Abfrage packen oder würde das nicht gehn?

    Login or register to post comments

  1. Spot sagt:

    Hallo

    Dann probiere mal das

    unsigned char value;          // Ich hab dir deine Variablen so benannt das man auf einen
                                  // Blick weiß um was es geht
    unsigned char ucBremse = 13;  // Bremslicht
    unsigned char ucBlinker = 12; // Blinker
    unsigned char ucBlinkerStatus = false; // die Variable gibt an ob geblinkt werden soll
    unsigned char ucBlinkerLED = LOW;   // zeigt an ab die LED ein oder aus ist
     
    long previousMillis = 0;
    unsigned int interval = 1000; 
     
    void setup()
    {
     pinMode(ucBremse, OUTPUT);
     digitalWrite(ucBremse, LOW);                                     //nur zur Sicherheit
     pinMode(ucBlinker, OUTPUT);
     digitalWrite(ucBlinker, LOW);                                    //nur zur Sicherheit
     Serial.begin(115200);
    }
     
    void loop() 
    {
     if( Serial.available())           //das hattest du zwar vorher auch drinnen nur durch das {;}
         value = Serial.read();        //hast du die Sicherheitsmaßnahme ausgehebelt
     
     if( value == '0' )
     {
         digitalWrite(ucBremse, LOW);
         Serial.println("Bremslicht aus");
     }
     
     if( value == '1' )
     {
         digitalWrite(ucBremse, HIGH);
         Serial.println("Bremslicht ein");
     }
     
     if( value == '2' )
     {
         ucBlinkerStatus = 0;                    // Blinker aus
         digitalWrite(ucBlinker, LOW);           // LED aus
         ucBlinkerLED = LOW;                     // und merken das die LED aus ist
         Serial.println("Blinker aus");
     }
     
     if( value == '3' )
     {
         Serial.println("Blinker ein");
         ucBlinkerStatus = 1;                //Blinker ein
         /*Diese drei Zeilen müssten nicht sein die sind nur dafür das es schöner aussieht
           Sie haben nur einen Effekt wenn du innerhalb der Intervallzeit aus und wieder    
           einschaltest, dann würde sonst der erste Blink nicht gleich erscheinen*/
         previousMillis  = millis();            //wir speichern uns die Anfangszeit
         digitalWrite(ucBlinker, HIGH);         //und schalten den Blinker gleich mal ein
         ucBlinkerLED = HIGH;                   //und merken uns auch das sie jetzt ein ist
     
     }
     
     if( value > '3' )
     {
         Serial.println("undefined");           //falls ein Wert ankommt der nicht definiert ist
     }
     
     if(ucBlinkerStatus)     //nur wenn geblinkt werden soll
     {
      Serial.println("debug blinker");
    /* wir überprüft ob die aktuelle Zeit größer ist als die Zeit zu der das letzte mal
       umgeschalten wurde + die Intervallzeit*/
         if(millis() >= (previousMillis + interval))   
         {
             Serial.println("debug millis");
             if(ucBlinkerLED = LOW)         // jetzt schauen wir nach ob die LED gerade aus ist
             {
                 digitalWrite(ucBlinker, HIGH);  // wenn ja einschalten
                 ucBlinkerLED = HIGH;            // und auch merken das sie jetzt ein ist
             }
             else  
             {
                 digitalWrite(ucBlinker, LOW);   // wenn nein LED ausschalten
                 ucBlinkerLED = LOW;             // und wieder merken
             }
             // und zum Schluss noch die Zeit für den nächsten Durchlauf speichern
             previousMillis = millis();          
         }
     }
    }

    Ich hab jetzt nur das true und false ersetzt und ich hab dir noch zwei debug Labels eingefügt.
    So wissen wir dann wie weit wir kommen wenn es wieder nicht funktioniert.

    Bei den ganzen if( value == '3' ) würde sich ein switch() anbieten.
    Siehe http://arduino.cc/en/Reference/SwitchCase

    Das if(ucBlinkerStatus) kann man mit if(millis() >= (previousMillis + interval)) zu
    if(ucBlinkerStatus && (millis() >= (previousMillis + interval))) kobinieren.
    Das if(ucBlinkerLED = LOW) würde ich nicht mit rein nehmen da du dann kein else nehmen kannst sondern das ganze über ein else if machen müsstest. Der Spaß wird dann aber schon wieder eher unleserlich.

    Spot

    Login or register to post comments

  1. Aser sagt:

    Muss dir leider sagen das es so auch nicht ging nach wie vor das gleiche,

    Blinker lässt sich ein und aus schalten aber blinkt nicht.

    Scheint komplizierter zu sein als ich dachte :(

    Login or register to post comments

  1. Spot sagt:

    Welche Meldungen erhältst du denn?
    Nur "Blinker ein" oder kommt dann auch noch "debug blinker" und "debug millis"?

    Spot

    Login or register to post comments

  1. Aser sagt:

    Also wenn ich den Blinker an machen steht dort "Blinker ein" und "debug Blinker".

    Login or register to post comments

  1. Spot sagt:

    Ersetze mal diese bieden Zeilen:

    long previousMillis = 0;
    unsigned int interval = 1000;

    durch diese:

    unsigned long previousMillis = 0;
    unsigned long interval = 1000;

    Spot

    Login or register to post comments

  1. Aser sagt:

    Geht immer noch nicht nach wie vor das selbe problem =(

    Login or register to post comments

  1. Spot sagt:

    Ich glaub jetzt hab ichs!
    Nachdem ich den value nicht rückgesetzt habe war es bei jedem Durchlauf so als ob du Gerade die Taste gedrückt hättest.

    Nächster Versuch!

    unsigned char value;          // Ich hab dir deine Variablen so benannt das man auf einen
                                  // Blick weiß um was es geht
    unsigned char ucBremse = 13;  // Bremslicht
    unsigned char ucBlinker = 12; // Blinker
    unsigned char ucBlinkerStatus = false; // die Variable gibt an ob geblinkt werden soll
    unsigned char ucBlinkerLED = LOW;   // zeigt an ab die LED ein oder aus ist
     
    unsigned long previousMillis = 0;
    unsigned long interval = 1000; 
     
    void setup()
    {
     pinMode(ucBremse, OUTPUT);
     digitalWrite(ucBremse, LOW);                                     //nur zur Sicherheit
     pinMode(ucBlinker, OUTPUT);
     digitalWrite(ucBlinker, LOW);                                    //nur zur Sicherheit
     Serial.begin(115200);
    }
     
    void loop() 
    {
     if( Serial.available())           //das hattest du zwar vorher auch drinnen nur durch das {;}
         value = Serial.read();        //hast du die Sicherheitsmaßnahme ausgehebelt
     
     if( value == '1' )
     {
         digitalWrite(ucBremse, LOW);
         Serial.println("Bremslicht aus");
         value = '0'; 
     }
     
     if( value == '2' )
     {
         digitalWrite(ucBremse, HIGH);
         Serial.println("Bremslicht ein");
         value = '0'; 
     }
     
     if( value == '3' )
     {
         ucBlinkerStatus = 0;                    // Blinker aus
         digitalWrite(ucBlinker, LOW);           // LED aus
         ucBlinkerLED = LOW;                     // und merken das die LED aus ist
         Serial.println("Blinker aus");
         value = '0'; 
     }
     
     if( value == '4' )
     {
         Serial.println("Blinker ein");
         ucBlinkerStatus = 1;                //Blinker ein
         /*Diese drei Zeilen müssten nicht sein die sind nur dafür das es schöner aussieht
           Sie haben nur einen Effekt wenn du innerhalb der Intervallzeit aus und wieder    
           einschaltest, dann würde sonst der erste Blink nicht gleich erscheinen*/
         previousMillis  = millis();            //wir speichern uns die Anfangszeit
         digitalWrite(ucBlinker, HIGH);         //und schalten den Blinker gleich mal ein
         ucBlinkerLED = HIGH;                   //und merken uns auch das sie jetzt ein ist
         value = '0'; 
     }
     
     if( value > '4' )
     {
         Serial.println("undefined");           //falls ein Wert ankommt der nicht definiert ist
     }
     
     if(ucBlinkerStatus)     //nur wenn geblinkt werden soll
     {
      Serial.println("debug blinker");
    /* wir überprüft ob die aktuelle Zeit größer ist als die Zeit zu der das letzte mal
       umgeschalten wurde + die Intervallzeit*/
         if(millis() >= (previousMillis + interval))   
         {
             Serial.println("debug millis");
             if(ucBlinkerLED = LOW)         // jetzt schauen wir nach ob die LED gerade aus ist
             {
                 digitalWrite(ucBlinker, HIGH);  // wenn ja einschalten
                 ucBlinkerLED = HIGH;            // und auch merken das sie jetzt ein ist
             }
             else  
             {
                 digitalWrite(ucBlinker, LOW);   // wenn nein LED ausschalten
                 ucBlinkerLED = LOW;             // und wieder merken
             }
             // und zum Schluss noch die Zeit für den nächsten Durchlauf speichern
             previousMillis = millis();          
         }
     }
    }

    Die WErte die du schicken musst sind jetzt um 1 größer geworden da ich die 0 jetzt als Leerlaufwert verwende.

    Spot

    Login or register to post comments

  1. Aser sagt:

    Ne leider wieder nicht, ist ja zum verrückt werden.

    Es kommt einmal die Meldung "Blinker ein" und dann solange "debug Blinker" bis ich ihn ausschalte.

    Login or register to post comments

  1. Spot sagt:

    Ok

    Dann heissts hald noch ein bisschen debugen!

    unsigned char value;          // Ich hab dir deine Variablen so benannt das man auf einen
                                  // Blick weiß um was es geht
    unsigned char ucBremse = 13;  // Bremslicht
    unsigned char ucBlinker = 12; // Blinker
    unsigned char ucBlinkerStatus = false; // die Variable gibt an ob geblinkt werden soll
    unsigned char ucBlinkerLED = LOW;   // zeigt an ab die LED ein oder aus ist
     
    unsigned long previousMillis = 0;
    unsigned long interval = 1000;
    unsigned long ultest;
     
    void setup()
    {
     pinMode(ucBremse, OUTPUT);
     digitalWrite(ucBremse, LOW);                                     //nur zur Sicherheit
     pinMode(ucBlinker, OUTPUT);
     digitalWrite(ucBlinker, LOW);                                    //nur zur Sicherheit
     Serial.begin(115200);
    }
     
    void loop() 
    {
     if( Serial.available())           //das hattest du zwar vorher auch drinnen nur durch das {;}
         value = Serial.read();        //hast du die Sicherheitsmaßnahme ausgehebelt
     
     if( value == '1' )
     {
         digitalWrite(ucBremse, LOW);
         Serial.println("Bremslicht aus");
         value = '0'; 
     }
     
     if( value == '2' )
     {
         digitalWrite(ucBremse, HIGH);
         Serial.println("Bremslicht ein");
         value = '0'; 
     }
     
     if( value == '3' )
     {
         ucBlinkerStatus = 0;                    // Blinker aus
         digitalWrite(ucBlinker, LOW);           // LED aus
         ucBlinkerLED = LOW;                     // und merken das die LED aus ist
         Serial.println("Blinker aus");
         value = '0'; 
     }
     
     if( value == '4' )
     {
         Serial.println("Blinker ein");
         ucBlinkerStatus = 1;                //Blinker ein
         /*Diese drei Zeilen müssten nicht sein die sind nur dafür das es schöner aussieht
           Sie haben nur einen Effekt wenn du innerhalb der Intervallzeit aus und wieder    
           einschaltest, dann würde sonst der erste Blink nicht gleich erscheinen*/
         previousMillis  = millis();            //wir speichern uns die Anfangszeit
         Serial.println(previousMillis);        // debug
         digitalWrite(ucBlinker, HIGH);         //und schalten den Blinker gleich mal ein
         ucBlinkerLED = HIGH;                   //und merken uns auch das sie jetzt ein ist
         value = '0'; 
     }
     
     if( value > '4' )
     {
         Serial.println("undefined");           //falls ein Wert ankommt der nicht definiert ist
     }
     
     if(ucBlinkerStatus)     //nur wenn geblinkt werden soll
     {
      Serial.println("debug blinker");
    /* wir überprüft ob die aktuelle Zeit größer ist als die Zeit zu der das letzte mal
       umgeschalten wurde + die Intervallzeit*/
         ultest = millis()
         Serial.println(ultest);        // debug
         if(ultest >= (previousMillis + interval))   
         {
             Serial.println("debug millis");
             if(ucBlinkerLED = LOW)         // jetzt schauen wir nach ob die LED gerade aus ist
             {
                 digitalWrite(ucBlinker, HIGH);  // wenn ja einschalten
                 ucBlinkerLED = HIGH;            // und auch merken das sie jetzt ein ist
             }
             else  
             {
                 digitalWrite(ucBlinker, LOW);   // wenn nein LED ausschalten
                 ucBlinkerLED = LOW;             // und wieder merken
             }
             // und zum Schluss noch die Zeit für den nächsten Durchlauf speichern
             previousMillis = millis();          
         }
     }
    }

    Es sind jetzt nur ein paar reine Debugzeilen dazugekommen. Nachdem er dir "Blinker ein" schickt bekommst du auch noch die Startzeit gesendet und nach jedem "debug blinker" die aktuelle Zeit mit der er vergleicht.
    Mich interessiert jetzt vor allem die ob die aktuelle Zeit irgendwann um 1000 größer wird als die Startzeit. Lass dich nicht verwirren, die "Zeiten" sind nur irgendwelche großen Zahlen!

    Spot

    Login or register to post comments

  1. Aser sagt:

    Ok bin mir nicht ganz sicher ob ich das verstehe mit aktuelle Zeit irgendwann größer als 1000.

    Wenn ich auf 4 drücke leuchtet die LED kurz auf und bleibt dann aus die debug meldung erhöht sich ca um 3-5 ( sollte es da um 1000 größer sein? ).

    Blinker ein
    344498
    debug blinker
    344500
    debug blinker
    344504
    debug blinker
    344506
    debug blinker
    344510
    ..........
    debug blinker
    382308
    debug blinker
    382312
    debug blinker
    382314
    debug blinker
    382316
    Blinker aus // habe dann auf 3, also Blinker aus gedrückt.

    hoffe das hilft uns weiter.

    Und danke für deine Hilfe Spot.

    Login or register to post comments

  1. Spot sagt:

    Hallo

    Ich war immer der Meinung das die LED immer leuchtet, wenn die aber eh ausgeht dann steckt der Fehler wahrscheinlich wo anderes. Die Frage ist nur wo?
    Hast du die Liste die vorher gepostet hast auch noch vollständig?
    Wenn ja steht irgendwo relativ am Anfang ein "debug millis"? Wenn ja kommt es dann ca. nach 1000ms wieder(z.b. das erste bei 345000 das nächste bei 346000)?

    Viel Spaß beim suchen! ;-) Du kannst die Liste auch einfach in den Editor kopieren und dann da du Suchfunktion benutzen.

    Spot

    Login or register to post comments

  1. Aser sagt:

    Bin jetzt leider nicht zu hause aber die LED war auch immer an nur jetzt beim letzten Code von dir, leuchtet Sie nur kurz auf und dann ist sie aus. Also hast du es schon richtig verstanden ;-)

    Login or register to post comments

  1. Aser sagt:

    Hab den Code jetzt nochmal angeschaut und tatsächlich kommt alle 1000 ein debug millis.

    Blinker ein
    2041
    debug blinker
    2043

    3041
    debug millis
    debug blinker
    3045

    4046
    debug millis
    debug blinker
    4048

    5048
    debug millis
    debug blinker
    5052

    Also startet der Intaval alle 1000 wieder neu oder?

    Login or register to post comments

  1. Spot sagt:

    Hallo

    Das ist ja schon mal sehr gut, jetzt sind wir wieder ein Schritt weiter. Wir wissen jetzt das er Ordnungsgemäß alle 1000ms in den Abschnitt springt in dem er die LED entweder ein oder aus schalten soll.
    Die Frage ist jetzt nur noch warum macht er das nicht.

    .....

    Oh mein Gott! Jetzt hab ich den absoluten Anfängerfehler gemacht hab schon mindestens 10 mal darüber gelesen und es ist mir nicht aufgefallen! Das tut so weh das ich mir fast nicht schreiben traue an was es liegt. ;-)

    Nö man muss zu seinen Fehlern stehen!

    Ersetzte if(ucBlinkerLED = LOW) mit if(ucBlinkerLED == LOW).

    Ich hoffe das es das jetzt war.

    mfg
    Spot

    PS: Ich hab den Fehler jetzt wirklich während dem tippen gefunden und hab dann meinen ersten Absatz einfach stehen lassen.

    Login or register to post comments

  1. Aser sagt:

    Du bist mein Held es geht jetzt =) werde jetzt noch das standlicht implementieren aber das sollte kein problem darstellen.

    Danke vielmals für deine Hilfe Spot.

    Login or register to post comments

  1. Aser sagt:

    Hi,

    ich habe meinen Led-Blink Code nun seit Wochen erweitert und stehe wieder vor einem Problem
    das ich nicht lösen kann :-(

    Mein Arduino erhält nun die Anforderung zum Led an/aus machen über bluetooth von meinem Handy.

    Jede Led wird über eine void Methode angesteuert, das kann ich aber bei den BlinkerStatus nicht machen.

    PS: die Fehlermeldung habe ich mit ****** markiert.
    Und wie füge ich den Code besser hier in meine Nachricht ein???

    Vieleicht kann mir ja jemand helfen

    unsigned char value; // Ich hab dir deine Variablen so benannt das man auf einen
    #include
    MeetAndroid meetAndroid;
    // Blick weiß um was es geht
    unsigned char standLed = 9; // Standlicht
    unsigned char bremseLed = 10; // Bremslicht
    unsigned char linksLed = 11; // Blinker Links
    unsigned char rechtsLed = 8; // Blinker Rechts
    unsigned char ucBlinkerStatus1 = false; // die Variable gibt an ob geblinkt werden soll
    unsigned char ucBlinkerStatus2 = false; // die Variable gibt an ob geblinkt werden soll
    unsigned char ucBlinkerLED1 = LOW; // zeigt an ab die LED ein oder aus ist
    unsigned char ucBlinkerLED2 = LOW; // zeigt an ab die LED ein oder aus ist

    unsigned long previousMillis1 = 0;
    unsigned long previousMillis2 = 0;
    unsigned long interval1 = 700;
    unsigned long interval2 = 700;
    unsigned long ultest1;
    unsigned long ultest2;

    void setup()
    {
    // use the baud rate your bluetooth module is configured to
    // not all baud rates are working well, i.e. ATMEGA168 works best with 57600
    Serial.begin(57600);

    // register callback functions, which will be called when an associated event occurs.
    meetAndroid.registerFunction(stand, 's');
    meetAndroid.registerFunction(bremse, 'b');
    meetAndroid.registerFunction(links, 'l');
    meetAndroid.registerFunction(rechts, 'r');

    // set all color leds as output pins
    pinMode(standLed, OUTPUT);
    pinMode(bremseLed, OUTPUT);
    pinMode(linksLed, OUTPUT);
    pinMode(rechtsLed, OUTPUT);

    // just set all leds to high so that we see they are working well
    digitalWrite(standLed, HIGH);
    digitalWrite(bremseLed, HIGH);
    digitalWrite(linksLed, HIGH);
    digitalWrite(rechtsLed, HIGH);
    }

    void loop()

    {
    meetAndroid.receive(); // you need to keep this in your loop() to receive events
    }

    void stand(byte flag, byte numOfValues)
    {
    analogWrite(standLed, meetAndroid.getInt());
    }

    /*
    * Whenever the multicolor lamp app changes the green value
    * this function will be called
    */
    void bremse(byte flag, byte numOfValues)
    {
    analogWrite(bremseLed, meetAndroid.getInt());
    }

    void rechts(byte flag, byte numOfValues)
    {
    int rechtsLed2 = meetAndroid.getInt();
    if( rechtsLed2 == 0 )
    {
    ucBlinkerStatus1 = 0; // Blinker aus
    digitalWrite(rechtsLed, LOW); // LED aus
    ucBlinkerLED1 = LOW; // und merken das die LED aus ist
    Serial.println("Blinker Rechts aus");
    value = '0';
    }

    if( rechtsLed2 == 255 )
    {
    Serial.println("Blinker Rechts ein");
    ucBlinkerStatus1 = 1; //Blinker ein
    /*Diese drei Zeilen müssten nicht sein die sind nur dafür das es schöner aussieht
    Sie haben nur einen Effekt wenn du innerhalb der Intervallzeit aus und wieder
    einschaltest, dann würde sonst der erste Blink nicht gleich erscheinen*/
    previousMillis1 = millis(); //wir speichern uns die Anfangszeit
    Serial.println(previousMillis1); // debug
    digitalWrite(rechtsLed, HIGH); //und schalten den Blinker gleich mal ein
    ucBlinkerLED1 = HIGH; //und merken uns auch das sie jetzt ein ist
    value = '0';
    }
    }

    void links(byte flag, byte numOfValues)
    {
    int linksLed2 = meetAndroid.getInt();
    if( linksLed2 == 0 )
    {
    ucBlinkerStatus2 = 0; // Blinker aus
    digitalWrite(linksLed, LOW); // LED aus
    ucBlinkerLED2 = LOW; // und merken das die LED aus ist
    Serial.println("Blinker Links aus");
    value = '0';
    }

    if( linksLed2 == 255 )
    {
    Serial.println("Blinker Links ein");
    ucBlinkerStatus2 = 1; //Blinker ein
    /*Diese drei Zeilen müssten nicht sein die sind nur dafür das es schöner aussieht
    Sie haben nur einen Effekt wenn du innerhalb der Intervallzeit aus und wieder
    einschaltest, dann würde sonst der erste Blink nicht gleich erscheinen*/
    previousMillis2 = millis(); //wir speichern uns die Anfangszeit
    Serial.println(previousMillis2); // debug
    digitalWrite(linksLed, HIGH); //und schalten den Blinker gleich mal ein
    ucBlinkerLED2 = HIGH; //und merken uns auch das sie jetzt ein ist
    value = '0';
    }
    }

    // *********** hier kommt die Fehlermeldung : error: expected unqualified-id before 'if' *******************
    if(ucBlinkerStatus1) //nur wenn geblinkt werden soll
    {
    Serial.println("debug blinker");
    /* wir überprüft ob die aktuelle Zeit größer ist als die Zeit zu der das letzte mal
    umgeschalten wurde + die Intervallzeit*/
    ultest1 = millis();
    Serial.println(ultest1); // debug
    if(ultest1 >= (previousMillis1 + interval1))
    {
    Serial.println("debug millis");
    if(ucBlinkerLED1 == LOW) // jetzt schauen wir nach ob die LED gerade aus ist
    {
    digitalWrite(rechtsLed, HIGH); // wenn ja einschalten
    ucBlinkerLED1 = HIGH; // und auch merken das sie jetzt ein ist
    }
    else
    {
    digitalWrite(rechtsLed, LOW); // wenn nein LED ausschalten
    ucBlinkerLED1 = LOW; // und wieder merken
    }
    // und zum Schluss noch die Zeit für den nächsten Durchlauf speichern
    previousMillis1 = millis();
    }
    }

    // *********** hier kommt die Fehlermeldung wahrscheinlich dann auch : error: expected unqualified-id before 'if' *******************
    if(ucBlinkerStatus2) //nur wenn geblinkt werden soll
    {
    Serial.println("debug blinker");
    /* wir überprüft ob die aktuelle Zeit größer ist als die Zeit zu der das letzte mal
    umgeschalten wurde + die Intervallzeit*/
    ultest2 = millis();
    Serial.println(ultest2); // debug
    if(ultest2 >= (previousMillis2 + interval2))
    {
    Serial.println("debug millis");
    if(ucBlinkerLED2 == LOW) // jetzt schauen wir nach ob die LED gerade aus ist
    {
    digitalWrite(linksLed, HIGH); // wenn ja einschalten
    ucBlinkerLED2 = HIGH; // und auch merken das sie jetzt ein ist
    }
    else
    {
    digitalWrite(linksLed, LOW); // wenn nein LED ausschalten
    ucBlinkerLED2 = LOW; // und wieder merken
    }
    // und zum Schluss noch die Zeit für den nächsten Durchlauf speichern
    previousMillis2 = millis();
    }
    }
    }

    Login or register to post comments

  1. Manfred sagt:

    Zuerst:
    Wenn Du Sourcecode mitlieferst solltest Du ihn in die Tags [ code] und [ /code] einschließen, dann ist er besser lesbar. Die Leerzeichen nach [ natürlich weglassen. Die habe ich nur eingefügt, damit die Tags angezeigt werden.

    Der Code nach Deiner ersten Fehlermeldung steht da einfach so rum und befindet sich nicht innerhalb einer Funktion. Das geht so natürlich nicht.

    Versuch mal ob es so geht:

    #include <MeetAndroid.h>
     
    MeetAndroid meetAndroid;
    unsigned char value; // Ich hab dir deine Variablen so benannt das man auf einen
                         // Blick weiß um was es geht
    unsigned char standLed = 9; // Standlicht
    unsigned char bremseLed = 10; // Bremslicht
    unsigned char linksLed = 11; // Blinker Links
    unsigned char rechtsLed = 8; // Blinker Rechts
    unsigned char ucBlinkerStatus1 = false; // die Variable gibt an ob geblinkt werden soll
    unsigned char ucBlinkerStatus2 = false; // die Variable gibt an ob geblinkt werden soll
    unsigned char ucBlinkerLED1 = LOW; // zeigt an ab die LED ein oder aus ist
    unsigned char ucBlinkerLED2 = LOW; // zeigt an ab die LED ein oder aus ist
     
    unsigned long previousMillis1 = 0;
    unsigned long previousMillis2 = 0;
    unsigned long interval1 = 700;
    unsigned long interval2 = 700;
    unsigned long ultest1;
    unsigned long ultest2;
     
    void setup()
    {
      // use the baud rate your bluetooth module is configured to
      // not all baud rates are working well, i.e. ATMEGA168 works best with 57600
      Serial.begin(57600); 
     
      // register callback functions, which will be called when an associated event occurs.
      meetAndroid.registerFunction(stand, 's');
      meetAndroid.registerFunction(bremse, 'b');
      meetAndroid.registerFunction(links, 'l');
      meetAndroid.registerFunction(rechts, 'r');
     
      // set all color leds as output pins
      pinMode(standLed, OUTPUT);
      pinMode(bremseLed, OUTPUT);
      pinMode(linksLed, OUTPUT);
      pinMode(rechtsLed, OUTPUT);
     
      // just set all leds to high so that we see they are working well
      digitalWrite(standLed, HIGH);
      digitalWrite(bremseLed, HIGH);
      digitalWrite(linksLed, HIGH);
      digitalWrite(rechtsLed, HIGH);
    }
     
    void loop() 
    {
      meetAndroid.receive(); // you need to keep this in your loop() to receive events
     
      if(ucBlinkerStatus1) //nur wenn geblinkt werden soll
      {
        Serial.println("debug blinker");
        /* wir überprüft ob die aktuelle Zeit größer ist als die Zeit zu der das letzte mal
        umgeschalten wurde + die Intervallzeit*/
        ultest1 = millis();
        Serial.println(ultest1); // debug
        if(ultest1 >= (previousMillis1 + interval1))
        {
          Serial.println("debug millis");
          if(ucBlinkerLED1 == LOW) // jetzt schauen wir nach ob die LED gerade aus ist
          {
            digitalWrite(rechtsLed, HIGH); // wenn ja einschalten
            ucBlinkerLED1 = HIGH; // und auch merken das sie jetzt ein ist
          }
          else
          {
            digitalWrite(rechtsLed, LOW); // wenn nein LED ausschalten
            ucBlinkerLED1 = LOW; // und wieder merken
          }
          // und zum Schluss noch die Zeit für den nächsten Durchlauf speichern
          previousMillis1 = millis();
        }
      }
     
      if(ucBlinkerStatus2) //nur wenn geblinkt werden soll
      {
        Serial.println("debug blinker");
        /* wir überprüft ob die aktuelle Zeit größer ist als die Zeit zu der das letzte mal
        umgeschalten wurde + die Intervallzeit*/
        ultest2 = millis();
        Serial.println(ultest2); // debug
        if(ultest2 >= (previousMillis2 + interval2))
        {
          Serial.println("debug millis");
          if(ucBlinkerLED2 == LOW) // jetzt schauen wir nach ob die LED gerade aus ist
          {
            digitalWrite(linksLed, HIGH); // wenn ja einschalten
            ucBlinkerLED2 = HIGH; // und auch merken das sie jetzt ein ist
          }
          else
          {
            digitalWrite(linksLed, LOW); // wenn nein LED ausschalten
            ucBlinkerLED2 = LOW; // und wieder merken
          }
          // und zum Schluss noch die Zeit für den nächsten Durchlauf speichern
          previousMillis2 = millis();
        }
      }
    }
     
    void stand(byte flag, byte numOfValues)
    {
      analogWrite(standLed, meetAndroid.getInt());
    }
     
    /*
     * Whenever the multicolor lamp app changes the green value
     * this function will be called
     */
    void bremse(byte flag, byte numOfValues)
    {
      analogWrite(bremseLed, meetAndroid.getInt());
    }
     
    void rechts(byte flag, byte numOfValues)
    {
      int rechtsLed2 = meetAndroid.getInt();
      if( rechtsLed2 == 0 )
      {
        ucBlinkerStatus1 = 0; // Blinker aus
        digitalWrite(rechtsLed, LOW); // LED aus
        ucBlinkerLED1 = LOW; // und merken das die LED aus ist
        Serial.println("Blinker Rechts aus");
        value = '0';
      }
     
      if( rechtsLed2 == 255 )
      {
        Serial.println("Blinker Rechts ein");
        ucBlinkerStatus1 = 1; //Blinker ein
        /*Diese drei Zeilen müssten nicht sein die sind nur dafür das es schöner aussieht
        Sie haben nur einen Effekt wenn du innerhalb der Intervallzeit aus und wieder
        einschaltest, dann würde sonst der erste Blink nicht gleich erscheinen*/
        previousMillis1 = millis(); //wir speichern uns die Anfangszeit
        Serial.println(previousMillis1); // debug
        digitalWrite(rechtsLed, HIGH); //und schalten den Blinker gleich mal ein
        ucBlinkerLED1 = HIGH; //und merken uns auch das sie jetzt ein ist
        value = '0';
      }
    }
     
    void links(byte flag, byte numOfValues)
    {
      int linksLed2 = meetAndroid.getInt();
      if( linksLed2 == 0 )
      {
        ucBlinkerStatus2 = 0; // Blinker aus
        digitalWrite(linksLed, LOW); // LED aus
        ucBlinkerLED2 = LOW; // und merken das die LED aus ist
        Serial.println("Blinker Links aus");
        value = '0';
      }
     
      if( linksLed2 == 255 )
      {
        Serial.println("Blinker Links ein");
        ucBlinkerStatus2 = 1; //Blinker ein
        /*Diese drei Zeilen müssten nicht sein die sind nur dafür das es schöner aussieht
        Sie haben nur einen Effekt wenn du innerhalb der Intervallzeit aus und wieder
        einschaltest, dann würde sonst der erste Blink nicht gleich erscheinen*/
        previousMillis2 = millis(); //wir speichern uns die Anfangszeit
        Serial.println(previousMillis2); // debug
        digitalWrite(linksLed, HIGH); //und schalten den Blinker gleich mal ein
        ucBlinkerLED2 = HIGH; //und merken uns auch das sie jetzt ein ist
        value = '0';
      }
    } 

    Login or register to post comments