Prueba de LEDs Arduino PWM y IC74HC595
El integrado IC74HC595 es un shift que permite manejar 8 bit paralelos a través de un byte serial. Como solo maneja estados lógicos, debemos jugar con el tiempo o el PWM para manejar “intensidades” de iluminación.
El siguiente ejemplo permite manejar 8 leds a través de un byte enviado al shift (IC74HC595) y la intensidad es aplicada a través de un PWM sobre la línea de tierra, usando un transistor de baja potencia, ejemplo el 2N2222.
int data = 11, clock = 10, latch = 8, bitToSet = 0, pwm1 = 9, pwm1val = 0, led=0; unsigned long t0int = 100000, t0prv = 0; unsigned long t1int = 500, t1prv = 0; void setup() { // initialize the digital pin as an output. pinMode(data, OUTPUT); pinMode(clock, OUTPUT); pinMode(latch, OUTPUT); pinMode(pwm1, OUTPUT); registerWrite(data,LOW); Serial.begin(9600); Serial.println("Inicio"); } void loop() { unsigned long t0act = micros(); unsigned long t1act = millis(); //Led if(t0act - t0prv > t0int) { t0prv = t0act; for(int i=0;i<8;i++) { registerWrite(i, LOW); } registerWrite(led, HIGH); led++; if ( led == 8 ) led = 0; } //PWM if(t1act - t1prv > t1int) { t1prv = t1act; analogWrite(pwm1,pwm1val); pwm1val = (pwm1val + 5); if(pwm1val > 255) pwm1val=0; } } void registerWrite(int whichPin, int whichState) { byte bitsToSend = 0; digitalWrite(latch, LOW); bitWrite(bitsToSend, whichPin, whichState); shiftOut(data, clock, MSBFIRST, bitsToSend); digitalWrite(latch, HIGH); }