- Registriert
- 08.08.2007
- Beiträge
- 1.949
So, nachdem ich den Servosteller auch noch ein bisschen getunt habe konnte ich das Programm auc gut testen.
Der Baustein ist für ein Bremslicht & Rüchfahrscheinwerfer & Warnton. Die Pinbelegung ist in den Kommentaren mit drin.
Der Baustein ist für ein Bremslicht & Rüchfahrscheinwerfer & Warnton. Die Pinbelegung ist in den Kommentaren mit drin.
Code:
// Schaltmodul über RCKanal mit Bremslicht und Rückfahrscheinwerfer und Rückfahrwarner
// für Attiny 85-20 mit 8 MHz
const byte PIN_RC = 1; // PB1 ist an pin 6 - wo das Empfängersignal eingelesen wird!!!!
volatile int RcValue; // Eingelesener Wert direkt aus dem RAM w.g. volatile)
int timer_loop = 0; //Schleife bis LED aus
boolean Null = 0; // Nullstellung wird erkannt
boolean vorher_Null = 0; // Nullstellung vorher
const byte LED=3; // PB3 ist an pin 2 - Rückfahr LED weiß
const byte LEDrt=4; // PB4 ist an pin3 - Bremslicht rot
const byte speakerPin = 0; // PB0 ist an pin 5 (PWM) - Lautsprecher
int frequency = 1300; // 1300Hz
int duration = 400; // Dauer des Tons
int ton_loop = 0; // Intervallzeit für den Ton
void setup()
{
pinMode (LED, OUTPUT); // Rückfahrlicht
pinMode (LEDrt, OUTPUT); // Bremslicht LED
pinMode(PIN_RC, INPUT); // Eingang für Empfängersignal an Pin 2
digitalWrite(PIN_RC, HIGH); // pull-up Widerstand am Eingang
}
void loop()
{
RcValue = pulseIn(PIN_RC, HIGH, 100000); // Aktuellen RC-Wert vom Empfänger einlesen, HIGH = Flanke, 100000 = Timeout
if (RcValue < 1420) {
digitalWrite (LED,HIGH); // Rückfahrscheinwerfer ein
ton_loop = ton_loop + 1; // als Ersatz für den Pausetimer gibt es dises Schleife
if (ton_loop <=1) { // am Anfang Ton einschalten
tone(speakerPin, frequency, duration); // 400 ms Ton ausgeben
}
if (ton_loop == 60) { // Intervallzeit für den Ton
ton_loop = 0;} // wenn Intervall voll, Loop wieder zurück setzen
}
if (RcValue >1451) {
digitalWrite (LED,LOW); // Rückfahrscheinwerfer aus
ton_loop = 0; // Ton_loop aus
}
if ((RcValue >1450) && (RcValue <1550)) {// Abfrage Nullstellung
Null = true;}
if (vorher_Null == false && Null == true) { //vorher keine Null -> jetzt Null-> Bremslicht an
digitalWrite (LEDrt,HIGH);
timer_loop = 0; // timer auf 0 setzen
}
if (timer_loop == 200 || Null == false) { // wenn timer = 200 -> 10s oder wieder FWD bzw RVS, dann Bremslicht aus
digitalWrite (LEDrt,LOW);
}
vorher_Null = Null; // alten Null Wert speichern
Null = false;
timer_loop = timer_loop +1; // Timer um 1 hochzählen
if (timer_loop == 210) { // bei 210 Timer löschen, sonst gibt es einen Überlauf!
timer_loop = 0;}
}