lunes, 22 de agosto de 2011

Expansores I2C PCF8574

Cada nodo tiene conectado uno o dos expansores PCF8574 conectados al bus I2C. Lo voy a usar para controlar la persiana, el toldo y el estore.

/*
  PCF8574 - I2C
  Entradas
*/
#include <Wire.h>
#define expander 0x20
              
void setup()
{
  Wire.begin();
  Serial.begin(9600);
}

void loop()
{
  Serial.print("Read: ");
  //Nos devuelve el estado de todos los bits B00000000
  Serial.println(expanderRead(),BIN);
  //Nos devuelve uno por uno el estado de los bits
  byte valor=(expanderRead());
  Serial.print(bitRead(valor,7));
  Serial.print(bitRead(valor,6));
  Serial.print(bitRead(valor,5));
  Serial.print(bitRead(valor,4));
  Serial.print(bitRead(valor,3));
  Serial.print(bitRead(valor,2));
  Serial.print(bitRead(valor,1));
  Serial.println(bitRead(valor,0));
  delay(1000);
}

byte expanderRead()
{
  byte _data;
  Wire.requestFrom(expander, 1);
  if(Wire.available())
  {
    _data = Wire.receive();
  }
  return _data;
}



Y para activar las salidas.



/*
PCF8574 - I2C SALIDAS
*/
#include <Wire.h>
#define expander 0x20
           
void setup()
{
  Wire.begin();
  Serial.begin(9600);
}

void loop()
{
  //Todas las salidas a 0 B00000000
  expanderWrite(B00000000);
  delay(1000);
  //Todas las salidas a 1 B11111111
  expanderWrite(B11111111);
  delay(1000);
 
 
  byte salidas = B00000000;
  //el bit 2 lo ponemos a 1 B00000010
  salidas = bitWrite(salidas, 2, 1);
  expanderWrite(salidas);
  delay(1000);
  //el bit 3 lo ponemos a 1 B00000110
  salidas = bitWrite(salidas, 3, 1);
  expanderWrite(salidas);
  delay(1000);
  //el bit 2 lo ponemos a 0 B00000010
  salidas = bitWrite(salidas, 2, 0);
  expanderWrite(salidas);
  delay(1000);
  //el bit 3 lo ponemos a 0 B00000000
  salidas = bitWrite(salidas, 3, 0);
  expanderWrite(salidas);
  delay(1000);
}

void expanderWrite(byte _data )
{
  Wire.beginTransmission(expander);
  Wire.send(_data);
  Wire.endTransmission();
}

El pinout del PCF8574


No hay comentarios:

Publicar un comentario