Sketch/ LEDs bleiben nach wenn weite an

servus leute, bin neu hier im forum und seit zwei wochen die arduino welt für mich entdeckt.
mein erstes (nicht meins) projekt ist eine glühwürmchen kette mit 6 leds die random gedimmt aufleuchten und gedimmt aus gehen. im original code ausm internet (fireflies) ist kein fotowiederstand verbaut ich möchte aber gerne einen einfügen um die battery zu schonen und man tags über sowieso nichts sieht.
habe es soweit implamentieren können nur ein problem bleibt offen, die leds bzw. die led die zuletzt gelchtet hat, bleibt nicht aus sondern dimmt sich an und aus bis ich reset drücke oder es halt wieder hell wird.
wenn ihr mir da tipps geben könntet wäre ich sehr dankbar. habe null c++ kenntnise, versuche es mir soweit ich es für mich benötige zu lernen.

code hier:

/*
Dieses Skript blinkt 6 PWs (natürlich gelb) in zufälliger Reihenfolge 
in zufälligen Intervallen mit PWM.  
Jede LED wird durch ihre eigene Funktion gesteuert.
*/

int eingang= A0;
int led1 = 3;    // LED an PWM Pin 3 usw. angeschlossen. Ich habe alle 6 PWM Pins verwendet.
int led2 = 5;
int led3 = 6;
int led4 = 9;
int led5 = 10;
int led6 = 11;
int sensorWert = 0;

long randnum;      // randnum steuert das Zeitintervall zwischen Blitzen und 
long randbug;      //Randbug steuert, welcher Fehler aufleuchtet.

void setup()  
{
  Serial.begin(9600);
  pinMode(led1,OUTPUT);      //Alle PWM-Pins als Ausgänge setzen.
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
  pinMode(led5,OUTPUT);
  pinMode(led6,OUTPUT);
}

void loop()
{  
  sensorWert =analogRead(eingang);
  Serial.print("Sensorwert = " );
  Serial.println(sensorWert);

   if (sensorWert < 20 )

   randbug = random(3,11);              //Randbug wählt zufällig eine auszuführende Funktion aus,  
                                        //wählt also zufällig einen Fehler zum Aufleuchten aus.
  
  else{
    
    analogWrite(led1,LOW);
    analogWrite(led2,LOW);
    analogWrite(led3,LOW);
    analogWrite(led4,LOW);
    analogWrite(led5,LOW);
    analogWrite(led6,LOW);
  }   
  
  
                            

  
  
                                         
 
  
  if (randbug == 3) {
  bug1();
  }
  if (randbug == 5) {
  bug2();
  }
  if (randbug == 6) {                                     
  bug3();
  }
  if (randbug == 9) {
  bug4();
  }
  if (randbug == 10) {
  bug5();
  }
  if (randbug == 11) {                                     
  bug6();
  }
}  

                    
  void bug1(){
    randnum = random(10, 3000); 
        for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=2) {       
    analogWrite(led1, fadeValue);                                        
    delay(30);                                                           
  } 
        for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=3) {           
    analogWrite(led1, fadeValue);                                       
    delay(50);                            
  } 
    delay (randnum);  
  }
  
  void bug2() {
    randnum = random(10, 3000); 
        for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=2) {               
    analogWrite(led2, fadeValue);                                           
    delay(30);                            
  }
       for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=3) { 
    analogWrite(led2, fadeValue);    
    delay(50);                            
  } 
    delay (randnum); 
  }
  
  void bug3() {
    randnum = random(10, 3000); 
         for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=2) { 
    analogWrite(led3, fadeValue);       
    delay(30);                            
  } 
         for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=3) { 
    analogWrite(led3, fadeValue);        
    delay(50);                            
  } 
    delay (randnum);   
  }
                
  void bug4(){
    randnum = random(10, 3000); 
        for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=2) {       
    analogWrite(led4, fadeValue);                                        
    delay(30);                                                           
  } 
        for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=3) {           
    analogWrite(led4, fadeValue);                                       
    delay(50);                            
  } 
    delay (randnum);  
  }
  
  void bug5() {
    randnum = random(10, 3000); 
        for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=2) {               
    analogWrite(led5, fadeValue);                                           
    delay(30);                            
  }
       for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=3) { 
    analogWrite(led5, fadeValue);    
    delay(50);                            
  } 
    delay (randnum); 
  }
  
  void bug6() {
    randnum = random(10, 3000); 
         for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=2) { 
    analogWrite(led6, fadeValue);       
    delay(30);                            
  } 
         for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=3) { 
    analogWrite(led6, fadeValue);        
    delay(50);                            
  } 
    delay(1000);                 
  }

