
caferacer-forum.de - Das Forum für Petrolheads, Garagenschrauber, Ölfinger, Frickelracer und Alteisentreiber
Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM etc)
- Emil1957
- Beiträge: 1171
- Registriert: 23. Mär 2016
- Motorrad:: Honda CB 350K4 Bj. 1973, Jawonda-Gespann (Jawa mit CB450N-Motor und anderen Japan-Teilen), Honda CB250K im Laverda 750SFC Stil (im Aufbau)
- Wohnort: Köln
Re: Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM etc)
Da bald Ostern ist, wäre ich auch an einem Ei interessiert.
Grüße
Emil
Der Worte sind genug gewechselt,
Laßt mich auch endlich Taten sehn!
Indes ihr Komplimente drechselt,
Kann etwas Nützliches geschehn.
(Johann Wolfgang von Goethe: Faust: Eine Tragödie)
Emil
Der Worte sind genug gewechselt,
Laßt mich auch endlich Taten sehn!
Indes ihr Komplimente drechselt,
Kann etwas Nützliches geschehn.
(Johann Wolfgang von Goethe: Faust: Eine Tragödie)
Re: Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM etc)
Okay, dann biete mir doch gerne per PN zwei Stück an. Den dritten integriere ich ins Cockpit.
Fragen zum Schaltplan:
1. Die Dioden sind Standard 1N4001 ?
2. Die Blinker, wenn ich meinen Schaltplan richtig lese, dann kommt von der Armatur (Schalter Re/Li) +12V
Liege ich da falsch, oder hast du das geändert?
VG
Axel
Fragen zum Schaltplan:
1. Die Dioden sind Standard 1N4001 ?
2. Die Blinker, wenn ich meinen Schaltplan richtig lese, dann kommt von der Armatur (Schalter Re/Li) +12V
Liege ich da falsch, oder hast du das geändert?
VG
Axel
- brummbaehr
- Beiträge: 958
- Registriert: 27. Sep 2016
- Motorrad:: Honda CX 500/650
- Wohnort: 41836 Hückelhoven
- Kontaktdaten:
Re: Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM etc)
1N400x oder auch 1N4148 sind OK
Die Armatur habe ich umgebaut auf Taster und es wird Masse geschaltet.
Die Armatur habe ich umgebaut auf Taster und es wird Masse geschaltet.
- brummbaehr
- Beiträge: 958
- Registriert: 27. Sep 2016
- Motorrad:: Honda CX 500/650
- Wohnort: 41836 Hückelhoven
- Kontaktdaten:
Re: Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM etc)
Auf meiner Tour letzte Woche habe ich noch einen Software-Fehler in dem Ei gefunden.
Wenn man das automatische Abschalten nicht abwartet und nach dem wieder losfahren den Blinker manuell durch Tastendruck abschaltet, dann passiert beim nächsten Tastendruck einfach nix.
Da der Merker für die automatische Abschaltung noch gesetzt ist, wird beim Tastendruck der Blinker gleich wieder ausgeschaltet. Ein weiterer Tastendruck funktioniert dann wieder.
Der Fehler ist nun behoben.
Dann ist mir aber noch etwas anderes aufgefallen.
Wenn man kurz hintereinander erst Rechts und dann Links (oder anders herum) abbiegen muss, dann kann man nicht von Rechts-Blinken direkt auf Links-Blinken umschalten.
Der Tastendruck (Links) schaltet dann den Blinker Rechts Aus. Erst ein weiterer Tastendruck (Links) schaltet dann den Blinker Links Ein. Das ist irgendwie doof...
Ich habe nun die Software so angepasst, das mit dem Tastendruck (Links) direkt umgeschaltet wird auf Links-Blinken.
Das manuelle Ausschalten des Blinkers ist daher nur noch möglich wenn der passende Taster betätigt wird.
Wenn z.B. der rechte Blinker blinkt, dann kann der manuell nur noch mit erneuter Betätigung Rechts abgeschaltet werden.
Ein Tastendruck auf Links schaltet dann um auf Links Blinken.
Wenn man das automatische Abschalten nicht abwartet und nach dem wieder losfahren den Blinker manuell durch Tastendruck abschaltet, dann passiert beim nächsten Tastendruck einfach nix.

