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