Ciao a tutti
premetto che, come da mia presentazione, sono uno zero anzi meno di zero.
Il mio obbietttivo è riuscire a pilotare strisce led bianche e rgb facendo una specie di alba/tramonto.
Sono 5 canali separati che grazie a 5 mosfet piloteranno i vari strip led.
Ad una certa ora impostabile (step 1) vorrei impostare il valore d'intensità del canale 1 - 2 - 3 - 4 e 5 in modo indipendente.
Avrei pensato a 10 step ora per l'accensione e 10 step per lo spegnimento. Faccio un esempio per spiegarmi meglio.
Step1 Ora 07:10 CH1 = 10 CH2 = 10 CH3 = 10 CH4 = 0 CH5 = 0
Step2 Ora 07:20 CH1 = 20 CH2 = 20 CH3 = 15 CH4 = 10 CH5 = 5
Step3 Ora 07:40 CH1 = 30 CH2 = 30 CH3 = 25 CH4 = 20 CH5 = 8
Step4 Ora 08:00 CH1 = 100 CH2 = 150 CH3 = 130 CH4 = 200 CH5 = 255
.... fino a 10 accensione
Step1 Ora 19:00 CH1 = 255 CH2 = 200 CH3 = 100 CH4 = 200 CH5 = 255
Step2 Ora 19:30 CH1 = 150 CH2 = 80 CH3 = 50 CH4 = 70 CH5 = 100
Step3 Ora 20:00 CH1 = 0 CH2 = 0 CH3 = 0 CH4 = 0 CH5 = 0
.... fino a 10 spegnimento
Ho iniziato a mettere giù lo sketch che fa il suo dovere (non c'è uscita e nessun comando) solo uno step orario.
Ora viene il mio dubbio e qui vi chiedo lumi, ho intrapreso la strada giusta ?
Devo fare tutto il codice per i 10 step in accensione e i 10 in spegnimento ? Quanto sarà lungo sto codice ???
C'è un altra via ? o posso ottimizzarlo ?
Allego codice e ora potete massacrami...
Grazie in anticipo a tutti
#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
const int butUp = 8;
const int butDown = 9;
const int enter = 10;
const int butP = 11;
const int butM = 12;
char OraAlba[] = " : CH1:",
canali[] = "CH2: CH3: ",
canali1[] = "CH4: CH5: ";
int i, AlbaH1, AlbaM1, Vch1, Vch2, Vch3, Vch4, Vch5;
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
void setup() {
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
lcd.begin(20, 4);
AlbaH1 = EEPROM.read(15);
AlbaM1 = EEPROM.read(16);
Vch1 = EEPROM.read(17);
Vch2 = EEPROM.read(18);
Vch3 = EEPROM.read(19);
Vch4 = EEPROM.read(20);
Vch5 = EEPROM.read(21);
}
void Blink(){
int j = 0;
while(j < 10 && digitalRead(enter) && digitalRead(butP) && digitalRead(butM)){
j++;
delay(50);}
}
int edit(int x, int y, int parameter){
char text[3];
while(!digitalRead(enter));
while(true){
while(!digitalRead(butP)){
parameter++;
if(i == 0 && parameter > 23)
parameter = 0;
if(i == 1 && parameter > 59)
parameter = 0;
if(i == 2 && parameter > 255)
parameter = 255;
if(i == 3 && parameter > 255)
parameter = 255;
if(i == 4 && parameter > 255)
parameter = 255;
if(i == 5 && parameter > 255)
parameter = 255;
if(i == 6 && parameter > 255)
parameter = 255;
sprintf(text,"%02u", parameter);
lcd.setCursor(x, y);
lcd.print(text);
delay(150);
}
while(!digitalRead(butM)){
parameter--;
if(i == 0 && parameter < 0)
parameter = 23;
if(i == 1 && parameter < 0)
parameter = 59;
if(i == 2 && parameter <= 0)
parameter = 0;
if(i == 3 && parameter <= 0)
parameter = 0;
if(i == 4 && parameter <= 0)
parameter = 0;
if(i == 5 && parameter <= 0)
parameter = 0;
if(i == 6 && parameter <= 0)
parameter = 0;
sprintf(text,"%02u", parameter);
lcd.setCursor(x, y);
lcd.print(text);
delay(150);
}
lcd.setCursor(x, y);
lcd.print(" ");
if(i >= 2) lcd.print(" ");
Blink();
sprintf(text,"%02u", parameter);
lcd.setCursor(x, y);
lcd.print(text);
Blink();
if(!digitalRead(enter)){
i++;
return parameter;
}
}
}
void loop()
{
lcd.clear();
Blink();
while(1){
if(!digitalRead(enter))
{
i = 0;
AlbaH1 = edit(5, 1, AlbaH1);
AlbaM1 = edit(8, 1, AlbaM1);
Vch1 = edit(17, 1, Vch1);
Vch2 = edit(5, 2, Vch2);
Vch3 = edit(15, 2, Vch3);
Vch4 = edit(5, 3, Vch4);
Vch5 = edit(15, 3, Vch5);
EEPROM.write(15, AlbaH1);
EEPROM.write(16, AlbaM1);
EEPROM.write(17, Vch1);
EEPROM.write(18, Vch2);
EEPROM.write(19, Vch3);
EEPROM.write(20, Vch4);
EEPROM.write(21, Vch5);
delay(200);
break;
}
lcd.setCursor(0, 1);
lcd.print("Ora: ");
lcd.print(OraAlba);
lcd.setCursor(0, 2);
lcd.print(canali);
lcd.setCursor(0, 3);
lcd.print(canali1);
}
}