Der Fehler ist nun behoben.
Dann ist mir aber noch etwas anderes aufgefallen.
Wenn man kurz hintereinander erst Rechts und dann Links (oder anders herum) abbiegen muss, dann kann man nicht von Rechts-Blinken direkt auf Links-Blinken umschalten.
Der Tastendruck (Links) schaltet dann den Blinker Rechts Aus. Erst ein weiterer Tastendruck (Links) schaltet dann den Blinker Links Ein. Das ist irgendwie doof...
Ich habe nun die Software so angepasst, das mit dem Tastendruck (Links) direkt umgeschaltet wird auf Links-Blinken.
Das manuelle Ausschalten des Blinkers ist daher nur noch möglich wenn der passende Taster betätigt wird.
Wenn z.B. der rechte Blinker blinkt, dann kann der manuell nur noch mit erneuter Betätigung Rechts abgeschaltet werden.
Ein Tastendruck auf Links schaltet dann um auf Links Blinken.
Code: Alles auswählen
/*
Programmierung auf ATTiny85, Pins gemäß Anordnung
13.06.2022
P2 Eingang Blinker Rechts
P3 Eingang Blinker Links
P4 Eingang Neutral/Kupplung
P0 Ausgang Blinker Rechts
P1 Ausgang Blinker Links
*/
#include <Bounce2.h>
#define Switch 0 // 0 --> Tastersteuerung, 1 --> Schalter
#define BLINKPINRIGHT 0 // digitaler Ausgang rechter Blinker
#define BLINKPINLEFT 1 // digitaler Ausgang linker Blinker
#define BUTTONRIGHT 2 // digitaler Eingang rechter Taster
#define BUTTONLEFT 3 // digitaler Eingang linker Taster
#define NEUTRAL 4 // digitaler Eingang Neutral/Kupplung
#define WARNBLINKPRESSTIME 2000 // Zeitdauer Tastendruck um Warnblinken ein zu schalten
#define LONGKEYPRESSTIME 300 // Zeit ab der ein Tastendruck "lang" ist
#define BLINKCOUNT 4 // Anzahl der Blinkimpulse bei kurzem Tastendruck
#define BLINKDELAY 400 // Blinkintervall
#define NEUTRALCOUNT 5 // Anzahl der Blinkimpulse nach dem die Maschine wieder los fährt
Bounce Bleft = Bounce();
Bounce Bright = Bounce();
Bounce Bneutral = Bounce();
void setup()
{
// Eingänge
Bleft.attach(BUTTONLEFT, INPUT_PULLUP);
Bleft.interval(20);
Bright.attach(BUTTONRIGHT, INPUT_PULLUP);
Bright.interval(20);
Bneutral.attach(NEUTRAL, INPUT_PULLUP);
Bneutral.interval(100);
// Ausgänge
pinMode(BLINKPINLEFT, OUTPUT);
pinMode(BLINKPINRIGHT, OUTPUT);
}
void loop()
{
Blinker();
}
//***** Blinker *****
void Blinker()
{
static int blinkstate=0; // Blinkstatus in den untersten 2 Bits
static unsigned long startBlinkMillis=0; // Zeitpunkt beim Setzen des Blinkers
static byte shortButtonPress=false; // Wird true sobald ein kurzer Tastendruck erkannt wurde
static byte longBeamPress=false; // Wird true sobald ein langer Tastendruck erkannt wurde
static boolean blinkPhase=false;
static boolean currentOn=false;
static unsigned long startNeutralMillis;
static boolean Neutral = false;
Bleft.update();
Bright.update();
Bneutral.update();
if (!Switch) // ********* Tastersteuerung ***********
{
//********* Blinker links *************
if (Bleft.fell()) //Blinker links wurde soeben gedrückt
{
startBlinkMillis=millis();
if (blinkstate==0b00 || blinkstate==0b01) // Wenn Blinkstatus "AUS" (13.06.22) oder "Rechts"
blinkstate=0b10; // Blinker Links setzen
else
blinkstate=0b00; // Blinker ausschalten
shortButtonPress = false; // Flag für kurzen Tastendruck löschen
Neutral = false; // 13.06.22 Flag für automatisches Ausschalten löschen
}
//********** Blinker rechts ***********
if (Bright.fell()) //Blinker rechts wurde soeben gedrückt
{
startBlinkMillis=millis();
if (blinkstate==0b00 || blinkstate==0b10) // Wenn Blinkstatus "AUS" (13.06.22) oder "Links"
blinkstate=0b01; // Blinker Rechts setzen
else
blinkstate=0b00; // Blinker ausschalten
shortButtonPress = false; // Flag für kurzen Tastendruck löschen
Neutral = false; // 13.06.22 Flag für automatisches Ausschalten löschen
}
// Sonderfall Warnblinker wenn Links/Rechts länger als WARNBLINKPRESSTIME gedrückt
if (!Bleft.read() || !Bright.read()) // && Bneutral.read())
if ((millis()- startBlinkMillis) > WARNBLINKPRESSTIME)
blinkstate=0b11;
// Sonderfall kurzer Tastendruck beim Links- oder Rechtsblinken
if (((Bright.read() && millis()-startBlinkMillis<LONGKEYPRESSTIME && blinkstate==0b01) || (Bleft.read() && millis()-startBlinkMillis<LONGKEYPRESSTIME && blinkstate==0b10)) && Bneutral.read())
shortButtonPress=true;
// Prüfen, ob nach Einschalten mit kurzem Buttondruck die Blinkdauer abgelaufen ist
if (shortButtonPress && (millis()-startBlinkMillis)>=(BLINKCOUNT*2-1)*BLINKDELAY && (blinkstate==0b01 || blinkstate==0b10))
blinkstate=0b00; // falls ja, Blinken hier automatisch beenden
// Keinen Leerlauf mehr, und Kupplung losgelassen, jetzt nur noch kurz weiter Blinken
if (Bneutral.rose() && blinkstate){
startNeutralMillis=millis();
Neutral = true;
}
if (Neutral && (millis()-startNeutralMillis)>=(NEUTRALCOUNT*2-1)*BLINKDELAY && (blinkstate==0b01 || blinkstate==0b10)){
blinkstate=0b00; // falls ja, Blinken hier automatisch beenden
Neutral = false;
}
if (Bneutral.fell() && blinkstate){ // Wird die Kupplung wieder gezogen, dann Blinken nicht ausschalten
Neutral = false;
shortButtonPress=false;
}
}
else // ********* Schaltersteuerung *********
{
if (!blinkstate)
startBlinkMillis=millis();
//********* Blinker links *************
if (!Bleft.read()) // Blinker links
blinkstate |= 0b10; // Blinker Links setzen
else
blinkstate &= 0b01; // Blinker Links ausschalten
//********** Blinker rechts ***********
if (!Bright.read()) // Blinker rechts
blinkstate |= 0b01; // Blinker Rechts setzen
else
blinkstate &= 0b10; // Blinker Rechts ausschalten
}
if (((millis()-startBlinkMillis)/BLINKDELAY)%2==0)
blinkPhase=true;
else
blinkPhase=false;
// Soll der linke Blinker gerade an sein?
currentOn=bitRead(blinkstate,1) && blinkPhase;
if (digitalRead(BLINKPINLEFT)!=currentOn)
digitalWrite(BLINKPINLEFT,currentOn);
// Soll der rechte Blinker gerade an sein?
currentOn=bitRead(blinkstate,0) && blinkPhase;
if (digitalRead(BLINKPINRIGHT)!=currentOn)
digitalWrite(BLINKPINRIGHT,currentOn);
}
Re: Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM etc)
Danke für die Info. Ich habe das Ei bis jetzt noch nicht eingebaut. Habe mir eine zweite Armatur besorgt, damit ich das in Ruhe machen kann.
VG
Axel
VG
Axel