Ciao! Per un progetto ho bisogno che 2 fotoresistenze accendano 3 LED, 1 alla volta.
Ho provato a programmare l'arduino un paio di volte ma ogni volta non sono riuscito a far accendere solo il terzo LED.
Il codice attuale:
void setup() {
Serial.begin(9600);
pinMode(2, OUTPUT); // I LED
pinMode(3, OUTPUT); // II LED
pinMode(4, OUTPUT); // III LED
}
void loop() {
int valore0 = analogRead(A0); // II fotoresistenza
int valore1 = analogRead(A1); // I fotoresistenza
Serial.print("Analog value: ");
Serial.print(valore0);
Serial.print("|");
Serial.println(valore1);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
if (valore0 < 50 && valore1 < 50) { // quando entrambe le resistenze sono coperte
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
}
if (valore0 < 50) { // quando la II resistenza è coperta
digitalWrite(2, HIGH);
}
if (valore1 < 50) { // quando la I resistenza è coperta
digitalWrite(3, HIGH);
}
delay(250);
}
@matO_opp: ... te lo ripeto un'altra volta ... cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.
Grazie,
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto.
Rileggi bene quello che hai scritto...
Il primo if considera sia A0 che A1; il secondo e il terzo, invece, considerano solo A0 e solo A1, indipendentemente dall'altro.
Inoltre, se non porti le uscite a LOW, restano alte! Quindi, dopo che un LED si è acceso, se cambiano le condizioni e deve spegnersi deve portare l'uscita a LOW. Non basta portarne un'altra a HIGH!
if (valore0 < 50 && valore1 < 50) { // quando entrambe le resistenze sono coperte
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
}
if (valore0 < 50 && valore1 > 50) { // quando la II resistenza è coperta
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
}
if (valore1 < 50 && valore0 > 50) { // quando la I resistenza è coperta
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
}
e ora funziona tutto. Non pensavo che bastasse aggiungere l'altro valore, grazie miille
E di nuovo, scusate per non essermi presentato prima.