Hallo Community,
ich habe mich am Wochenende ein bisschen mit meinem neu erstandenen Arduino Uno beschäftig. Ich bin blutiger Anfänger.
Ich möchte mich mit einem ersten kleinen Projekt über die normalen Übungen hinaus wagen. Und zwar möchte ich eine LED mit 2 Tastern ansteuern. Bei Druck des ersten Tasters soll die LED einmal leuchten (im Optimalfall kann ich die Zeit angeben wielange diese leuchtet) und beim Druck des zweiten Tasters soll die LED solange leuchten bis ich ein weiteres mal auf den selben Knopf drücke.
Meine Idee war es über Interrupts zu lösen (nicht gleich steinigen wenn das eine Schnapsidee ist). Der Knopf zwei wo sie leuchtet bis zum nächsten Druck funktioniert wunderbar. Nur das einmal leuchten macht mir ein wenig zu schaffen und ich komme nicht weiter.
const int button1 = 2;
const int button2 = 3;
const int ledPin = 13;
int state;
int buttonState;
int lastState;
int ledState;
volatile unsigned long alteZeit=0, entprellZeit=50;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
pinMode(2, INPUT);
pinMode(3, INPUT);
attachInterrupt(0, interruptRoutine, CHANGE);
attachInterrupt(1, interruptRoutine1, CHANGE);
}
void loop() {
Serial.println("-----------------normaler Loop ----------------");
delay(1000);
}
//Taster1
void interruptRoutine() {
if (ledPin, HIGH)
digitalWrite(ledPin, LOW);
const int buttonState = digitalRead(button1);
if((millis() - alteZeit) > entprellZeit) {
if (buttonState == HIGH)
digitalWrite(ledPin, LOW);
alteZeit = millis();
}
else
digitalWrite(ledPin, HIGH);
Serial.println("Interrupt_Routine 0 wird ausgefuehrt");
}
//Taster2
void interruptRoutine1() {
state = digitalRead(button2);
if (state != lastState)
{
if (state == HIGH)
{
if (ledState == HIGH)
{
ledState = LOW;
Serial.println("LED AUS");
}
else
{
ledState = HIGH;
Serial.println("LED EIN");
}
}
lastState = state;
}
digitalWrite(ledPin, ledState);
delay(20);
}
Der Taster1 reagiert erst beim dritten oder vierten Drücken, und dann bleibt die LED an erst wenn ich die Funktion des zweiten Tasters 1x ausführe dann klappt es halbwegs, aber nicht mit jedem Tasetndruck...
Herzlichen Dank für Hinweise, wo ich falsch liege.
Schönen Abend
MS