Problemi software con arduino

Salve, sto facendo un progetto scolastico con arduino da portare all’esame. Il progetto consiste in un incrocio a 4 vie con semafori e dei lampioni che si accendono quando la fotocellula non rileva più la luce.
Solo che quando carico il codice funzionano solo i semafori, e quando spengo la luce i led che simulano i lampioni non si accendono. Potete aiutarmi GRAZIE!!!
Ecco il codice:

#define BUTTON 7
int val = 0;
const int redLed = 13;
const int yellowLed = 12;
const int greenLed = 11;
const int redLed2 = 10;
const int yellowLed2 = 9;
const int greenLed2 = 8;
const int delayYellow = 2000;
const int delayGreen = 5000;
const int sensorPin = A0;
const int ledPin = 6;
int sensorValue = 0;
int ledValue = 0;

void setup()

{
pinMode(redLed, OUTPUT);
pinMode(yellowLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(redLed2, OUTPUT);
pinMode(yellowLed2, OUTPUT);
pinMode(greenLed2, OUTPUT);
pinMode(BUTTON, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
pinMode( sensorPin, INPUT);

}

void loop() {

//accensione dei pali con sensore di luce

sensorValue = analogRead(sensorPin);
ledValue = map(sensorValue, 50, 400, 0, 255);
if(sensorValue < 400)
{
digitalWrite(ledValue,HIGH);
}
else {
digitalWrite(ledValue,LOW);
}

if(sensorValue > 400)
{
digitalWrite(ledValue,LOW);
}
else {
digitalWrite(ledValue,HIGH);
}

//Funzione semafori con richiamo per pedoni

val = digitalRead(BUTTON);
if (val == HIGH) {
digitalWrite(redLed, HIGH);
digitalWrite(redLed2, HIGH);
digitalWrite(yellowLed, LOW);
digitalWrite(yellowLed2, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(greenLed2, LOW);
delay(10000);
digitalWrite(redLed, LOW);
digitalWrite(redLed2, LOW);
}

else
{
digitalWrite(greenLed, HIGH);
digitalWrite(redLed2, HIGH);
delay(delayGreen);
digitalWrite(greenLed, LOW);
digitalWrite(yellowLed, HIGH);
delay(delayYellow);
digitalWrite(redLed2, LOW);
digitalWrite(yellowLed, LOW);
digitalWrite(redLed, HIGH);
digitalWrite(greenLed2, HIGH);
delay(delayGreen);
digitalWrite(greenLed2, LOW);
digitalWrite(yellowLed2, HIGH);
delay(delayYellow);
digitalWrite(yellowLed2, LOW);
digitalWrite(redLed, LOW);
}
}

Prima di tutto, nella sezione in lingua Inglese si può scrivere SOLO in Inglese … quindi, per favore, la prossima volta presta più attenzione …

… poi, essendo questo il tuo primo post, nel rispetto del regolamento, ti chiedo di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con MOLTA attenzione il su citato REGOLAMENTO

… infine, in conformità al suddetto regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

Grazie,

Guglielmo

P.S.: Il tuo post è stato spostato nell’opportuna sezione del forum “Italiano”

Ciao Gaetano,

in primis fai quello che ti ha indicato Guglielmo…

poi…permettimi…ci sono un po’ di pasticci.

hai assegnato alla variabile sensorPin il valore A0 (ingresso analogico)…ok ma non è necessario dichiararlo come INPUT se vai a leggerlo; se vuoi usarlo come OUTPUT devi dichiararlo tale…

poi scrivi:

  sensorValue = analogRead(sensorPin);
  ledValue = map(sensorValue, 50, 400, 0, 255);
  if (sensorValue < 400)
  {
    digitalWrite(ledValue, HIGH);
  }
  else {
    digitalWrite(ledValue, LOW);
  }

  if (sensorValue > 400)
  {
    digitalWrite(ledValue, LOW);
  }
  else {
    digitalWrite(ledValue, HIGH);
  }

leggi A0 (sensorPin) e salvi il suo valore (range 0-1023) in sensorValue che rimappi con ledValue=map(sensorValue, 50, 400, 0, 255)…sei sicuro della scala di partenza e di quella che vuoi avere alla fine?..anche perchè usi ledValue per indicare il PIN da mettere in HIGH o LOW…e qua ci sono gli if/else…che non funzionano proprio…scrivi if<400 ed else (che vuol dire >=400) e poi if>400 ed else (che vuol dire <=400)…gli dici di fare una cosa ed il suo contrario.

poi attenzione all’uso dei delay() ti bloccano il programma in quel punto (compreso verifiche ingressi) fino al loro scadere…dovresti usare la funzione millis() per temporizzare azioni/verifiche e che non blocca il programma…ma per questa devi un attimo studiare.

ORSO2001: hai assegnato alla variabile sensorPin il valore A0 (ingresso analogico)...ok ma non è necessario dichiararlo come INPUT se vai a leggerlo;

Le entrate analogiche non hanno bisogno di essere dichiarate come entrate. Percui funziona cosí. Ciao Uwe

uwefed: Le entrate analogiche non hanno bisogno di essere dichiarate come entrate. Percui funziona cosí. Ciao Uwe

Ciao Uwe,

solo per capirmi ... io intendevo quello che hai scritto tu...o si capisce qualche cosa di diverso!?

ORSO2001: Ciao Uwe,

solo per capirmi ... io intendevo quello che hai scritto tu...o si capisce qualche cosa di diverso!?

Sí hai ragione.

La seconda parte della frase mi ha tratto in inganno.

se vuoi usarlo come OUTPUT devi dichiararlo tale...

Ciao Uwe