quando provo a fare questo schema elettrico e faccio l'upload del programma il led parte acceso e se premo il pulsante si spegne. In realtà dovrebbe partire spento e accendersi quando premo il pulsante.
Cosa ne dite? dove sbaglio? lo schema elettrico è sicuro fatto bene sulla bread board.
Possibile un errore nel programma della lezione 4?
Salve,
Prima di tutto ti consiglio di presentarti nel forum apposito (primo in alto sezione generale) spiegando le tue conoscenze in materia Arduino ed elettronica. Poi ti consiglio di darti una lettura al regolamento, che qui i moderatori sacagnano.
Infine non c'è un problema, il codice è fatto che il pulsante spenga il diodo. Se si vuole invertirne il funzionamento bisogna negare l'if che controlla la pressione del pulsante nella loop. È sufficiente o invertire il corpo dell'if {} con quello dell'else {}, o negare con un punto esclamativo nell'if (). Non ho sbagliato le parentesi. Infatti i pin dichiarati come INPUT_PULLUP funzionano invertiti (sentono alto a contatto aperto, e basso a contatto chiuso)
SE il codice è quello del sito E SE lo schema è montato giusto, allora l'unica spiegazione è che il pulsante sia del tipo normalmente chiuso invece che normalmente aperto.
no ho controllato con un tester e il pulsante è come lo richiama il sito e cioè normalmente aperto.
Ho provato a negare la if con il punto esclamativo ed effettivamente funziona al contrario spento inizialmente e se premo il pulsante si accende. Provato anche a scambiare le righe di comando della if ed è come mettere la negazione di prima.
Non so io mi sono convinto che hanno sbagliato la negazione.
zaqsedc:
Non so io mi sono convinto che hanno sbagliato la negazione
E hai fatto bene! Sono riuscito a perdermi in una sciocchezza È giusto il comportamento che vedi, con il pulsante aperto (non premuto) legge 1, pertanto il LED è acceso. Premendo legge zero e il LED si spegne.
Per evitare fraintendimenti come questi (magari in programmi lunghi centinaia di righe) io cerco di definire all'inizio tutto quello che riguarda l'hardware, in modo che nel resto del programma non devo più preoccuparmi di numeri o HIGH/LOW.
Il codice diventa più "parlante" (non servono neppure i commenti per capire cosa sta facendo), e se cambio i collegamenti hardware basta cambiare i valori delle define.
#define PRESSED_LEVEL LOW // il pulsante premuto e` LOW
#define PULSANTE 2 // pin usato per il pulsante
#define LED 5 // pin usato per il LED
#define LED_ON HIGH // il LED si accende con HIGH
#define LED_OFF LOW // il LED si spegne con LOW
void setup() {
pinMode(PULSANTE, INPUT_PULLUP);
pinMode(LED, OUTPUT);
}
void loop() {
int sensorValue = digitalRead(PULSANTE);
if(sensorValue == PRESSED_LEVEL)
digitalWrite(LED, LED_ON);
else
digitalWrite(LED, LED_OFF);
}
NOTA: ho definito anche LED_ON e LED_OFF perché anche l'accensione di un LED può essere "invertita" se invece che tra Arduino e GND viene collegato tra Arduino e Vcc. Ma stabilendo tutto nelle define iniziali il programma successivo non cambia e continua a funzionare regolarmente