Hallo,
schaue dir die random() Funktion in der Arduino-Referenz an.

Änder mal alle im else-Zweig von:
analogWrite(ledx, LOW);
nach
digitalWrite(ledx,LOW);

Las Dir auf dem SerMon ausgeben, was Du bekommst. Vergleiche das mit dem was Du erwartest!

Bist Du sicher, dass nach der Überprüfung des Sensorwertes eine der bug-Funktionen wirklich noch aufgerufen werden soll?

  if (sensorWert < 20 )
  {
    randbug = random(3, 11);             //Randbug wählt zufällig eine auszuführende Funktion aus,
  }
  else
  {
    analogWrite(led1, LOW);
    ...
  }

  if (randbug == 3)
  {
    bug1();
  }
...

Die Anweisung nach dem if bitte immer in geschweiften Klammern einschließen - es gibt komische Effekte und lange Sucherei, wenn es mal zwei Anweisungen werden.

Hallo,

Du solltest Deine Variable randbug in dem else Teil noch auf z.B 0 setzen damit nicht eine von den nachfolgenden if(randbug==x) erfüllt ist .

else{
   
    analogWrite(led1,LOW);
    analogWrite(led2,LOW);
    analogWrite(led3,LOW);
    analogWrite(led4,LOW);
    analogWrite(led5,LOW);
    analogWrite(led6,LOW);
    randbug=0;
}

Heinz

Hallo Leute, sry das ich erst jetzt antworte.
Mir hat schon ein profi gezeigt wie man es auf die Pro Art schreibt hier bitteschön (für die die es nachmachen wollen)

Code:

/*
Dieses Skript blinkt 6 PWs (natürlich gelb) in zufälliger Reihenfolge 
in zufälligen Intervallen mit PWM.  
Jede LED wird durch ihre eigene Funktion gesteuert.
*/

int eingang = A0;
int led1 = 3;    
int led2 = 5;
int led3 = 6;
int led4 = 9;
int led5 = 10;
int led6 = 11;
int leds[6] = {led1, led2, led3, led4, led5, led6};
int sensorWert = 0;

void setup()  
{
  Serial.begin(9600);
  for(int i = 0; i < 6; i++){
    pinMode(leds[i], OUTPUT);      
  }
}

void loop() {  
  sensorWert = analogRead(eingang);
  Serial.print("Sensorwert = " );
  Serial.println(sensorWert);

  if (sensorWert < 20 ){
    int selectedLed = leds[random(0,6)];

    for(int fadeValue = 0 ; fadeValue <= 255; fadeValue += 2) {       
      analogWrite(selectedLed, fadeValue);                                        
      delay(30);                                                           
    } 
    for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -= 3) {           
      analogWrite(selectedLed, fadeValue);                                       
      delay(50);                            
    } 
    
    delay(random(10, 3000));                              
  } else {
    for(int i = 0; i < 6; i++){
      analogWrite(leds[i], LOW);
    }
  }   
}

xx-w1ns-xx:
ein profi

int eingang = A0;

int led1 = 3;   
int led2 = 5;
int led3 = 6;
int led4 = 9;
int led5 = 10;
int led6 = 11;
int leds[6] = {led1, led2, led3, led4, led5, led6};

Ja.

my_xy_projekt:
Ja.

das ist doch die Pro-Art :slight_smile:

Da sind noch mehr "Profi"-Aspekte drin.

Gruß Tommy

Tommy56:
Da sind noch mehr “Profi”-Aspekte drin.

Nein, das kann nicht sein - ist doch ein Profi:

delay(random(10, 3000));

Merke: Professionell arbeitet, wer dafür bezahlt wird. Über die Qualität der Arbeit sagt das nichts aus.

Ok, bei der Definition ist nichts mehr zu ergänzen.
Ich hatte bisher Profi mit einem gewissen Niveau verknüpft. Das war wohl anscheinend falsch.

Gruß Tommy

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.