viernes, 1 de junio de 2012

Control de led's por i2c

La placa Arduino Uno soporta comunicación i2c, por medio de la librería wire, con el conseguiremos expandir los puertos digitales utilizando solo 2 pines analógicos. En el siguiente ejemplo, se muestra el control de 16 leds desde el puerto i2c de arduino, con lo este montaje deja libres todas salidas digitales y PWM. Como hardware adicional se ha utilizado un expansor i2c PCF8575


Tienes el código del programa tras el salto y el fichero fuente para descargar .

#include <Wire.h>
byte dir = 0x20;
int zz=20;
void setup()
{
  Wire.begin();
}

void amarillos()
{
 Wire.beginTransmission(dir);
Wire.send(224);
Wire.send(255);
Wire.endTransmission();
delay(80);
 Wire.beginTransmission(dir);
Wire.send(255);
Wire.send(255);
Wire.endTransmission();
delay(80);
}

void verdes()
{
 Wire.beginTransmission(dir);
Wire.send(31);
Wire.send(252);
Wire.endTransmission();
delay(80);
 Wire.beginTransmission(dir);
Wire.send(255);
Wire.send(255);
Wire.endTransmission();
delay(80);
}

void rojos()
{
 Wire.beginTransmission(dir);
Wire.send(255);
Wire.send(3);
Wire.endTransmission();
delay(80);
 Wire.beginTransmission(dir);
Wire.send(255);
Wire.send(255);
Wire.endTransmission();
delay(80);
}

void test_1(){
  rojos();
  verdes();
  amarillos();
}

void test_2() {
for(int y=1;y<256;y=y*2) {
 Wire.beginTransmission(dir);
Wire.send(255-y);
Wire.send(255);
Wire.endTransmission();
delay(zz);
Wire.beginTransmission(dir);
Wire.send(255);
Wire.send(255);
delay(zz);
}
for(int y=1;y<256;y=y*2) {
 Wire.beginTransmission(dir);
Wire.send(255);
Wire.send(255-y);
Wire.endTransmission();
delay(zz);
Wire.beginTransmission(dir);
Wire.send(255);
Wire.send(255);
delay(zz);
}
}

void test_3() {
 Wire.beginTransmission(dir);
Wire.send(0);
Wire.send(0);
Wire.endTransmission();
delay(80);
Wire.beginTransmission(dir);
Wire.send(255);
Wire.send(255);
Wire.endTransmission();
delay(80);
}

void loop()
{
 for(int z=0;z<10;z++) {
   test_1();
 }
 for(int z=0;z<10;z++) {
  test_2();
 }
 for(int z=0;z<10;z++) {
  test_3();
 }
}



No hay comentarios:

Publicar un comentario