Problema con 2 fotoresistenze e 3 LED

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);
}

Qualcuno saprebbe identificare il problema?

Continuing the discussion from Arduino Sovaccaricato?:

Ciao. Prima di proseguire, cortesemente fai quello che ti aveva chiesto Guglielmo.

Cavolo, due messaggi in 4 anni e ancora non ha capito...

@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. :wink:

Ho fatto il necessario. Mi scuso per non essermi presentato prima ma diciamo che non ho letto le regole 4 anni fa... e neanche 4 anni dopo. Eheh...

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!

ho sistemato il codice in questo modo:

  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. :sweat_smile:

In realtà, ancora non è definito che cosa debba accadere con valori uguali a 50.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.