TODOPIC
Otros Microcontroladores / Dispositivos programables => Arduino => Mensaje iniciado por: humberto 02 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:
#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!.