Quiero crear un sistema de comunicación bidireccional entre dos Arduinos usando módulos RF para enviar y recibir mensajes personalizados ingresados con un teclado matricial 4x3, que se mostrarán en una pantalla LCD y este es el codigo
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <RH_ASK.h>
#include <SPI.h>
// Configuración de la pantalla LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Ajusta la dirección si es necesario
// Configuración del teclado matricial
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}};
byte rowPins[ROWS] = {9, 8, 7, 6}; // Pines de las filas
byte colPins[COLS] = {5, 4, 3}; // Pines de las columnas
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
RH_ASK rf_driver(2000, 2, 10); // (Baud, Pin receptor, Pin transmisor)
char message[16] = ""; // Mensaje que se mostrará en el LCD
int index = 0; // Índice del mensaje
void setup() {
Serial.begin(9600);
if (!rf_driver.init()) {
Serial.println("Error iniciando RF");
} else {
Serial.println("RF listo");
}
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Escribe mensaje:");
}
void loop() {
char key = keypad.getKey();
if (key) {
Serial.print("Tecla presionada: ");
Serial.println(key);
if (key == '#') { // Borrar un carácter
if (index > 0) {
index--;
message[index] = '\0'; // Elimina el último carácter
}
} else if (key == '*') { // Enviar mensaje
Serial.print("Mensaje enviado: ");
Serial.println(message);
lcd.setCursor(0, 1);
lcd.print("Enviado! ");
delay(1000);
memset(message, 0, sizeof(message)); // Borra el mensaje
index = 0;
} else if (index < 15) { // Agregar caracteres (hasta 15)
message[index] = key;
index++;
message[index] = '\0'; // Mantener cadena válida
}
// Mostrar el mensaje en el LCD
lcd.setCursor(0, 1);
lcd.print(" "); // Borra línea
lcd.setCursor(0, 1);
lcd.print(message);
}
}
La cuestión es que no me funciona y no se el por qué