Hallo zusammen,
nachdem ich jetzt seit 4 Jahren still mitlese und bisher mit dem Arduino Uno ein eher schlecht funktionierenden elektromechanischen Tacho für mein ukrainisches Auto gebaut habe, will ich euch mein erstes funktionierendes Projekt vorstellen: Den Warnblinker-Blinker-Tagfahrlicht-Parklicht-Rechner im Saporoshez.
Hier ist ein Link mit Bildern, Schaltplan und sogar einem mit Musik unterlegten Video:
https://saporoshez-968.de/2021technik/warnblinkparklicht-sapo2021.html
Vielen Dank an alle in diesem Forum, ohne euch hätte ich dieses Teil nicht bauen können.
Hier ist der Code:
//warnblinker-blinker-tagfahrlicht-parklicht-rechner
int a = 300; // Schwellenwert für Spannung an analogen Pins
int wbana = 0; // Wert für Berechnung Warnblinker und Blinker
int zuena = 0; // Wert für Berechnung Warnblinker und Blinker
int blila = 0; // Wert für Berechnung Warnblinker und Blinker
int blilb = 0; // Wert für Berechnung Warnblinker und Blinker
int blira = 0; // Wert für Berechnung Warnblinker und Blinker
int blirb = 0; // Wert für Berechnung Warnblinker und Blinker
const unsigned long onZeitb = 400; //ms normales Blinken
const unsigned long offZeitb = 400; //ms normales Blinken
const unsigned long onZeitw = 550; //ms Warnblinken
const unsigned long offZeitw = 250; //ms Warnblinken
void setup() {
pinMode(4, OUTPUT); // Ausgang Blinker links
pinMode(5, OUTPUT); // Ausgang Blinker rechts
pinMode(6, OUTPUT); // Ausgang Warnblinkkontrolllampe
pinMode(7, OUTPUT); // Ausgang Standlicht vorne links
pinMode(8, OUTPUT); // Ausgang Standlicht vorne rechts
pinMode(9, OUTPUT); // Ausgang Rückleuchte links
pinMode(10, OUTPUT); // Ausgang Rückleuchte rechts
pinMode(11, OUTPUT); // Ausgang Kennzeichenbeleuchtung
digitalWrite(4, HIGH); // beim Einschalten der Autobatterie erst einmal alles ausschalten
digitalWrite(5, HIGH); // beim Einschalten der Autobatterie erst einmal alles ausschalten
digitalWrite(6, HIGH); // beim Einschalten der Autobatterie erst einmal alles ausschalten
digitalWrite(7, HIGH); // beim Einschalten der Autobatterie erst einmal alles ausschalten
digitalWrite(8, HIGH); // beim Einschalten der Autobatterie erst einmal alles ausschalten
digitalWrite(9, HIGH); // beim Einschalten der Autobatterie erst einmal alles ausschalten
digitalWrite(10, HIGH); // beim Einschalten der Autobatterie erst einmal alles ausschalten
digitalWrite(11, HIGH); // beim Einschalten der Autobatterie erst einmal alles ausschalten
//Serial.begin(9600); // wird nur zur testweisen Anzeige am Bildschirm benötigt
}
void loop() {
int zuend = analogRead(A0); // Eingang von Zündung
int licht = analogRead(A1); // Eingang von Licht
int blili = analogRead(A2); // Eingang von Blinkschalter links
int blire = analogRead(A3); // Eingang von Blinkschalter rechts
int warnb = analogRead(A4); // Eingang von Warnblinkschalter
int ruels = analogRead(A5); // Eingang von Rücklichtschalter
if (warnb > a) { // wenn Warnblinkschalter an ist
wbana = 400;
blila = 400;
blira = 400;
digitalWrite(6, (millis()%(onZeitw+offZeitw))<onZeitw);}
if (warnb <= a) { // wenn Warnblinkschalter aus ist
wbana = 0;
blila = 0;
blira = 0;
digitalWrite(6, HIGH);} // Warnblinkkontrolllampe ausschalten
zuena = wbana + zuend; // Berechnung für Warnblinker
blilb = blila + blili; // Berechnung für Warnblinker
blirb = blira + blire; // Berechnung für Warnblinker
if (zuena > a && blilb > a ){ // Blinker links mit Zündung an normal
digitalWrite(4, (millis()%(onZeitb+offZeitb))<onZeitb);}
if (zuena > a && blilb > a && warnb > a){ // Blinker links als Warnblinker
digitalWrite(4, (millis()%(onZeitw+offZeitw))<onZeitw);}
if (zuena <= a || blilb <= a){ // Blinker links oder Zündung aus
digitalWrite(4, HIGH);}
if (zuena > a && blirb > a){ // Blinker rechts mit Zündung an normal
digitalWrite(5, (millis()%(onZeitb+offZeitb))<onZeitb);}
if (zuena > a && blirb > a && warnb > a){ // Blinker rechts als Warnblinker
digitalWrite(5, (millis()%(onZeitw+offZeitw))<onZeitw);}
if (zuena <= a || blirb <= a){ // Blinker rechts oder Zündung aus
digitalWrite(5, HIGH);}
if (licht > a && blili <= a && blire <= a) { // Lichter komplett an ohne Blinker
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
if (licht > a && warnb > a) { // Lichter komplett an bei Warnblinker
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
if (licht > a && zuend <= a) { // Lichter komplett an auch wenn Zündung aus
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
if (licht > a && blili > a && zuend > a && warnb <= a) { // kein Licht vorne links beim Blinken links
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
if (licht > a && blire > a && zuend > a && warnb <= a) { // kein Licht vorne rechts beim Blinken rechts
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
if (licht <= a) { // Lichter komplett aus wenn Lichtschalter aus
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
}
if (blili > a && zuend <= a && licht <= a) { // Lichter nur links wenn Lichtschalter aus und Blinker links ohne Zündung
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
}
if (blire > a && zuend <= a && licht <= a) {// Lichter nur rechts wenn Lichtschalter aus und Blinker rechts ohne Zündung
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
}
if (blili > a && zuend <= a && licht <= a && warnb > a)
// Lichter nur links wenn Lichtschalter aus und Blinker links und Zündung aus mit Warnblinker
{
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
}
if (blire > a && zuend <= a && licht <= a && warnb > a)
// Lichter nur rechts wenn Lichtschalter aus und Blinker rechts und Zündung aus mit Warnblinker
{
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
}
//Serial.println(zuend); // wird nur zur testweisen Anzeige am Bildschirm benötigt
//Serial.print(licht); // wird nur zur testweisen Anzeige am Bildschirm benötigt
//Serial.print(blili); // wird nur zur testweisen Anzeige am Bildschirm benötigt
//Serial.print(blire); // wird nur zur testweisen Anzeige am Bildschirm benötigt
//Serial.print(warnb); // wird nur zur testweisen Anzeige am Bildschirm benötigt
//Serial.print(ruels); // wird nur zur testweisen Anzeige am Bildschirm benötigt
}