Hallo Leute!
Ich habe mir seinerzeit ein Programm geschrieben, welches mit einem Taster eine LED-Leiste (über ein Solid State Relais SSR-25 DD) Ein-/Ausschaltet und heller oder dunkler dimmt.
Für die Profis unter Euch:
sicher nicht „schön“ und übersichtlich / kurz geschrieben, aber es ist selber gestrickt und funktioniert!! Ist unten angehängt.
Ich verwende die Analogeingänge für die Taster, weil mir dann die pins für das Gesamtprojekt ausreichen.
Jetzt möchte ich das Programm für 3 LED-Leisten mit jeweils einem Taster verwenden.
Muss ich das Programm 3x in den Arduino NANO schreiben für A1/D1, A2/D2, A3/D3 oder gibt es irgendwie folgenden Weg:
Das Ein/Aus/Dimmer-Programm wird als void Funktion aufgerufen. (Das funktioniert !)
Im laufenden Haupt Programm entscheidet eine if-Funktion, ob die void Routine die pins A1/D1, A2/D2, A3/D3 anspricht?
Alle meine Versuche ( #define / integer) sind bisher gescheitert
Gruß Martin
// Jb läuft !! / 14.11.2023 Board "CONTROLLINO MAXI", Port X, Programmer: AVRISP mkll
// Variablen deklarieren : Integer (-32.767 bis 32.768)/ Byte (0-255)
int LED_Status = -1; // "LED-Status" als Integer -> -1 = Aus / +1 = Ein
int Helligkeit = 120; // "Helligkeit" als Integer und mit Wert für Helligkeit der LED beim Start deklarieren.
byte Lock = 0; // "Lock" als Byte - Bei Wert = 1 -> Dimmen sperren
int Up_Down = 1; // Heller (1) oder Dunkler (-1) dimmen - Bei Progrann Start Helligkeit min -> also zuerst heller
#include <Controllino.h> // Usage of CONTROLLINO library
#include <LiquidCrystal.h>; // include the library code
LiquidCrystal lcd(9, 10, 11, 12, 13, 42); // initialize the library Syntax: LiquidCrystal lcd(rs, enable, d4, d5, d6, d7)
void setup()
{
pinMode(8, OUTPUT); // pin 8 (PWM) als output definieren
Serial.begin(9600); // initialize serial communication at 9600 bits per second
lcd.begin(16, 2); //Display mit 16 Zeichen und 2 Zeilen definieren
lcd.clear();
lcd.setCursor(0,0);
lcd.print("WoWa Rev.: 5");
lcd.setCursor(0,1);
lcd.print("LED Beleuchtung");
delay(3000); // warten (1.000 = one second)
}
void loop() {
Serial.print(LED_Status); Serial.print(" "); Serial.println(Helligkeit);
LCD_Anzeige();
if (analogRead(A4) > 500) // wenn Taster an A4 gedrückt
{
delay(500); // 500 Millisekunden warten um den Taster zu entprellen
if ((analogRead(A4) > 500) && (LED_Status == 1)) // wenn Taster an A4 weiter gedrückt und LED-Status =1 (LED an)
{
while (analogRead(A4) > 500)
{Helligkeit = Helligkeit + Up_Down;
delay(20); // Dimm Geschwindigkeit: 245 Schritte in 5.000 Mili Sek bzw. in 5 Sec. ändern ( 5.000 / 245 = 20 )
LCD_Anzeige();
if (Helligkeit > 180) {Helligkeit = 180; } // Wert Helligkeit max. begrenzen
if (Helligkeit < 90) {Helligkeit = 90; } // Wert Helligkeit min. begrenzen
analogWrite(8, Helligkeit);}
Up_Down = Up_Down * -1; // Nach Ende Dimmen die Richtung heller / dunkler ändern
LED_Status = LED_Status * -1; // LED Status toggeln da anschließen nochmal toggle erfolgt
}
LED_Status = LED_Status * -1; // LED Status toggeln
}
if (LED_Status > 0) // LED Ein
{ analogWrite(8, Helligkeit); } // LED Leiste An mit Wert Helligkeit
if (LED_Status < 0) // LED Aus
{ analogWrite(8, 0); } // Ausgabe Wert 0 an pin3 - LED Leiste aus
}
// Ende void loop()
void LCD_Anzeige()
{
lcd.setCursor(0,0); lcd.print("Helligkeit "); lcd.print(Helligkeit); lcd.print(" ");
lcd.setCursor(0,1); lcd.print("Status LED "); lcd.print(LED_Status); lcd.print(" ");
}