Mahlzeit,
kurz zu meinem Wissensstand, in der Uni mal C+ programiert aber nur mit viel Abschreiben bestanden. if else sind grob bekannt mehr leider nicht. Durch Videos und Lesen wirds nicht wircklich besser...
Daher kommen die Codes vom Chatbot.
Zum Projek:
Es wird eine BMW R 65 bj. 1979 zu einer Sportenduro Rally Enduo umgebaut.
Um die Uralten Schalter und den massigen Kabelbaum zu verschlanken möchte ich die Beleuchtung über einen Arduino Nano steuern. Hierzu habe ich schon den Schaltplan gezeichnet.
Der Arduino bekommt die Signale von Tastern am Lenker und soll Relais im Arbeitskreis schalten.
Das ganze wird modular aufgebaut, die einzelnen Komponenten werden mit Superseal Steckern miteinander verbunden. Wenn ein Teil aufgibt kann es so schnell getauscht werden.
Zu meinem Problem:
Ich habe angefangen da Program zusammen zu basteln. Leider klappt das Blinken und die Warnblinkanlage nicht.
Beim blinken Taster drücken Ausgang soll blinken bis Taster wieder gedrückt.
Bei der Warnblinkanlage soll Taster für blinker link und Rechts gedrückt werden, bis Taster links gedrückt wird.
Angehängt habe ich mal den Code.
Über Tipps und hilfe würde ich mich sehr freuen.
Gruß Michal
const int BLR = A0;
const int BLL = A1;
const int Hupe = A2;
const int FernL = A3;
const int Licht = A4;
const int BrLi = A5;
const int FlutL = A6;
const int AusgBLR = 2;
const int AusgBLL = 3;
const int AusgHupe = 4;
const int AusgFernL = 5;
const int AusgLicht = 6;
const int AusgBrLi = 7;
const int AusgFlutL = 8;
void setup() {
// put your setup code here, to run once:
pinMode(BLR, INPUT);
pinMode(BLL, INPUT);
pinMode(Hupe, INPUT);
pinMode(FernL, INPUT);
pinMode(Licht, INPUT);
pinMode(BrLi, INPUT);
pinMode(FlutL, INPUT);
pinMode(AusgBLR, OUTPUT);
pinMode(AusgBLL, OUTPUT);
pinMode(AusgHupe, OUTPUT);
pinMode(AusgFernL, OUTPUT);
pinMode(AusgLicht, OUTPUT);
pinMode(AusgBrLi, OUTPUT);
pinMode(AusgFlutL, OUTPUT);
}
// für Warnblinkanlage
bool flashingWARN = false; // Flag, um zu speichern, ob die AusgBLR und der AusgBLRL gerade blinken
bool BLRPressed = false; // Flag, um zu speichern, ob der BLR gedrückt wurde
unsigned long flashStartTime = 0; // Zeitpunkt, zu dem das Blinken gestartet wurde
// Warnblinker ENDE
// Blinker Rechts
bool flashingBLR = false; // Flag, um zu speichern, ob der AusgBLR gerade
// Blinker Rechts ENDE
// Blinker Links
bool flashingBLL = false; // Flag, um zu speichern, ob der AusgBLL gerade blinkt
// Blinker Links ENDE
void loop() {
// Blinker Rechts
{
if (digitalRead(BLR) == HIGH) { // Prüfe, ob der BLR gedrückt wurde
flashingBLR = !flashingBLR; // Schalte den flashingBLR-Flag um
if (flashingBLR) { // Wenn der flashingBLR-Flag gerade gesetzt wurde...
flashStartTime = millis(); // Speichere den Zeitpunkt, zu dem das Blinken gestartet wurde
}
}
if (flashingBLR) { // Wenn der flashingBLR-Flag gesetz
unsigned long currentTime = millis(); // Aktuelle Zeit in Millisekunden
if (currentTime - flashStartTime >= 1000) { // Wenn seit dem Start des Blinkens mehr als 1 Sekunde vergangen ist...
digitalWrite(AusgBLR, HIGH); // Schalte den AusgBLR ein
flashStartTime = currentTime; // Aktualisiere den Zeitpunkt, zu dem das Blinken gestartet wurde
} else if (currentTime - flashStartTime >= 500) { // Wenn seit dem Start des Blinkens mehr als 0,5 Sekunden vergangen sind, aber weniger als 1 Sekunde...
digitalWrite(AusgBLR, LOW); // Schalte den AusgBLR aus
}
}
}
// Blinker Links
{
if (digitalRead(BLL) == HIGH) { // Prüfe, ob der BLL gedrückt wurde
flashingBLL = !flashingBLL; // Schalte den flashingBLL-Flag um
if (flashingBLL) { // Wenn der flashingBLL-Flag gerade gesetzt wurde...
flashStartTime = millis(); // Speichere den Zeitpunkt, zu dem das Blinken gestartet wurde
}
}
if (flashingBLL) { // Wenn der flashingBLL-Flag gesetzt ist...
unsigned long currentTime = millis(); // Aktuelle Zeit in Millisekunden
if (currentTime - flashStartTime >= 1000) { // Wenn seit dem Start des Blinkens mehr als 1 Sekunde vergangen ist...
digitalWrite(AusgBLL, HIGH); // Schalte den AusgBLL ein
flashStartTime = currentTime; // Aktuelle Zeit
} else if (currentTime - flashStartTime >= 500) { // Wenn seit dem Start des Blinkens mehr als 0,5 Sekunden vergangen sind, aber weniger als 1 Sekunde...
digitalWrite(AusgBLL, LOW); // Schalte den AusgBLL aus
}
}
}
// Hupe
if (digitalRead(Hupe) == HIGH) { // Prüfe, ob der Button gedrückt wurde
digitalWrite(AusgHupe, HIGH); // Schalte die LED ein
} else {
digitalWrite(AusgHupe, LOW); // Schalte die LED aus
}
// Fernlicht
if (digitalRead(FernL) == HIGH) { // Prüfe, ob der Button gedrückt wurde
digitalWrite(AusgFernL, !digitalRead(AusgFernL)); // Schalte die LED um
}
// Licht
if (digitalRead(Licht) == HIGH) { // Prüfe, ob der Button gedrückt wurde
digitalWrite(AusgLicht, !digitalRead(AusgLicht)); // Schalte die LED um
}
// Bremslicht
if (digitalRead(BrLi) == HIGH) { // Prüfe, ob der Button gedrückt wurde
digitalWrite(AusgBrLi, HIGH); // Schalte die LED ein
} else {
digitalWrite(AusgBrLi, LOW); // Schalte die LED aus
}
// Flutlicht
if (digitalRead(FlutL) == HIGH) { // Prüfe, ob der Button gedrückt wurde
digitalWrite(AusgFlutL, !digitalRead(AusgFlutL)); // Schalte die LED um
}
// Warnblinker
if (digitalRead(BLR) == HIGH && digitalRead(BLR) == HIGH) { // Prüfe, ob der BLR und der BLRL gedrückt wurden
if (BLRPressed) { // Wenn der BLR zuvor nicht gedrückt war...
flashingWARN = !flashingWARN; // Schalte den flashing-Flag um
if (flashingWARN) { // Wenn der flashing-Flag gerade gesetzt wurde...
flashStartTime = millis(); // Speichere den Zeitpunkt, zu dem das Blinken gestartet wurde
}
BLRPressed = true; // Setze den BLRPressed-Flag
}
} else {
if (BLRPressed) { // Wenn der BLR zuvor gedrückt war...
flashingWARN = false; // Setze den flashing-Flag zurück
BLRPressed = false; // Setze den BLRPressed-Flag zurück
}
}
if (flashingWARN) { // Wenn der flashing-Flag gesetzt ist...
unsigned long currentTime = millis(); // Aktuelle Zeit in Millisekunden
if (currentTime - flashStartTime >= 1000) { // Wenn seit dem Start des Blinkens mehr als 1 Sekunde vergangen ist...
digitalWrite(AusgBLR, HIGH); // Schalte den AusgBLR ein
digitalWrite(AusgBLL, HIGH); // Schalte den AusgBLRL ein
flashStartTime = currentTime; // Aktualisiere den Zeitpunk
}
}
}