Autor Tema: APORTE - PFC8574 (expansor de E/S) con I2C y un Arduino  (Leído 480 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado humberto 02

  • PIC16
  • ***
  • Mensajes: 190
APORTE - PFC8574 (expansor de E/S) con I2C y un Arduino
« en: 29 de Octubre de 2022, 12:44:50 »
Hola. Hace mucho que no me tomaba un minuto para dejarles material que pudiera “simplificarles” su tiempo y que les pueda ser de utilidad.

Tiempo atrás; dejé material acerca de este “genial” componente; pero esto que les quería dejar hoy. Es mucho más (universal) para comenzar a comprender como se podría usar; en cualquier caso o situación.
El objetivo es Presionar 4 (cuatro) teclas y encender 4 Leds por medio del I2C de Arduino.

Este programa te permite de un modo muy básico usarlo con su librería.
Código: [Seleccionar]
#include <PCF8574.h>
PCF8574 pcf8574(0x20);

uint8_t PinEntrada=0;

void setup(){
     Serial.begin(9600);
     pcf8574.begin();

     pcf8574.pinMode(P0,INPUT);
     pcf8574.pinMode(P1,INPUT);
     pcf8574.pinMode(P2,INPUT);
     pcf8574.pinMode(P3,INPUT);

     pcf8574.pinMode(P7,OUTPUT); pcf8574.digitalWrite(P7,LOW);
     pcf8574.pinMode(P6,OUTPUT); pcf8574.digitalWrite(P6,LOW);
     pcf8574.pinMode(P5,OUTPUT); pcf8574.digitalWrite(P5,LOW);
     pcf8574.pinMode(P4,OUTPUT); pcf8574.digitalWrite(P4,LOW);

     Serial.println("Comenzando");
}

void loop(){
     // Leo los Pines 0, 1, 2, 3 y Prendo los Ledes 4, 5, 6 y 7
     for (int k=0; k<4; k++){
          PinEntrada=pcf8574.digitalRead(k);
          if (PinEntrada!=0){
              String kk=(String) k;
              Serial.print("Puerto "+kk+" >");
              Serial.println(PinEntrada);
         
              pcf8574.digitalWrite((7-k),1);
              delay(250);
          pcf8574.digitalWrite((7-k),0);}
     }
}

Este programa ya busca exigir (por medio de la clasificación de Entradas y Salidas) la misma tarea que la del anterior. Permitiendo ver la “versatilidad” a la hora de realizar nuestro Sketch.

Código: [Seleccionar]
#include <PCF8574.h>
PCF8574 Entrada(0x20);
PCF8574 Salidas(0x20);

uint8_t PinEntrada=0;

void setup(){
     Serial.begin(9600);
     Entrada.begin();
     Salidas.begin();

     Entrada.pinMode(P0,INPUT);
     Entrada.pinMode(P1,INPUT);
     Entrada.pinMode(P2,INPUT);
     Entrada.pinMode(P3,INPUT);

     Salidas.pinMode(P7,OUTPUT); Salidas.digitalWrite(P7,LOW);
     Salidas.pinMode(P6,OUTPUT); Salidas.digitalWrite(P6,LOW);
     Salidas.pinMode(P5,OUTPUT); Salidas.digitalWrite(P5,LOW);
     Salidas.pinMode(P4,OUTPUT); Salidas.digitalWrite(P4,LOW);

     Serial.println("Comenzando");
}

void loop(){
     // Leo los Pines 0, 1, 2, 3 y Prendo los Ledes 4, 5, 6 y 7
     for (int k=0; k<4; k++){
          PinEntrada=Entrada.digitalRead(k);
          if (PinEntrada!=0){
              String kk=(String) k;
              Serial.print("Puerto "+kk+" >");
              Serial.println(PinEntrada);
         
              Salidas.digitalWrite((7-k),1);
              delay(250);
          Salidas.digitalWrite((7-k),0);}
     }
}

Librería necesaria para aplicar estos Sketch:
https://www.arduino.cc/reference/en/libraries/pcf8574/

Cabe aclarar que también se puede usar sin la Librería pcf8574; simplemente necesitas trabajar con los canales de la librería Wire.h, es fácil; pero realmente innecesario romperte los cuernos con las señales binarias; “B10011100” pero si te gusta; también puede lograr lo mismo.

Espero que le sirva como lo ha sido en mi caso personal. Un cordial saludo.


 

anything