Bin neu hier und hab schon die erste Frage...
Ich bin absoluter neu Einsteiger.
Ich habe einen Taster(Pin12) mit einem 10kOhm pull down Widerstand und eine Led (Pin13) mit dem Arduino Mega verbunden.
Nun möchte ich das bei gedrücktem Taster die Led einschaltet und nach 1s wieder ausgeschaltet wird.
Leider habe ich das Problem, dass die Led bei gedrücktem Taster nicht mehr ausschaltet.
Erst wenn ich den Taster loslasse, schaltet die Led nach 1s aus.
Wie muss ich den Code umschreiben, sodass die Led bei gedrücktem Taster angeht und sich nach 1s wieder ausschaltet. (taster wird immer noch gehalten) Das Ganze sollte sich nach erneutem betätigen des Tasters wieder wiederholen.
//Turns on and off a LED ,when pressings button attach to pin12
/**********************************/
const int keyPin = 12; //the number of the key pin
const int ledPin = 13;//the number of the led pin
/**********************************/
void setup()
{
pinMode(keyPin,INPUT);//initialize the key pin as input
pinMode(ledPin,OUTPUT);//initialize the led pin as output
}
/**********************************/
void loop()
{
//read the state of the key value
//and check if the kye is pressed
//if it is,the state is HIGH
if(digitalRead(keyPin) ==HIGH )
{
digitalWrite(ledPin,HIGH);//turn on the led
delay(1000);
}
else
{
digitalWrite(ledPin,LOW);//turn off the led
}
}
/************************************/
Danke schon im Voraus für eure Hilfe!
Schöne Grüße
Andy
mit Deinem code-ansatz kommst Du hier nicht weiter. vermeide delays (außer sehr kurze zum entprellen) und versuche das blinkwithoutdelay-beispiel in der IDE zu verstehen.
arduinoknight:
Wie muss ich den Code umschreiben, sodass die Led bei gedrücktem Taster angeht und sich nach 1s wieder ausschaltet. (taster wird immer noch gehalten) Das Ganze sollte sich nach erneutem betätigen des Tasters wieder wiederholen.
Erstens mal mußt Du auf einen PegelWECHSEL am Pin reagieren, also wenn der Pegel LOW war und dann HIGH wird, dann wurde der Taster gedrückt.
Und zweitens mal kannst Du es Dir für interaktive Programme komplett abschminken, den Programmablauf zu blockieren mit der Funktion "delay". Damit handelst Du Dir nichts als Ärger ein, wenn Du keinen logischen "Flow" im Programm hast, sondern ständig irgendwo Ablaufblockierungen mit "delay". Damit machst Du jede Programmlogik bei interaktiven Programmen kaputt.
//Turns on and off a LED ,when pressings button attach to pin12
/**********************************/
const int keyPin = 12; //the number of the key pin
const int ledPin = 13;//the number of the led pin
/**********************************/
void setup()
{
pinMode(keyPin,INPUT);//initialize the key pin as input
pinMode(ledPin,OUTPUT);//initialize the led pin as output
}
/**********************************/
boolean lastState;
unsigned long lastSwitch;
void loop()
{
boolean state=digitalRead(keyPin);
if(state!=lastState)
{
lastState=state;
if (state==HIGH)
{
digitalWrite(ledPin,HIGH);
lastSwitch=millis();
}
}
else if (millis()-lastSwitch>=1000)
{
digitalWrite(ledPin,LOW);//turn off the led
}
}
/************************************/
Ich möchte den Code von "jurs" für meine Schaltung erweitern, sodass beim loslassen des Tasters, die Led erneut aufleuchtet und wieder nach 1s ausgeht.
Aufgabe:
Taster drücken (gedrückt halten) > Led AN nach 1s aus > Taster loslassen > Led AN nach 1s wieder aus.
Vielleicht hat jemand Zeit den Code von jurs für mich umzuschreiben. Komm alleine nicht weiter...
arduinoknight:
Vielleicht hat jemand Zeit den Code von jurs für mich umzuschreiben. Komm alleine nicht weiter...
Wenn die Schaltung nicht nur beim Pegelwechsel nach "HIGH" stattfinden soll, sondern bei jedem Pegelwechsel, dann kommentierst Du die Bedingung entweder aus, indem Du Kommentarstriche davorsetzt:
// if (state==HIGH)
oder die Zeile gleich komplett löschst, wenn Du sie nicht brauchst.