/*
Am 20.04.24 mit Hardi angepasst. Rückwärtsfahren solange wie Taster gedrückt.
Von Odracir Repahcs am 01.04.2024 auf Facebook gepostet
https://www.facebook.com/groups/800631387836720/permalink/1070476617518861/
Ich habe die Signale der Fernbedienung ausgelesen
Das "Rückwärtsfahrsignal" in der Wiederholrate enorm erhöht (900).
Bibliothek "IRremote" installieren
Pin 5 am Mega verwendet
Wunschliste:
- Feedback LED fürs Rückwärtsfahren
- Taster der das Rückwärtsfahren auslöst
- Sound "Sicherheitspiepsen" beim Rückwärtsfahren: https://www.videvo.net/de/lizenzfreie-soundeffekte/lkw-ruckwarts-piepton/705171/
*/
#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 buttonLosfahren = 4 ; //Taster "+"
const byte buttonAbbremsen = 3 ; //Taster "-"
const byte ledDriveBackwardsPin = A4; //LED Feedback "Anhalten und Rückwärts"
byte buttonStatusDriveBackwards = 0 ;
byte buttonStatusWarnblinker = 0 ;
byte buttonStatusLosfahren = 0 ;
byte buttonStatusAbbremsen = 0 ;
uint8_t Repeats = 0;
bool Old_DriveBackwards = true; // Vorheriger Status des Tasters (nicht gedrückt = HIGH, gedrückt = LOW)
uint32_t StartTimer;
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, (Fahren)
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);
pinMode(buttonAbbremsen, INPUT_PULLUP);
pinMode(buttonLosfahren, INPUT_PULLUP);
}
void loop() {
// Status der Taster einlesen
buttonStatusDriveBackwards = digitalRead(buttonDriveBackwards);
buttonStatusWarnblinker = digitalRead(buttonWarnblinker);
buttonStatusAbbremsen = digitalRead(buttonAbbremsen);
buttonStatusLosfahren = digitalRead(buttonLosfahren);
// Verhalten des Tasters:
//
// ---------------, ,---------------
// | |
// '------------'
// Nicht gedrückt Gehalten Losgelassen
// ^ ^
//
if (Old_DriveBackwards == HIGH && buttonStatusDriveBackwards == LOW) // Taster wird gedrückt
{
// Serial.println("Taster gedrückt");
IrSender.sendNECRaw(rawData03, 0); //Anhalten und Rückwärts
StartTimer = millis();
}
else if (Old_DriveBackwards == LOW && buttonStatusDriveBackwards == HIGH) // Taster wird losgelassen
{
digitalWrite(ledDriveBackwardsPin, LOW);
// Serial.println("Taster losgelassen");
}
else if (buttonStatusDriveBackwards == LOW) // Wenn Taster gehalten wird
{
if (millis() - StartTimer > 92)
{
// Serial.println("Taster gehalten");
digitalWrite(ledDriveBackwardsPin, HIGH); // Kontroll-LED: Taster Rückwärtsfahren gehalten
IrSender.sendNECRepeat();
StartTimer = millis();
}
}
if (buttonStatusWarnblinker == LOW) // Wenn Taster gedrueckt...
{
IrSender.sendNECRaw(rawData12, 0); //Warnblinker
}
else
{
}
if (buttonStatusAbbremsen == LOW) // Wenn Taster gedrueckt...
{
IrSender.sendNECRaw(rawData08, 0); //Abbremsen
}
else
{
}
if (buttonStatusLosfahren == LOW) // Wenn Taster gedrueckt...
{
IrSender.sendNECRaw(rawData05, 0); //Losfahren
}
else
{
}
Old_DriveBackwards = buttonStatusDriveBackwards;
}