De la mateixa manera que pots llegir senyals analògics, també pots generar valors analògics. L’Arduino utilitza Pins amb Modulació Controlada per Pulsacions, els PWM (de l’anglès Pulse Width Modulation), per enviar els valors analògics. Fes una ullada als Pins digitals que porten al costat un símbol de corrent (~).
Quan s’utilitza un Pin digital normal per escriure HIGH o LOW, s’obté o bé 5V o bé 0V. Els Pins PWM tenen una habilitat diferent: els pots utilitzar per obtenir un nivell de tensió en qualsevol punt entre 5 V i 0V. Amb això pots atenuar un LED sense problemes entre ON i OFF.
Per utilitzar aquesta habilitat especial dels Pins PWM, hauràs d’utilitzar la funció analogWrite()
. Es necessiten dos paràmetres: el número del Pin PWM i el nivell de sortida. El nivell de sortida és un número entre 0 i 255. 0 és igual a digitalWrite(pin, LOW)
, 255 és igual a executar digitalWrite(pin, HIGH).
Pots arribar a qualsevol punt intermedi.
analogRead
i analogWrite
: analogRead
té 1024 nivells de lectura, mentre que analogWrite
només en té 256. analogRead
utilitza Pins analògics, mentre que analogWrite
utilitza Pins digitals tipus PWM.Vegem-ne un exemple. Agafa un LED i una resistència de 220 Ohmis (amb línies de color vermell, vermell i marró). Connecta el Pin llarg del LED a la resistència i l’altre Pin de la resistència al Pin digital 10. Connecta el braç curt del LED a GND.
No és necessari cridar a la funció interna pinMode
quan utilitzes analogWrite,
així que aquí pots deixar la configuració buida.
Després de pujar el codi de sota, veuràs que el LED es va il·luminant poc a poc fins a arribar a la seva màxima intensitat, i que després el procés es repeteix.
int ledPin = 10; int fade = 0; void setup() { // nothing here } void loop() { analogWrite(ledPin, fade); delay(10); fade = fade + 10; if (fade > 255) fade = 0; }
Aquí s’ha utilitzat una nova ordre:
analogWrite(pinNumber, fadeLevel)
: escriu un senyal analògic a un Pin PWM.pinNumber
és el número de Pin PWM que estàs utilitzant, fadeLevel és un número entre 0 i 255. 0 és igual a digitalLOW
, 255 és igual a digitalHIGH
.
Continua experimentant!
- Intenta fer que el LED es vagi apagant poc a poc després d’assolir la màxima brillantor enlloc de quedar-se fosc de sobte. A això ho anomenem llum de respiració (breath).
- Es pot canviar la velocitat de la “respiració” perquè s’apagui més ràpidament o més lentament?
- Es pot utilitzar un potenciòmetre per controlar el LED? Recorda la diferència entre
analogRead()
ianalogWrite()
.