Hallo zusammen,
nachfolgender Sketch funktioniert schon fast. Leider nur fast
Die Funktion alle LEDs an und ausschalten funktioniert nicht.
Im Menu auswählen geht zwar, das LCD Display zeigt auch alles richtig an, nur die LEDs schalten nicht an.
Bei einzelnem Aufruf Menu >> Helligeit >> Wert +- funktionieren diese bzw. ich kann die LEDs einschalten bei Aufruf Menue >> Alle >> Ein oder Aus schalten diese dann alle gemeinsam wieder ab und nicht wieder an.
Leider finde ich den Fehler nicht
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);//Deffinition Display (Adresse,Zeichen,Zeilen)
const unsigned int BUTTON_MENUE_PIN = 12;
const unsigned int BUTTON_WERT_VOR_PIN = 11;
const unsigned int BUTTON_WERT_RUECK_PIN = 10;
const unsigned int ROTE_LED_PIN = 3;
const unsigned int GRUENE_LED_PIN = 5;
const unsigned int BLAUE_LED_PIN = 6;
String menu[3] = {"LED", "Helligkeit", "Alle"};
String leds[3] = {"ROT", "GRUEN", "BLAU"};
String alle[2] = {"EIN", "AUS"};
int menueAuswahl = 0;
int ledAuswahl = 0;
int alleAuswahl = 0;
int helligkeit[3] = {5,5,5};
void setup() {
lcd.init();//Aktivieren LCD Display
lcd.backlight();//Display Licht einschalten
Serial.begin(9600);//serieller Monitor aktiviert//optional
pinMode(BUTTON_MENUE_PIN, INPUT_PULLUP);
pinMode(BUTTON_WERT_VOR_PIN, INPUT_PULLUP);
pinMode(BUTTON_WERT_RUECK_PIN, INPUT_PULLUP);
pinMode(ROTE_LED_PIN, OUTPUT);
pinMode(GRUENE_LED_PIN, OUTPUT);
pinMode(BLAUE_LED_PIN, OUTPUT);
}
//----------------Loop-------------------------------------------------------------
void loop() {
handleButtons(); //Tastendruck prüfen lesen
refreshLeds(); //LEDs setzen
aktualisiereLcd(); //LCD Anzeige aktualisieren
delay(100);
}
//---------------Buttons Abfrage--------------------------------------------------------------
void handleButtons(){
if(digitalRead(BUTTON_MENUE_PIN) == LOW){ //Taster für Menuwechsel auf Status überprüfen
Serial.print("Menu-wechsel: ");
menuepunktWechseln();
delay(300);
}else if(digitalRead(BUTTON_WERT_VOR_PIN) == LOW){ //Taster für Aufwärts auf Status überprüfen
Serial.print("Wert vor: ");
wertauswahlVor();
delay(100);
}else if(digitalRead(BUTTON_WERT_RUECK_PIN) == LOW){ //Taster für Abwärts auf Status überprüfen
Serial.print("Wert zurueck: ");
wertauswahlRueck();
delay(100);
}
}
//---------------Menu Unterpunkte wechseln- aufwärts-----------------------------------------
void menuepunktWechseln(){ //Menuepunkt wechseln
if(menueAuswahl <2){
menueAuswahl++;
}else{
menueAuswahl=0; //Wenn im letzten Menuepunkt angekommen, von vorne beginnen
}
Serial.println(menueAuswahl);
}
void wertauswahlVor(){ //Wertauswahl für Led vorwärts
switch (menueAuswahl){
case 0:
if(ledAuswahl <2){
ledAuswahl++;
} else {
ledAuswahl=0; //Wenn im letzten Menuepunkt angekommen, von vorne beginnen
}
Serial.println(ledAuswahl);
break;
case 1:
if(helligkeit[ledAuswahl] <5){ //Werteauswahl für Menuepunkt Helligkeit
helligkeit[ledAuswahl]++;
}
Serial.println(helligkeit[ledAuswahl]);
break;
case 2:
if(alleAuswahl < 1) { //Werteauswahl für Menuepunkt Alleauswahl
alleAuswahl++;
} else {
alleAuswahl= 0; //Wenn im letzten Menuepunkt angekommen, von vorne beginnen
}
schalteAlle();
Serial.println(alleAuswahl);
break;
}
}
//------------Menue Unterpunkte wechseln abwärts---------------------------------
void wertauswahlRueck(){
switch(menueAuswahl){
case 0:
if(ledAuswahl >0 ){
ledAuswahl--;
} else {
ledAuswahl=2; //Wenn im letzten Menuepunkt angekommen, von vorne beginnen
}
Serial.println(ledAuswahl);
break;
case 1:
if(helligkeit[ledAuswahl] >0){ //Werteauswahl für Menuepunkt Helligkeit
helligkeit[ledAuswahl]--;
}
Serial.println(helligkeit[ledAuswahl]);
break;
case 2:
if(alleAuswahl >0 ){ //Werteauswahl für Menuepunkt Alleauswahl
alleAuswahl--;
} else {
alleAuswahl=1; //Wenn im letzten Menuepunkt angekommen, von vorne beginnen
}
schalteAlle();
Serial.println(alleAuswahl);
break;
}
}
//------------LCD Anzeige Helligkeit der LEDs anzeigen aktualisieren
void aktualisiereLcd(){
lcd.setCursor(0,0);
lcd.print("R: "); //LCD rot
lcd.print(helligkeit[0]); //helligkeit dazu
lcd.print(" ");
lcd.setCursor(5,0);
lcd.print("G: "); //LCD Gruen
lcd.print(helligkeit[1]); //helligkeit dazu
lcd.print(" ");
lcd.setCursor(10,0);
lcd.print("B: "); //LCD Blau
lcd.print(helligkeit[2]); //helligkeit dazu
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(menu[menueAuswahl]); //Anzeige Menukategorie und Status dazu
lcd.print(": ");
switch(menueAuswahl){
case 0:
lcd.print(leds[ledAuswahl]);
break;
case 1:
lcd.print(helligkeit[ledAuswahl]);
break;
case 2:
lcd.print(alle[alleAuswahl]);
break;
}
lcd.print(" ");
}
//------------Schaltung für alle LEDs gemeinsam
//funktioniert noch nicht nach ausschalten schaltet nicht mehr ein
void schalteAlle(){
if(alleAuswahl == "Ein" ){
helligkeit[0] = 5;
helligkeit[1] = 5;
helligkeit[2] = 5;
}else{
helligkeit[0] = 0;
helligkeit[1] = 0;
helligkeit[2] = 0;
}
}
//-------------LEDs Helligeit zuordnen und schalten
void refreshLeds(){
analogWrite(ROTE_LED_PIN, map(helligkeit[0],0,5,0,255)); //LED entsprecht der gewählzen Helligkeit schalten
analogWrite(GRUENE_LED_PIN, map(helligkeit[1],0,5,0,255)); //[zugewiesene Auswahl]Bereich 0, bis 5, auf eine Skalierung von 0, bis 255
analogWrite(BLAUE_LED_PIN, map(helligkeit[2],0,5,0,255));
}