//Lichtschaltung mit Fahrlicht/Fernlicht(PWM), Bremslicht über Magnetschaltern
// Blinker mit Millis, Hoch-/runterschalten mit 250ms verzögerung
//mit servo-ansteurung, noch ohne servo-setup
#include <Servo.h>
#include <Wire.h> //Wire.h Bibliothek einbinden
#include <LiquidCrystal_I2C.h> //LiquidCrystal_I2C.h Bibliothek
Servo Schaltservo; // servo ist schaltservo
int Servowinkel = 1;
int Schaltvariable = 0;
int Gangnummer = 0;
int Servoposition[] = {1, 25, 50, 75, 100, 125, 150, 175} ; //array servopositionen
LiquidCrystal_I2C lcd(0x23, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
//Hier wird lcd benannt, die Adresse angegeben „0x23“ und die
//Pinnbelegung durch das I²C Modul angegeben
//millis
unsigned long previousMillis2 ; // Variable zum Speichern des alten Wertes
unsigned long interval2 ; // Variable für gewünschte Zeitdauer (1sek=1000)
int t3 = 250; // t3 zeit
unsigned long previousMillis ; // Variable zum Speichern des alten Wertes
unsigned long interval ; // Variable für gewünschte Zeitdauer (1sek=1000)
int t = 150; // t auf AUSzeit
int t2 = 500; // t2 auf EINzeit
//taster/schalter/eingänge bezeichnung/pin
int Fahrlicht_t = 36; //schalter
int Fernlicht_t = 34; //taster
int MaginPin1 = 22; //taster
int MaginPin2 = 38; //taster
int Hupe_t = 28; //taster
int Blinker_li_t = 32; //taster
int Blinker_re_t = 30; //taster
int Hochschalten_t = 24; //taster hochschalten
int Runterschalten_t = 26; //taster runterschalten
//ausgänge bezeichnung/pin
int Frontlicht_led = 2; //PWM_led
int Ruecklicht_led = 3; //PWM_led
int Blinker_li_led = 4;
int Blinker_re_led = 5;
int Hupe_led = 6; //über FET
void setup() {
//lcd
lcd.begin(20, 4); //Display starten, Größe Display 20 4
lcd.backlight(); //Beleuchtung Display einschalten
Schaltservo.attach(7); // attaches the servo on pin 7 to the servo object
Schaltservo.write(0);
pinMode(Hochschalten_t, INPUT_PULLUP);
pinMode(Runterschalten_t, INPUT_PULLUP);
//Fahrlicht
pinMode(Fahrlicht_t, INPUT_PULLUP);
pinMode(Fernlicht_t, INPUT_PULLUP);
pinMode(MaginPin1, INPUT_PULLUP);
pinMode(MaginPin2, INPUT_PULLUP);
pinMode(Frontlicht_led, OUTPUT);
pinMode(Ruecklicht_led, OUTPUT);
//Blinker
pinMode(Blinker_li_t, INPUT_PULLUP);
pinMode(Blinker_re_t, INPUT_PULLUP);
pinMode(Blinker_li_led, OUTPUT);
pinMode(Blinker_re_led, OUTPUT);
//Hupe
pinMode(Hupe_t, INPUT_PULLUP);
pinMode(Hupe_led, OUTPUT);
}
void loop() {
//display initiieren
lcd.setCursor(0, 0); //Text beim 1. Zeichen 1. Reihe beginnen
lcd.print("RBS"); //Display 1 soll oben „Display 1“ anzeigen
lcd.setCursor(5, 0); //Text beim 1. Zeichen 2. Reihe beginnen
//Gangschaltung tasten
if (digitalRead(Hochschalten_t) == LOW && Gangnummer < 7 ) {
if (millis() - previousMillis2 > interval2 ) { //millis zählen
previousMillis2 = millis() ; //millis setzen
interval2 = t3 ; //AUSzeit
Gangnummer = ++Schaltvariable ; //Gang hochschalten
}
}
if (digitalRead(Runterschalten_t) == LOW && Gangnummer > 0 ) {
if (millis() - previousMillis2 > interval2 ) { //millis zählen
previousMillis2 = millis() ; //millis setzen
interval2 = t3 ; //AUSzeit
Gangnummer = --Schaltvariable ; //Gang runterschalten
}
}
lcd.println("Gang:");
lcd.println(Gangnummer);
Schaltservo.write(Servoposition[Gangnummer]);
delay(200);
//Fahrlichtschaltung
if (digitalRead(Fahrlicht_t) == LOW) {
analogWrite(2, 80); //PWMled auf (pin2, wert80)
analogWrite(3, 80); //PWMled auf (pin3, wert80)
}
else {
analogWrite(2, 0); //PWMled auf (pin2, wert0)
analogWrite(3, 0); //PWMled auf (pin3, wert0)
}
//Fernlichtschaltung
if (digitalRead(Fernlicht_t) == LOW) {
analogWrite(2, 255); //PWMled auf (pin2, wert255)
}
else {
if (digitalRead(Fahrlicht_t) == LOW)
{
analogWrite(2, 80); //PWMled auf (pin2, wert80)
}
else {
analogWrite(2, 0); //PWMled auf (pin2, wert0)
}
}
//Bremslichtschaltung
if (digitalRead(MaginPin1) == LOW || digitalRead(MaginPin2) == LOW) {
analogWrite(3, 255); //PWMled auf (pin3, wert255)
}
else {
if (digitalRead(Fahrlicht_t) == LOW) {
analogWrite(3, 80); //PWMled auf (pin3, wert80)
}
else {
analogWrite(3, 0); //PWMled auf (pin3, wert0)
}
}
//Blinkerschaltung
//Blinker_links
if (digitalRead(Blinker_li_t) == LOW) {
if (millis() - previousMillis > interval ) { //millis zählen
previousMillis = millis() ; //millis setzen
if ( digitalRead(Blinker_li_led) == HIGH ) { //wenn led == an
interval = t ; //AUSzeit
digitalWrite(Blinker_li_led, LOW); //led aus
}
else {
interval = t2 ; //EINzeit
digitalWrite(Blinker_li_led, HIGH) ; //led an
}
}
}
if (digitalRead(Blinker_li_t) == HIGH) {
digitalWrite(Blinker_li_led, LOW) ; //led aus
}
//Blinker_rechts
if (digitalRead(Blinker_re_t) == LOW) {
if (millis() - previousMillis > interval ) { //millis zählen
previousMillis = millis() ; //millis setzen
if ( digitalRead(Blinker_re_led) == HIGH ) { //wenn led == an
interval = t ; //AUSzeit
digitalWrite(Blinker_re_led, LOW); //led aus
}
else {
interval = t2 ; //EINzeit
digitalWrite(Blinker_re_led, HIGH) ; //led an
}
}
}
if (digitalRead(Blinker_re_t) == HIGH) {
digitalWrite(Blinker_re_led, LOW) ; //led aus
}
//Hupenschaltung
if (digitalRead(Hupe_t) == LOW) {
digitalWrite(Hupe_led, HIGH);
}
else
{
digitalWrite(Hupe_led, LOW);
}
}