Arduino UNO Taster und 3 LEDs

OP #4590176
Lesenswert?

Guten Morgen liebe Gemeinde, bin erst umgestiegen auf Arduino und habe 
ein kleines Problem.
Ich möchte mit einem Taster folgendes machen:

Wenn:
- Taster LOW, dann alle LEDs aus
- Taster HIGH, dann LED1 leuchtet für 1Sekunde, danach LED3 leuchtet so 
lange Taster gedrückt!

- Taster wird losgelassen, LED3 geht aus, LED2 leuchtet für 1Sekunde.

Wäre gut, wenn Taster noch entprellt wäre.

Leider weiß ich nicht, welche Schleife ich nehmen muß.

Hier mein Sketch nur als Übersicht:

int Taster=7;
int Tasterstatus=0;
int LED1=6;
int LED2=5;
int LED3=4;


void setup() {
pinMode(Taster, INPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}

void loop() {
Tasterstatus=digitalRead(Taster);
if (Tasterstatus == HIGH)
{
digitalWrite(LED1, HIGH);
delay (1000);
digitalWrite(LED1, LOW);
delay (50);
digitalWrite(LED3, HIGH);
}
else
{
digitalWrite(LED3, LOW);
delay (50);
digitalWrite(LED2, HIGH);
delay (1000);
digitalWrite(LED2, LOW);
}
}

Vielen Dank im Voraus
Gast #4590266
Lesenswert?

Schau dir nochmal die Grundlagen zum Arduino Programmieren an.
Warum hast du für den Tasterstatus einen Integer und keinen Bool 
genommen?
Die Beispielprogramme der IDE könnten dir auch schon helfen.
Gast #4590441
Lesenswert?

> danach LED3 leuchtet so lange Taster gedrückt!

Dein Code wiederholt den Block *if (Tasterstatus == HIGH) {...}* immer 
wieder, solange der Taste gedrückt gehalten wird. Du willst ihn aber nur 
einmal ausführen, wenn der Taster von "losgelassen" nach "gedrückt" 
wechselt.

Entsprechend willst du auch den Block *else {...}* nur einmal ausführen, 
wenn der Taster von "gedrückt" nach "losgelassen" wechselt.

Und wenn der Taster-Status unverändetr ist (losgelassen oder gdrückt), 
soll gar nichts passieren.

Vorschlag:
1
void loop() 
2
{
3
    Tasterstatus=digitalRead(Taster);
4
    if (Tasterstatus != VorherigerStatus)
5
    {
6
        if (Tasterstatus == HIGH)
7
        {
8
            digitalWrite(LED1, HIGH);
9
            delay (1000);
10
            digitalWrite(LED1, LOW);
11
            delay (50);
12
            digitalWrite(LED3, HIGH);
13
        }
14
        else
15
        {
16
            digitalWrite(LED3, LOW);
17
            delay (50);
18
            digitalWrite(LED2, HIGH);
19
            delay (1000);
20
            digitalWrite(LED2, LOW);
21
        }
22
    }
23
    VorherigerStatus = Tasterstatus;
24
}
OP #4591908
Lesenswert?

Da ich über die Leitung, wo der Taster hängt, noch mit 2 Taster über 
Widerstände, etwas steuern möchte (nicht mit Arduino), soll nun am 
analogen Eingang des Arduino (statt bisher am digitalen), erst ab einen 
Wert unter 1KΩ der Ablauf starten.
Wie gehe ich am besten vor?

Mein bisheriges Sketch:

//Taste - Eingang Masse
int LED1=13;     //wartet
int LED2=12;    //gestartet
int Taster=11;  //Taste gedrückt gegen Masse, ansonsten kein starten von 
Programm, wenn Widerstand über 1kΩ
int Tasterstatus=0;
int VorherigerStatus;

//alle gegen Masse mit genannten Widerstand
int LED3=10;
int LED4=9;
int LED5=8;

void setup() {
pinMode(Taster, INPUT);
digitalWrite(Taster, HIGH);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
}

void loop() {
Tasterstatus=digitalRead(Taster);
if (Tasterstatus != VorherigerStatus)
{
if (Tasterstatus == LOW)
{
digitalWrite(LED1, LOW);
delay (10);
digitalWrite(LED2, HIGH);
delay (10);
digitalWrite(LED4, HIGH);
delay (100);
digitalWrite(LED4, LOW);
delay (100);
digitalWrite(LED5, HIGH);
}
else
{
digitalWrite(LED5, LOW);
delay (100);
digitalWrite(LED4, HIGH);
delay (100);
digitalWrite(LED4, LOW);
delay (10);
digitalWrite(LED2, LOW);
digitalWrite(LED1, HIGH);
}
}
VorherigerStatus = Tasterstatus;
}
OP #4592025
Lesenswert?

Nach längerer Überlegung habe ich eine andere Idee....
Möchte über den Arduino nun doch alle Schaltvorgänge steuern, abhängig 
vom jeweiligen Widerstand.

S1 = Abfolge von Programm, siehe Sketch unten

neu hinzu:
S2 = nur LED3 leuchtet
S3 = nur LED4 leuchtet

Mein bisheriges Sketch:

//Taste - Eingang Masse
int LED1=13;     //wartet
int LED2=12;    //gestartet
int Taster=11;  //Taste gedrückt gegen Masse, ansonsten kein starten von
Programm, wenn Widerstand über 1kΩ
int Tasterstatus=0;
int VorherigerStatus;

//alle gegen Masse mit genannten Widerstand
int LED3=10;
int LED4=9;
int LED5=8;

void setup() {
pinMode(Taster, INPUT);
digitalWrite(Taster, HIGH);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
}

void loop() {
Tasterstatus=digitalRead(Taster);
if (Tasterstatus != VorherigerStatus)
{
if (Tasterstatus == LOW)
{
digitalWrite(LED1, LOW);
delay (10);
digitalWrite(LED2, HIGH);
delay (10);
digitalWrite(LED4, HIGH);
delay (100);
digitalWrite(LED4, LOW);
delay (100);
digitalWrite(LED5, HIGH);
}
else
{
digitalWrite(LED5, LOW);
delay (100);
digitalWrite(LED4, HIGH);
delay (100);
digitalWrite(LED4, LOW);
delay (10);
digitalWrite(LED2, LOW);
digitalWrite(LED1, HIGH);
}
}
VorherigerStatus = Tasterstatus;
}

Vielen Dank und einen schönen Feiertag
Angehängte Dateien:
#4592115
Lesenswert?

Wenn du mehrere Taster an Analogeingang hast, wie in deinem Plan 
gezeichnet, dann musst du auch analogRead(Taster)nehmen.
Du brauchst drei Widerstände in Serie von +5V zum A0. Dazwischen legst 
du die Taster nach GND. Du kannst ja keinen Widerstand messen sondern 
nur die Spannung am A0.
OP #4592227
Lesenswert?

Vielen Dank Hubert, leider sind die Taster und Widerstände extern, daher 
kann ich Sie auch nicht auf 5Volt schalten.
Irgendwo ich auch schon mal gesehen, dass es eine Lösung gibt, die 
sogenannte Referenz über einen anderen analogen Eingang gibt, wird diese 
Referenzspannung überschritten, dann schaltet er durch. Sowas müsste ja 
auch bei 3 Referenz Spannungen gehen?
Und wenn, wie sieht dann der Sketch aus?
Bin leider noch nicht ganz durchgestiegen.
OP #4592291
Lesenswert?

Habe die Fernsteuereinheit nochmals auseinandergenommen und bemerkt, 
dass wie von Hubert vorgeschlagen, im Ruhezustand 5Volt an den 
Widerständen anliegen.
Soweit so gut, nun habe ich aber nur 2 Leitungen zur Verfügung, die 
Messeleitung und die Steuerleitung, die jenach welche Taste gedrückt 
wird, Spannung leitet, da steig ich noch nicht durch,
oder kann ich A0 einfach auf 5Volt legen?
Das hieße aber auch, dass wenn S1 gedrückt, ein Kurzschluss auf der 
5Volt Versorgung wäre.

Wie würde der Sketch aussehen in etwa, um diese 3Spannungen 
3verschiedenen Aktionen, zu zu ordnen?
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren