Hallo zusammen,
ich sitze mal wieder seit Stunden vor einem Problem und benötige wohl mal wieder einen kleinen Gedankenanstoß.
Ich möchte gerne mit einem Taster eine Funktion abarbeiten lassen bis eine bestimmte Bedingung erfüllt ist.
Also der Taster soll nicht gedrückt bleiben (HIGH) sondern nur einmal getastet werden und dann soll die Funktion bis zu einer bestimmten Bedingung ablaufen.
Ich habe folgendes versucht, aber komme leider nicht zum gewünschten Erfolg.
#define poti A0
int potiwert = 0;
int rechenwert = 0;
#define LED_LINKS 2
#define LED_RECHTS 8
#define LED_AUS 10
#define BUTTON_0 5
int buttonState_0 = 0;
void setup()
{
pinMode(LED_LINKS, OUTPUT);
pinMode(LED_RECHTS, OUTPUT);
pinMode(LED_AUS, OUTPUT);
pinMode(BUTTON_0, INPUT);
pinMode(BUTTON_1, INPUT);
pinMode(BUTTON_2, INPUT);
potiwert = analogRead(poti);
rechenwert = analogRead(A0)/10;
stufe_0();
void stufe_0()
{
buttonState_0 = digitalRead(BUTTON_0);
if(buttonState_0 == HIGH)
{
{
if (rechenwert < 49)
{
digitalWrite(LED_LINKS, LOW);
delay(5);
digitalWrite(LED_AUS, LOW);
delay(5);
digitalWrite(LED_RECHTS, HIGH);
}
else if (rechenwert > 51)
{
digitalWrite(LED_RECHTS, LOW);
delay(5);
digitalWrite(LED_AUS, LOW);
delay(5);
digitalWrite(LED_LINKS, HIGH);
}
else if (rechenwert == 50)
{
digitalWrite(LED_RECHTS, LOW);
delay(5);
digitalWrite(LED_LINKS, LOW);
delay(5);
digitalWrite(LED_AUS, HIGH);
}
}
}
}
}
Ich muss weiter den Taster gedrückt halten damit die Funktion weiter durchläuft.
Würde mich über Hilfe sehr freuen.
Danke und Gruß
Ist das der ganze Sketch?
Ich finde kein loop
Entschuldigung, ist dann wohl doch schon spät...
Hier nun mit Loop.
#define poti A0
int potiwert = 0;
int rechenwert = 0;
#define LED_LINKS 2
#define LED_RECHTS 8
#define LED_AUS 10
#define BUTTON_0 5
int buttonState_0 = 0;
void setup()
{
pinMode(LED_LINKS, OUTPUT);
pinMode(LED_RECHTS, OUTPUT);
pinMode(LED_AUS, OUTPUT);
pinMode(BUTTON_0, INPUT);
pinMode(BUTTON_1, INPUT);
pinMode(BUTTON_2, INPUT);
}
void loop()
{
potiwert = analogRead(poti);
rechenwert = analogRead(A0)/10;
stufe_0();
}
void stufe_0()
{
buttonState_0 = digitalRead(BUTTON_0);
if(buttonState_0 == HIGH)
{
if (rechenwert < 49)
{
digitalWrite(LED_LINKS, LOW);
delay(5);
digitalWrite(LED_AUS, LOW);
delay(5);
digitalWrite(LED_RECHTS, HIGH);
}
else if (rechenwert > 51)
{
digitalWrite(LED_RECHTS, LOW);
delay(5);
digitalWrite(LED_AUS, LOW);
delay(5);
digitalWrite(LED_LINKS, HIGH);
}
else if (rechenwert == 50)
{
digitalWrite(LED_RECHTS, LOW);
delay(5);
digitalWrite(LED_LINKS, LOW);
delay(5);
digitalWrite(LED_AUS, HIGH);
}
}
}
Hallo,
naja ist doch eigentlich klar was passiert. Der Tasterpin wird abgefragt, wenn gedrückt liefert er High zurück. Wenn der ButtoneState High ist, erfolgt die weitere Abarbeitung in der aufgerufenen Funktion. Sonst eben nicht.
Du muß jetzt den Taster erstmal entprellen und dann eine Variable auf jeden Tastendruck hin umschalten.
Diese wertest du dann aus. Entweder machste das alles selbst oder nimmst die Bounce2 Library.
Doc_Arduino:
Hallo,
naja ist doch eigentlich klar was passiert. Der Tasterpin wird abgefragt, wenn gedrückt liefert er High zurück. Wenn der ButtoneState High ist, erfolgt die weitere Abarbeitung in der aufgerufenen Funktion. Sonst eben nicht.
Du muß jetzt den Taster erstmal entprellen und dann eine Variable auf jeden Tastendruck hin umschalten.
Diese wertest du dann aus. Entweder machste das alles selbst oder nimmst die Bounce2 Library.
Hallo und danke für Deine Antwort.
Ja mir ist klar was passiert und das hatte ich doch auch beschreiben!
Bin ich denn mit den Variablen und der Vorgehensweise auf dem richtigen Weg?
Ich hatte mir das auch so herauslesen wie Du es beschreibst, doch leider macht er eben genau das nicht!
Danke und Gruß
Klar macht er es nicht, Weil du eben nicht das programmiert hast, was doc beschrieben hat.
Ok, danke nochmal für die Antworten.
Habe es nun geschafft.
Grüße