digitalRead(pin)

Fins ara només hem fet que l'arduino activara (des de l'arduino cap a fora) alguns dels seus pins i escriguera sobre ells valors lògics:

  • LOW ó 0, representat amb un valor de tensió igual a GND (és a dir, 0 Volts entre el pin i GND).
  • HIGH ó 1, representat amb la tensió de +5Volts.

Això, recordem, ho feiem amb l'ordre digitalWrite(pin), havent definit abans eixe pin com eixida amb l'ordre pinMode(pin, OUTPUT).
Ara volem que els valors lògics que puguen haver en alguna part d'un circuit puguen ser llegits per l'arduino, connectant eixa part del circuit a un dels pins de l'arduino. El primer que cal fer es definir eixe pin com ENTRADA amb:

pinMode(pin, INPUT);


Una vegada definit un pin com entrada i connectat al lloc adient, podem llegir el valor lògic present en eixe pin i assignar-lo a una variable o entrant en la condició d'un IF:

estat=digitalRead(pinEntrada); //assignem a una variable l'estat d'un pin
//a la variable estat s'enmagatzemarà el valor 0 ó 1,
//depenent de l'estat de l'entrada

if (digitalRead(pin)==HIGH) { //comparem amb un if
//Açò només s'executarà si al pin hi havia un 1!!
}

Lectura d'un polsador

Com exemple d'ús de la funció digitalRead(), anem a vore com poder fer per "llegir" l'estat d'un polsador: saber si està o no premut.
El que hem de fer és connectar el polsador a un pin de l'arduino que haurem definit com entrada. A aquest polsador li connectarem una resistència d'una de les següents maneres possibles:

Resistència en Pull-Down

En aquest model el que fa la resistència és forçar un "0" lògic a l'entrada de l'arduino.

Polsador en Pull-Down
El circuit funciona de la manera següent:
  • Si el polsador està obert, com que les entrades de l'arduino tenen molt alta impedància, no passa corrent per la R, i per tant entre els seus extrems no cau tensió, mantenint aquesta R un "0" lògic (connexió a GND) a l'eixida del circuit (entrada de l'arduino).
  • Quan tanquem el polsador, forcem un "1" lògic (connexió a +Vcc) a l'eixida.
  • Amb el polsador premut, la R impedeix el curt-circuit i circularà per ella una I de valor +Vcc/R. El valor de R ha de ser prou elevat per a que no consumeixca massa energia quan premem el polsador, però no molt gran (varis Mega Ohms) per a que no quede indetermitat el "0" amb el polsador obert degut a la petita corrent que puga entrar per l'entrada de l'arduino.
Del funcionament del circuit se'n desprèn el nom: la resistència "estira cap avall" l'estat de l'eixida, per tant Pull-Down.

Resistència en Pull-Up

Al contrari que abans, ara la resistència ens força un "0" lògic a l'entrada.

Resistència en Pull-Up
L'explicació és la mateixa, però amb els estats canviats. Com que ara la R "estira cap amunt" l'estat de l'eixida del circuit (entrada de l'arduino), aquest s'anomena en Pull-Up.

Altres dispositius usats com sensors "digitals"

Evidentment, en aquest circuits de prova estem utilitzant polsadors que activem nosaltres amb la ma. Al món real aquest polsadors són substituïts per altres dispositius que tanquen i obrin un contacte elèctric, però actuats per altres mitjos, com ara:
  • Finals de cursa i micro-switches activats per elements mòbils (portes, èmbols, peces mòbils de màquines). Hi ha de diferents característiques i mides, la palanqueta d'activació pot ser de rodet (com la de lafigura), de palanca, de fil rígid i altres...
Microswitch vist per dins
  • Pressostats activats per la pressió d'algun fluid.
  • Térmics o termostats que s'activen al superar (per dalt o per baix) un temperatura.
  • Relés Reed activats per un camp magnètic, generat per una bobina, per exemple.
Relés Reed
  • I molts altres exemples

NOTA: Cal tenir en compte que tots aquests elements, inclosos els polsadors, poden ser "Normalment tancats": tanquen el circuit i quan s'actuen l'obren. Aleshores els circuits Pull-down i Pull-up invertiran el funcionament!! El millor és dibuixar-se l'esquema i vore'n el funcionament.

Ací pots llegir la referència completa de digitalRead().

Darrera modificació: dilluns, 14 octubre 2013, 10:35