Autor Tema: APORTE - Comunicacion I2C Teclado, Display y C.Remoto todo I2C  (Leído 196 veces)

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

Desconectado humberto 02

  • PIC16
  • ***
  • Mensajes: 101
APORTE - Comunicacion I2C Teclado, Display y C.Remoto todo I2C
« en: 26 de Diciembre de 2019, 20:49:13 »
Hola y Felicidades para todos!

Quería dejarles este proyecto (que la verdad me costo mucho más que el anterior).

Este es el Segundo proyecto de Comunicación I2C. En este caso e relacionado con un Arduino NANO V3 un Display LCD16x2 + un Teclado Matricial 4x4 y un Control Remoto 315MHz. Leyendo los tres por medio de A4 y A5.

Las Librerías usadas son: LiquidCrystal_I2C.h para el LCD, para el Control Remoto Wire.h y para el Teclado 4x4 la Keypad.h

La estrella de este proyecto es el Integrado PCF8574 facilitando todas las comunicaciones I2C.

Aquí les dejo Los resultados:


Código: [Seleccionar]
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f,16,2);

#include <Keypad_I2C.h>
#include <Keypad.h>

const byte ROWS = 4; // empat rows
const byte COLS = 4; // empat columns
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowsInp[ROWS] = {0, 1, 2, 3};
byte colsInp[COLS] = {4, 5, 6, 7};
int i2caddress = 0x21; // A1, A2, A3 >> 0, 0, 0
Keypad_I2C Teclado = Keypad_I2C( makeKeymap(keys), rowsInp, colsInp, ROWS, COLS, i2caddress );


int Anterior, x=0;
String valor="abcd";

void setup(){
     Serial.begin(9600);
     Teclado.begin(0x21);
     Wire.begin(0x20);
 
     lcd.init(); // inicializar el LCD
     lcd.backlight();
     lcd.clear();
     lcd.home();

     lcd.setCursor(0,0); // Ubicación(X,Y)
     lcd.print("Hola Mundo");
}
 
void loop(){
     short channel=1;
     byte value=0;

     char Tecla = Teclado.getKey();
     if (Tecla){
        Serial.println(Tecla);
        if (x>=16){x=0; lcd.setCursor(0,1);lcd.print("                ");}
        lcd.setCursor(x,1); lcd.print(Tecla);
        x++;
     }

     // Leer dato de canal 'channel'
     Wire.requestFrom(0x20, 1 << channel);
     if (Wire.available()) {
         value=Wire.read();
         if (value==242) {valor="Abcd";}
         if (value==248) {valor="aBcd";}
         if (value==241) {valor="abCd";}
         if (value==244) {valor="abcD";}
     }
     Wire.endTransmission();

     // Mostrar el valor por puerto serie
     if (value >0 && Anterior!=value){
        Serial.println(value);
        lcd.setCursor(11,0); lcd.print(valor);
        Anterior = value;
     }
}

Para que no entre en conflicto el Teclado con el Control Remoto tuve que usarlos con distintas librerías (comprender esto es lo que me llevó a "casi" tirar todo el proyecto).

Leer y leer, probar y probar hasta darme cuenta que debía separar las librerías; permitiéndome al fin lograrlo. Por eso lo comparto por si les sirve en algún momento. Les deseo lo mejor y un Prospero AÑO NUEVO!.