Ciao a tutti, sono un nuovo utente alle prime armi con arduino.
Sto realizzando una plafoniera per un acquario con tre cob led da 120W con 5 ch ciascuno.
Ho realizzato la plafoniera controllandola con arduino M0
lo schema sostanzialmente è il seguente:
ci sarà un generatore 5V dc da 5ch che moduleranno tale tensione in base a delle esigenze e tempistiche prestabilite che verranno date in ingresso ad arduino.
Non avendo ancora disponibile tale scheda esterna, per adesso ho realizzato con un potenziometro alimentato dallo stesso arduino a 5V e programmato per il test un solo ingresso (su ingresso A1) che accende tutti i canali secondo valori prestabiliti nel seguente modo:
int LED1 = 3;
int LED2 = 4;
int LED3 = 5;
int LED4 = 8;
int LED5 = 9;
int POT = A1;
int analogreadvalue;//usa questa variabile per leggere 0,5v del potenziometro sul pin a1
int analogwritevalue;//usa questa variabile per scrivere 0,5v sui led
float Voltage;
#define LEDBUTTON 13 // LED collegato al pin digitale 13
#define BUTTON 7 // pin di input dove è collegato il pulsante
int val = 0; // si userà val per conservare lo stato del pin di input
int stato = 0; // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led acceso
void setup() {
Serial.begin (9600);
pinMode (POT, INPUT);
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
pinMode (LED3, OUTPUT);
pinMode (LED4, OUTPUT);
pinMode (LED5, OUTPUT);
pinMode(LEDBUTTON, OUTPUT); // imposta il pin digitale come output
pinMode(BUTTON, INPUT); // imposta il pin digitale come input
}
void loop() {
delay (300);
val = digitalRead(BUTTON); // legge il valore dell'input e lo conserva
// controlla che l'input sia HIGH (pulsante premuto)
// e cambia lo stato del led
if (val == HIGH) {
stato = 1 - stato;
}
if (stato == 1) {
digitalWrite(LEDBUTTON, HIGH); // accende il led pulsante
analogreadvalue = 1023;
analogwritevalue = map(analogreadvalue, 0, 1023, 0, 255); //converte in scala 255
analogWrite(LED1, analogwritevalue * 25 / 100); // BIANCO FREDDO
analogWrite(LED2, analogwritevalue * 35 / 100); // BLU
analogWrite(LED3, analogwritevalue * 20 / 100); // UV
analogWrite(LED4, analogwritevalue * 35 / 100); // Blu scuro
analogWrite(LED5, analogwritevalue * 45 / 100); // BIANCO CALDO
}
else {
digitalWrite(LEDBUTTON, LOW); //spegne il led pulsante
analogreadvalue = analogRead (POT); //questo legge il valore dal potenziometro:
if (analogreadvalue <= 20)
analogwritevalue = 0;
else
analogwritevalue = map(analogreadvalue, 0, 1023, 0, 255); //converte in scala 255
analogWrite(LED1, analogwritevalue * 45 / 100); // BIANCO FREDDO
analogWrite(LED2, analogwritevalue * 30/ 100); // BLU
analogWrite(LED3, analogwritevalue * 5 / 100); // UV
analogWrite(LED4, analogwritevalue * 30 / 100); // Blu scuro
analogWrite(LED5, analogwritevalue * 25 / 100); // BIANCO CALDO
}
delay (100);
}
e funziona tutto correttamente.
questo invece è lo scratch che dovrebbe gestire i 5ch controllati separatamente da esterno:
int LED1 = 3;
int LED2 = 4;
int LED3 = 5;
int LED4 = 8;
int LED5 = 9;
int POT1 = A1;
int POT2 = A2;
int POT3 = A3;
int POT4 = A4;
int POT5 = A5;
int analogreadvalueA1;//usa questa variabile per leggere 5v sul pin A1
int analogwritevalueA1;//usa questa variabile per scrivere 5v su LED1
int analogreadvalueA2;//usa questa variabile per leggere 5v sul pin A2
int analogwritevalueA2;//usa questa variabile per scrivere 5v su LED2
int analogreadvalueA3;//usa questa variabile per leggere 5v sul pin A3
int analogwritevalueA3;//usa questa variabile per scrivere 5v su LED3
int analogreadvalueA4;//usa questa variabile per leggere 5v sul pin A4
int analogwritevalueA4;//usa questa variabile per scrivere 5v su LED4
int analogreadvalueA5;//usa questa variabile per leggere 5v sul pin A5
int analogwritevalueA5;//usa questa variabile per scrivere 5v su LED5
float Voltage;
#define LEDBUTTON 13 // LED collegato al pin digitale 13
#define BUTTON 7 // pin di input dove è collegato il pulsante
int val = 0; // si userà val per conservare lo stato del pin di input
int stato = 0; // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led acceso
void setup() {
Serial.begin (9600);
pinMode (POT1, INPUT);
pinMode (POT2, INPUT);
pinMode (POT3, INPUT);
pinMode (POT4, INPUT);
pinMode (POT5, INPUT);
pinMode (LED1, OUTPUT);
pinMode (LED2, OUTPUT);
pinMode (LED3, OUTPUT);
pinMode (LED4, OUTPUT);
pinMode (LED5, OUTPUT);
pinMode(LEDBUTTON, OUTPUT); // imposta il pin digitale come output
pinMode(BUTTON, INPUT); // imposta il pin digitale come input
}
void loop() {
delay (300);
val = digitalRead(BUTTON); // legge il valore dell'input DEL PULSANTE e lo conserva
// controlla che l'input sia HIGH (pulsante premuto)
// e cambia lo stato del led
if (val == HIGH) {
stato = 1 - stato;
}
if (stato == 1) {
digitalWrite(LEDBUTTON, HIGH); // accende il led del pulsante
analogreadvalueA1 = 1023;
analogwritevalueA1 = map(analogreadvalueA1, 0, 1023, 0, 255); //converte in scala 255
analogreadvalueA2 = 1023;
analogwritevalueA2 = map(analogreadvalueA2, 0, 1023, 0, 255); //converte in scala 255
analogreadvalueA3 = 1023;
analogwritevalueA3 = map(analogreadvalueA3, 0, 1023, 0, 255); //converte in scala 255
analogreadvalueA4 = 1023;
analogwritevalueA4 = map(analogreadvalueA4, 0, 1023, 0, 255); //converte in scala 255
analogreadvalueA5 = 1023;
analogwritevalueA5 = map(analogreadvalueA5, 0, 1023, 0, 255); //converte in scala 255
analogWrite(LED1, analogwritevalueA1 * 25 / 100); // Bianco FREDDA 15K
analogWrite(LED2, analogwritevalueA2 * 35 / 100); // BLU 455/457
analogWrite(LED3, analogwritevalueA3 * 20 / 100); // UV 417/430 nm
analogWrite(LED4, analogwritevalueA4 * 45 / 100); // Bianco CALDA 10K
analogWrite(LED5, analogwritevalueA5 * 0 / 100); // BLU SCURO 445/447
}
else {
digitalWrite(LEDBUTTON, LOW); //spegne il led pulsante
analogreadvalueA1 = analogRead (POT1); //questo legge il valore dall'ingresso A1
analogreadvalueA2 = analogRead (POT2); //questo legge il valore dall'ingresso A2
analogreadvalueA3 = analogRead (POT3); //questo legge il valore dall'ingresso A3
analogreadvalueA4 = analogRead (POT4); //questo legge il valore dall'ingresso A4
analogreadvalueA5 = analogRead (POT5); //questo legge il valore dall'ingresso A5
if (analogreadvalueA1 <= 20)
analogwritevalueA1 = 0;
else
analogwritevalueA1 = map(analogreadvalueA1, 0, 1023, 0, 255); //converte in scala 255
if (analogreadvalueA2 <= 20)
analogwritevalueA2 = 0;
else
analogwritevalueA2 = map(analogreadvalueA2, 0, 1023, 0, 255); //converte in scala 255
if (analogreadvalueA3 <= 20)
analogwritevalueA3 = 0;
else
analogwritevalueA3 = map(analogreadvalueA3, 0, 1023, 0, 255); //converte in scala 255
if (analogreadvalueA4 <= 20)
analogwritevalueA4 = 0;
else
analogwritevalueA4 = map(analogreadvalueA4, 0, 1023, 0, 255); //converte in scala 255
if (analogreadvalueA5 <= 20)
analogwritevalueA5 = 0;
else
analogwritevalueA5 = map(analogreadvalueA5, 0, 1023, 0, 255); //converte in scala 255
analogWrite(LED1, analogwritevalueA1 * 45 / 100); // Bianco FREDDA 15K
analogWrite(LED2, analogwritevalueA2 * 30/ 100); // BLU 455/457
analogWrite(LED3, analogwritevalueA3 * 5 / 100); // UV 417/430 nm
analogWrite(LED4, analogwritevalueA4 * 25 / 100); // Bianco CALDA 10K
analogWrite(LED5, analogwritevalueA5 * 0 / 100); // BLU SCURO 445/447
}
delay (100);
}
Ora il problema è il seguente:
non avendo ancora il modulo 0/5V esterno che porta la tensione ai vari canali di arduino in ingresso, ho caricato comunque lo scratch su arduino e mi aspettavo che si accendesse solo il led del ch 1, invece si accendono tutti.
é un problema legato agli if?
Grazie a tutti per i suggerimenti.