Arduino Nano e reed sensor

Ciao a tutti,
sto cercando di leggere lo stato di un sensore reed con due uscite (NA e NC) da una scheda Arduino Nano.
Ho montato il reed magnetico sulla portiera dell'auto e collegato il tutto in modo che a portiera aperta il circuito venga chiuso. Ho eseguito la prova con un tester e fin qui è ok.

L'ho collegato nel seguente modo:
image

Ho scritto questo codice per leggere lo stato:

void setup() {
  pinMode(A0, INPUT_PULLUP);
}

void loop() {
  if (digitalRead(A0) == HIGH) {
    digitalWrite(LED_BUILTIN, HIGH);
  } else {
    digitalWrite(LED_BUILTIN, LOW);
  }
}

purtroppo, il LED_BUILTIN rimane sempre acceso (tra l'altro con una luce molto debole)... a prescindere dallo stato della portiera.
Cosa posso fare?

Quindi: hai collegato il sensore al positivo (5V) con l'uscita su A0, e fino a qui potrebbe anche andare bene (ma non benissimo), poi dichiari A0 come INPUT_PULLUP, cioè collegata con un pullup al positivo. Quando è che su A0 ci dovrebbe essere un cambiamento di stato (hint: mai)?

Ciao, Ale.

Ciao.
Perché “ma non benissimo”?
Cosa dovrei variare? Dovrei connettere il COM del reed a GND?

Scusa eh ...
... tu dichiari un pin come INPUT e PULL_UP ... sai cosa significa o ha solo fatto un copia incolla senza approfondire?

Perché se poi ... con il pin in PULL_UP speri di rilevare quando il pin viene collegato a +Vcc ... allora, evidentemente, ti manca qualche nozione ... :roll_eyes:

Altra cosa ... perché sprecare un pin che può lavorare in Analogico (A0) e non usare un pin esclusivamente digitale (Dn)?

Guglielmo

Si, potrebbe mancarmi qualche nozione.

Con la stessa configurazione (pin analogico in pull_up) riesco a leggere l’output +5V di un LM7805 alimentato da ACC della vettura. Perché in quel caso funziona?

Perché i pin digitali sono già tutti occupati.

Emmm ... veramente sono le BASI del framework Arduino ...

... dichiarare un pin in INPUT come PULL_UP significa collegarlo internamente, con una resistenza, al +Vcc quindi, quel pin, è normalmente HIGH. Se anche tu gli fai fare contatto con +Vcc ... il risultato NON cambia, sempre HIGH rimane e tu non vedi nulla.

Se un pin è dichiarato PULL_UP (quindi connesso al +Vcc con una resistenza interna) tu devi collegare il contatto verso GND in modo che, quando si chiude, il pin vada LOW.

Occhio comunque hai "rimbalzi" che i contatti meccanici possono avere, perché, nel passaggio da uno stato all'altro (chiusura del contatto/apertura del contatto) potresti avere una serie di impulsi ... in tal caso si applicano delle tecniche di "debouncing".

NON ho capito cosa funziona e senza uno schema esatto (e senza sapere cosa leggevi) ... difficile capire ... comunque la teoria del PULL_UP te l'ho spiegata poco sopra.

Guglielmo

Anche il pin LED_BUILTIN va configurato nel setup come uscita.

pinMode(LED_BUILTIN, OUTPUT);

Segui quanto detto dagli altri utenti.
Per prova ti basta spostare il filo rosso su GND anziché su 5V.

Ciao.