Schon von Anfang an interessiert mich das Rückwärtsfahren der CarMotion-LKW's. Diese Funktion kann man mit der IR-Fernbedienung auslösen.
Ich hätte gerne das "Rückwärtsfahren" in der DCC-IR-Steuerung integriert, aber der Viessmann-Support ziert sich noch.
Beim Bahnpark Augsburg würde ich nämlich gerne unter den Kran fahren und stoppen. Auf meinem Testmodel kann ich dann vorwärts weiterfahren.
In Augsburg geht das aber nicht. Also wäre der Wunsch:
- Ich drücke einen Taster und halte diesen fest
- Der LKW setzt den Warnblinker
- per Servo werden "Bordsteine" hochgefahren damit der LKW beim Rückwärtsfahren geführt wird (ich denke da an die MobaLedLib)
- das nervige Piepsen wird per Sound aktiviert (ich denke immer noch an die MobaLedLib)
- der LKW fährt so lange zurück wie ich den Taster gedrückt halte
- ich lasse den Taster los
- der Bordstein fährt wieder herunter
- der LKW kann vorwärts nach rechts abbiegen und weiterfahren
Letzte Woche konnte jemand die IR-Befehle mittels Arduino und IR-Sendediode generieren und hat diese Info in der Facebookgruppe gepostet. Ich war begeistert!
Mittels dem "Multi-function Tester-T7" kann man die IR-Signale auslesen, aber diese dann richtig in den Sketch zu bringen - daran war ich gescheitert. Z.B.:
Mit Hilfe des Facebook-Hinweis konnte ich heute zum ersten Mal per Tastendruck den LKW rückwärts fahren lassen.
Ich habe folgenden Testaufbau:
- Taster gelb: Ein-/Ausschalten der Warnblinker (war eher als Kontrolle gedacht)
- Taster grau: Aktivieren der Rückwärtsfahrt. Bei der Fernbedienung muß man die Taste gedrückt halten.
- grüne LED: Die soll leuchten, wenn die IR-Diode das "Rückwärtsfahren" sendet. So als Kontrolle
So ganz funktioniert mein Sketch noch nicht
- die grüne LED macht fast nichts
- das Rückwärtsfahren reagiert nur auf die abfallende Flanke des Tasters und dann fährt der LKW eine bestimmte Zeit rückwärts
Aber hey, das ist doch schon mal was!
Vielleicht können die Arduino-Profis mir ein paar Tipps geben was ich verbessern kann:
Zitat
#include <IRremote.hpp>
const int SenderPin = 5; //Pin für IR-Diode
const byte buttonDriveBackwards = 8 ; //Taster "Anhalten und Rückwärts"
const byte buttonWarnblinker = 9 ; //Taster "Warnblinker"
const byte ledDriveBackwardsPin = A4; //LED Feedback "Anhalten und Rückwärts"
byte buttonStatusDriveBackwards = 0 ;
byte buttonStatusWarnblinker = 0 ;
uint8_t Repeats = 0;
uint32_t rawData01 = 0xBA45FF00; //Fahrzeug aus
uint32_t rawData02 = 0xBF40FF00; //Beschleunigen
uint32_t rawData03 = 0xBC43FF00; //Anhalten und Rückwärts
uint32_t rawData04 = 0xF807FF00; //Blinken links
uint32_t rawData05 = 0xEA15FF00; //losfahren
uint32_t rawData06 = 0xF609FF00; //Blinken rechts
uint32_t rawData07 = 0xE916FF00; //Hauptlichter schalten
uint32_t rawData08 = 0xE619FF00; //Abbremsen
uint32_t rawData09 = 0xF20DFF00; //Akkuanzeige
uint32_t rawData10 = 0xF30CFF00; //Fernlicht
uint32_t rawData11 = 0xE718FF00; //Rundumlicht
uint32_t rawData12 = 0xA15EFF00; //Warnblinker
uint32_t rawData13 = 0xF708FF00; //Taste 4
uint32_t rawData14 = 0xE31CFF00; //Taste 5
uint32_t rawData15 = 0xA55AFF00; //Taste 6
uint32_t rawData16 = 0xBD42FF00; //Taste 7
uint32_t rawData17 = 0xAD52FF00; //Taste 8
uint32_t rawData18 = 0xB54AFF00; //Taste 9
uint32_t rawData19 = 0xBB44FF00; //Taste Test
uint32_t rawData20 = 0xB847FF00; //Taste MENU
void setup() {
Serial.begin(115200);
pinMode(SenderPin, OUTPUT);
pinMode(ledDriveBackwardsPin, OUTPUT);
IrSender.begin(SenderPin,DISABLE_LED_FEEDBACK,0);
pinMode(buttonDriveBackwards, INPUT_PULLUP);
pinMode(buttonWarnblinker, INPUT_PULLUP);
}
void loop() {
// Status der Taster einlesen
buttonStatusDriveBackwards = digitalRead(buttonDriveBackwards);
buttonStatusWarnblinker = digitalRead(buttonWarnblinker);
if (buttonStatusDriveBackwards == LOW) // Wenn Taster gedrueckt...
{
IrSender.sendNECRaw(rawData03, 5500); //Anhalten und Rückwärts, 6000=17cm, 5500=19,5cm
digitalWrite(ledDriveBackwardsPin, HIGH);
}
else
{
digitalWrite(ledDriveBackwardsPin, LOW);
}
if (buttonStatusWarnblinker == LOW) // Wenn Taster gedrueckt...
{
IrSender.sendNECRaw(rawData12, Repeats); //Warnblinker
// digitalWrite(ledDriveBackwardsPin, HIGH);
}
else
{
// digitalWrite(ledDriveBackwardsPin, LOW);
}
}