Moin moin zusammen,
ich habe vor ca. einer Woche angefangen mich mit dem Thema Arduino etc. zu beschäftigen, um ein kleines Privatprojekt realisieren zu können.
Ich habe mir mit einem Nano eine Steuerung für folgender Funktionen gebaut:
- Öffnen/Schliessen einer Klappe über einen DC Motor (Exup) [L293D]
- Öffnen/Schliessen eines Stromkreislaufes (Scheinwerfer zuschalten) [1-Relais 5V KY-019]
Für beide Funktionen verwende ich einen simplen Taster und eine Status-LED, welche mir den aktuellen Stand anzeigt. Die Werte (ob offen oder geschlossen) speichere ich im EEPROM, um diese beim erneuten starten wiederherzustellen.
Der Code steht soweit (beruflich habe ich etwas mit JS/PHP etc. zu tun, was mir hierbei sehr geholfen hat) und es scheint auch alles wie gewünscht zu funktionieren. Testaufbau mit allen Komponenten und verschiedenen Testdurchläufen gemacht und bis jetzt alles top!
Nun würde ich diesen Code gerne von euch checken lassen, ob ich etwas besser schreiben könnte oder ob es potentielle Fehlerquellen gibt.
#include <EEPROM.h>
#include <OneButton.h>
const int shutterButtonPin = 10; // Taster für Klappensteuerung
const int shutterLedPin = 12; // Status-LED für Klappensteuerung
const int shutterDuration = 1000; // Dauer zum öffnen/schliessen der Klappe
const int shutterState = 0; // Klappenstatus : [0 ] Geschlossen [1] Offen
const int headlightButtonPin = 13; // Taster für Scheinwerfer
const int headlightLedPin = 2; // Status-LED für Scheinwerfer
const int headlightState = 0; // Scheinwerferstatus : [0 ] Aus [1] An
const int headlightRelaisPin = 4; // Relais für Scheinwerfer
#define shutterOpen 6 // H-Brücke : Klappe öffnen
#define shutterClose 8 // H-Brücke : Klappe schliessen
OneButton shutterButton(shutterButtonPin, false); // OneButton : Klappensteuerung
OneButton headlightButton(headlightButtonPin, false); // OneButton : Scheinwerfer
void setup() {
pinMode(shutterButtonPin, INPUT);
pinMode(shutterLedPin, OUTPUT);
pinMode(shutterButtonPin, INPUT);
pinMode(headlightLedPin, OUTPUT);
pinMode(headlightRelaisPin, OUTPUT);
digitalWrite(shutterOpen, LOW);
digitalWrite(shutterClose, LOW);
digitalWrite(headlightsToggle, LOW);
shutterButton.attachClick(closeShutter); // Regulärer Taster-Druck : Klappe schliessen
shutterButton.attachDoubleClick(openShutter); // Doppelter Taster-Druck : Klappe öffnen
headlightButton.attachClick(headlightsToggle); // Regulärer Taster-Druck : Scheinwerfer an/aus
// Prüfen ob die Statuswerte im EEPROM vorhanden sind
if ( EEPROM.read(shutterState) != 0 || EEPROM.read(shutterState) != 1 ) { // Klappensteuerung : Statuswert im EEPROM vorhanden
EEPROM.write(shutterState, 0); // Klappensteuerung : Standard-Statuswert im EEPROM anlegen
}
if ( EEPROM.read(headlightState) != 0 || EEPROM.read(headlightState) != 1 ) { // Scheinwerfer : Statuswert im EEPROM vorhanden
EEPROM.write(headlightState, 0); // Scheinwerfer : Standard-Statuswert im EEPROM anlegen
}
// Klappensteuerung
if ( EEPROM.read(shutterState) == 1 ) { // Klappe war offen : 1
digitalWrite(shutterLedPin, HIGH); // Status-LED aktivieren
} else { // Klappe war geschlossen : 0
digitalWrite(shutterLedPin, LOW); // Status-LED deaktivieren
}
// Scheinwerfer
if ( EEPROM.read(headlightState) == 1 ) { // Scheinwerfer waren an : 1
digitalWrite(headlightLedPin, HIGH); // Status-LED aktivieren
digitalWrite(headlightRelaisPin, HIGH); // Relais einschalten
} else { // Scheinwerfer waren aus : 0
digitalWrite(headlightLedPin, LOW); // Status-LED deaktivieren
digitalWrite(headlightRelaisPin, LOW); // Relais ausschalten
}
}
void loop() {
shutterButton.tick();
headlightButton.tick();
delay(50);
}
// Klappensteurung : Schliessen
void closeShutter() { // 1x Betätigung des Tasters zum schliessen
if ( EEPROM.read(shutterState) == 1 ) { // Wenn geöffnet -> Schliessen
EEPROM.write(shutterState, 0); // EEPROM : Klappenstatus : Geschlossen
digitalWrite(shutterLedPin, LOW); // Status-LED deaktivieren
digitalWrite(shutterOpen, LOW); // Exup-Eingang 1 : Stop
digitalWrite(shutterClose, HIGH); // Exup-Eingang 2: Start
delay(shutterDuration); // Dauer des Exup-Betriebs
digitalWrite(shutterClose , LOW); // Exup-Eingang 2 : Stop
delay(250);
}
}
// Klappensteurung : Öffnen
void openShutter() { // 1x Betätigung des Tasters zum öffnen
if ( EEPROM.read(shutterState) == 0 ) { // Wenn geschlossen -> Öffnen
EEPROM.write(shutterState, 1); // EEPROM : Klappenstatus : Offen
digitalWrite(shutterLedPin, HIGH); // Status-LED aktivieren
digitalWrite(shutterOpen, HIGH); // Exup-Eingang 1 : Start
digitalWrite(shutterClose, LOW); // Exup-Eingang 2 : Stop
delay(shutterDuration); // Dauer des Exup-Betriebs
digitalWrite(shutterOpen, LOW); // Exup-Eingang 1 : Stop
delay(250);
}
}
// Scheinwerfer : Einschalten / Ausschalten
void headlightsToggle() { // Betätigung des Tasters für an/aus
if ( EEPROM.read(headlightState) == 1 ) { // Wenn an -> Ausschalten
EEPROM.write(headlightState, 0); // EEPROM : Scheinwerfer : Aus
digitalWrite(headlightLedPin, LOW); // Status-LED deaktivieren
digitalWrite(headlightRelaisPin, LOW); // Ralais : Aus
delay(250);
} else { // Wenn aus -> Einschalten
EEPROM.write(headlightState, 1); // EEPROM : Scheinwerfer : Ein
digitalWrite(headlightLedPin, HIGH); // Status-LED aktivieren
digitalWrite(headlightRelaisPin, HIGH); // Ralais : An
delay(250);
}
}
Ich hoffe, es ist alles verständlich und freue mich auf Feedback!
Gruß, YF88