Esse pequeno módulo não pode faltar em sua bancada! É imprescindível para quem quer economizar pinos de seu Arduino (ou de qualquer outro microcontrolador). Acabamos de testar e seu funcionamento é de uma simplicidade franciscana. Há dois barramentos no módulo. Um deles tem Vcc, Gnd, Sda e Scl que, por incrível que pareça, são conectados a Vcc, Gnd, Sda e Scl do Arduino!
O outro barramento tem P0, P1, P2....P7 (8 bits) e INT (ativo em nível lógico baixo,, ou seja, em 0). O pno INT não foi usado nesse projeto. A nossa inspiração (eufemismo para cópia) foi obtida de http://garagelab.com/profiles/blogs/tutorial-arduino-i-o-port-expander-with-pcf8574. Mas nós só temos um PCF8574T, assim a equipe de software alterou o sketch para ao invés de termos leds em um PCF e push bottons em outro, usamos a porta serial (a porta usb do Arduino, que já mencionamos é serial over usb).
Em suma, ao escrevermos a letra "a" (minúscula) acendemos o led em P0; "b" acende P1; "c" acende P2 e "d" acende P3. E fim.
Na imagem acima, vemos o módulo vermelho e os leds ligados a P0, P1,P2 e P3. No programa, caso se receba o caractere correspondente ("a", "b", "c" ou "d") o led P0, P1, P2 ou P3 acenderá e assim permanecerá até que uma das letras seja recebida. Estudem o sketch e descubram as modiicações feitas e o porquê delas.
#include "Wire.h"
byte x=0;
byte y=0;
void setup()
{
Wire.begin();
Serial.begin(9600);
}
void loop()
{
//Wire.requestFrom(33,1);
if(Serial.available()) //If the request is available
{
x=Serial.read(); //Receive the data
}
if(x<255) //If the data is less than 255
{
if (x==97) { y = 1; }; //P0
if (x==98) { y = 2; }; //P1
if (x==99) { y = 8; }; //P3
if (x==100) { y = 4; }; //P2
}
Wire.beginTransmission(32); //Begin the transmission to PCF8574
Wire.write(y); //Send the data to PCF8574
Wire.endTransmission(); //End the Transmission
}
Com esse pequeno programa podemos criar (ou recriar) protocolos complexos de 8 bits, como por exemplo, o de controle de um LCD. Que bom que alguém já fez e muito generosamente permitiu o uso livre de seu trabalho criativo.
Mas, para o teste ficar completo faltou ler os pinos e assim comprovar o funcionamento bidirecional da porta. Para tanto, vamos usar o fato de que P5 a P7 estão livres e apenas esses bits poderão ser lidos, sob pena de alguma coisa dar muito errado - ou não - pois não vamos arriscar (é muito provável que não tenha problema algum, leremos apenas se o pino está ativo, ou seja, o led está aceso, ou não).
Desse modo, modificaremos novamente o sketch e ao ativarmos um dos pinos livres, uma mensagem será escrita na porta serial.