Pages: [1]   Go Down
Author Topic: Efache Schaltung Funktioniert nur für ca. 30 Sekunden  (Read 444 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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 ?
« Last Edit: April 14, 2013, 02:10:51 pm by joergs » Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 583
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Millis und int vertragen sich nicht gut.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Joah das wars dann auch schon.
Danke Klaus!

Hier ist nochmal der funktionierende Code:

Code:
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!
Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 583
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prima, gut gemacht.
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21492
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: