Go Down

Topic: Efache Schaltung Funktioniert nur für ca. 30 Sekunden (Read 490 times) previous topic - next topic

joergs

Apr 14, 2013, 09:06 pm Last Edit: Apr 14, 2013, 09:10 pm by joergs Reason: 1
Guten Abend,

Ich habe eben meinen Aduino bekommen und jetzt mal ein Programm geschrieben, mit dem man durch Drücken eines Schalters den Zustand einer Led( ein oder aus) ändern kann.
Zum entprellen habe ich eine Zeit von 300 ms eingestellt.
Der Code sieht folgendermaßen aus:
Code: [Select]
int led = 12;
int schalter = 10;
int pause = 200;
int zeitschalter = millis();
int ledstatus = HIGH;


void setup() {                

 pinMode(led, OUTPUT);    
 pinMode(schalter, INPUT);
}


void loop() {
 
if (digitalRead(schalter) == HIGH){
 if((millis()-zeitschalter) > pause){
   zeitschalter = millis();
     if(ledstatus == HIGH){ledstatus = LOW;}else{ledstatus = HIGH;}}
 }  

 
digitalWrite(led , ledstatus);
}


Dies funktioniert auch soweit ganz gut. Zum Beispiel, wenn ich den Schalter einfach gedrückt halte ändert sich alle 300 ms der Zustand.
Allerdings funktioniert das nur bis ca. 30 Sekunden.
Nach dieser Zeit leuchtet die Led nur bei gedrücktem Schalter, oder das an/ ausschalten geschieht mehr oder weniger zufällig, oder die Led wird nur etwas dunkler, wenn ich den Schalter drücke.
Weiß jemand, woher das kommen kann ?

Klaus_ww


joergs

Joah das wars dann auch schon.
Danke Klaus!

Hier ist nochmal der funktionierende Code:

Code: [Select]
int led = 12;
int schalter = 10;
long pause = 200;
long zeitschalter = millis();
int ledstatus = HIGH;


void setup() {               

  pinMode(led, OUTPUT);     
  pinMode(schalter, INPUT);
}


void loop() {
 
if (digitalRead(schalter) == HIGH){
  if((millis()-zeitschalter) > pause){
    zeitschalter = millis();
      if(ledstatus == HIGH){ledstatus = LOW;}else{ledstatus = HIGH;}}
  } 

 
digitalWrite(led , ledstatus);
}


Einen schönen Abend wünsche ich noch!


uwefed

Code: [Select]
long zeitschalter = millis();
ist auch noch nicht das richtige.
Code: [Select]
unsigned long zeitschalter = millis();
ist optimal.
Grüße Uwe

Go Up