Schönen Abend zusammen,
ich habe vor, für ein RC-Fahrzeug einen Blinker zu bauen.
Dieser wird über drei Kanäle (Taster) gesteuert, diese sollen folgendes auslösen:
- Nach Links blinken
- Nach Rechts blinken
- Warnblinker
Dann hab ich mir mal überlegt wie ich das am besten lösen kann, ein bisschen im Internet nach ähnlichen Themen gesucht und dann das mal soweit versucht zu programmieren.
const int LED_L = 8;
const int LED_R = 6;
const int schalter_L = 4;
const int schalter_R = 3;
const int schalter_W = 2;
// Blink-
int blink_LED_L_state = LOW;
int blink_LED_R_state = LOW;
long blink_previousMillis_L = 0;
long blink_previousMillis_R = 0;
//-Blink
long interval = 1000;
//Schalter-
int schalter_reading_L;
int schalter_reading_R;
int schalter_reading_W;
int schalter_previous_L;
int schalter_previous_R;
int schalter_previous_W;
long schalter_L_time = 0;
long schalter_R_time = 0;
long schalter_W_time = 0;
long debounce = 200;
//-Schalter
int schalter_L_zustand;
int schalter_R_zustand;
void setup(){
pinMode(LED_L, OUTPUT);
pinMode(LED_R, OUTPUT);
pinMode(schalter_L, INPUT);
pinMode(schalter_R, INPUT);
pinMode(schalter_W, INPUT);
}
void links_schalter(){
schalter_reading_L = digitalRead(schalter_L);
if (schalter_reading_L == HIGH && schalter_previous_L == LOW && millis() - schalter_L_time > debounce)
{
schalter_L_zustand = 1;
schalter_L_time = millis();
}
else
{
schalter_L_zustand = 0;
}
schalter_previous_L = schalter_reading_L;
}
void rechts_schalter(){
schalter_reading_R = digitalRead(schalter_R);
if (schalter_reading_R == HIGH && schalter_previous_R == LOW && millis() - schalter_R_time > debounce)
{
schalter_R_zustand = 1;
schalter_R_time = millis();
}
else
{
schalter_R_zustand = 0;
}
schalter_previous_R = schalter_reading_R;
}
void links_blinken(){
unsigned long blink_currentMillis_L = millis();
if(blink_currentMillis_L - blink_previousMillis_L > interval) {
blink_previousMillis_L = blink_currentMillis_L;
if (blink_LED_L_state == LOW)
blink_LED_L_state = HIGH;
else
blink_LED_L_state = LOW;
digitalWrite(LED_L, blink_LED_L_state);
}
}
void rechts_blinken(){
unsigned long blink_currentMillis_R = millis();
if(blink_currentMillis_R - blink_previousMillis_R > interval) {
blink_previousMillis_R = blink_currentMillis_R;
if (blink_LED_R_state == LOW)
blink_LED_R_state = HIGH;
else
blink_LED_R_state = LOW;
digitalWrite(LED_R, blink_LED_R_state);
}
}
void loop(){
links_schalter();
rechts_schalter();
while (schalter_R_zustand == 1 && schalter_L_zustand == 0)
{
rechts_blinken();
}
while (schalter_L_zustand == 0 && schalter_R_zustand == 1)
{
links_blinken();
}
}
Nur passiert nicht das, das ich mir erwünscht habe
Folgende Situation:
Zu Beginn garnichts, alle LEDs aus.
Beim betätigen von pin 3 (Schalter Rechts) beginnt LED 6 (Blinker Rechts) zu blinken. Beenden lässt sich dies über ein erneutes betätigen des pin 3 nicht.
Beim Versuch, das ganze für den Linken Blinker zu erreichen, passiert nichts.
Für den Warnblinker hab ich noch nichts gemacht, dieser existiert derzeit nur als Eingang. Das kommt dann wenn Links und Rechts blinken funktionieren.
Ich vermute, dass das Problem in der loop-Funktion bei der while-Schleife liegt. Ist aber nur eine Vermutung, und alle Versuche meinerseits haben nicht geholfen.
Es wäre echt super, wenn mir jemand helfen könnte.
Viele Grüße,
Simon