Hola, como verán el el código soy algo nuevo en el tema. Estoy haciendo un proyecto para 6° de electronica, pero tengo un problema con el Keypad, cada ves que quiero usar una función, por ejemplo waitForKey o getKey, me imprime un 1 en el LCD sin que yo quiera y no me deja usar el keypad.
use varios códigos pero siempre hacia lo mismo, probé con el código mas simple para escribir algo en el LCD y hace lo mismo.
Este es el código del timbre
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include "RTClib.h"
LiquidCrystal_I2C lcd(0x20, 16, 2);
RTC_DS1307 RTC;
#include <Keypad.h> //Libreria para el teclado
char pulsacion;
const byte Filas = 4; //Cuatro filas
const byte Cols = 3; //Tres columnas
byte Pins_Cols[] = { 9, 8, 7}; //Pines Arduino para las columnas
byte Pins_Filas[] = {13, 12, 11, 10}; // Pines Arduino para las filas
char Teclas [ Filas ][ Cols ] =
{
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'},
};
Keypad Teclado1 = Keypad(makeKeymap(Teclas), Pins_Filas, Pins_Cols, Filas, Cols); //Creamos lo que va a ser nuestro Keypad, que llamaremos "Teclado1"
int confirmar = A1, alarma = A0, RELE = 6 ;
int i;
int pulsacion1;
int seg1, min1, hor1, ano1, mes1, dia1; //Hora que trae el reloj DS1307RTC
int min2, hor2; //Hora que defino yo como alarma. Solo me interesan la hora y los minutos
void setup() {
Wire.begin(); // Inicia el puerto I2C
RTC.begin(); // Inicia la comunicación con el RTC
RTC.adjust(DateTime(__DATE__, __TIME__)); // Establece la fecha y hora, sincronizandola con el de el ordenador. (Comentar una vez establecida la hora)
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.begin(16, 2);
pinMode(alarma, INPUT);
pinMode(RELE, OUTPUT);
}
void loop() {
lcd.clear();
if (analogRead(alarma) < 512) { //Mientras el pulsador NO este pulsado...
DateTime now = RTC.now();
Serial.print(now.year(), DEC); // A§o
Serial.print('/');
Serial.print(now.month(), DEC); // Mes
Serial.print('/');
Serial.print(now.day(), DEC); // Dia
Serial.print(' ');
Serial.print(now.hour(), DEC); // Horas
Serial.print(':');
Serial.print(now.minute(), DEC); // Minutos
Serial.print(':');
Serial.print(now.second(), DEC); // Segundos
Serial.println();
lcd.setCursor(0, 0);
lcd.print("D:");
lcd.print(now.year(), DEC);
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.day(), DEC);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("T: ");
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
delay(1000);
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
}
else { //Cuando se pulse el pulsador...
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Escribe la hora");
delay(1000);
for (i = 0; i < 5; i++) {
char pulsacion;
lcd.setCursor(i, 1);
if (i == 2) {
lcd.print(":");
}
else {
pulsacion = Teclado1.waitForKey(); // Esperamos a que pulse un boton.
lcd.print(pulsacion); //Escribimos el el valor de pulsacion en el LCD.
switch (pulsacion) {
case '1': pulsacion1 = 1;
break;
case '2': pulsacion1 = 2;
break;
case '3': pulsacion1 = 3;
break;
case '4': pulsacion1 = 4;
break;
case '5': pulsacion1 = 5;
break;
case '6': pulsacion1 = 6;
break;
case '7': pulsacion1 = 7;
break;
case '8': pulsacion1 = 8;
break;
case '9': pulsacion1 = 9;
break;
case '0': pulsacion1 = 0;
}
switch (i) {
case 0: hor2 = pulsacion1 * 10; //Sabemos que el primer valor de los minutos sera un valor en decimas
break;
case 1: hor2 = hor2 + pulsacion1; // El segundo valor de los minutos que sera una unidades
break;
case 3: min2 = pulsacion1 * 10; //Primer valor de los segundos que sera un valor en decimas
break;
case 4: min2 = min2 + pulsacion1; //Segundo valor de los segundos que sera en unidades
break;
}
}
delay(500);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarma");
lcd.setCursor(0, 1);
lcd.print("Configurada");
delay(3000);
lcd.clear();
while (min1 != min2 || hor1 != hor2) { //Mientras la hora de la alarma escrita por el usuario, y la hora real sean diferentes,
//escribiremos la hora real y la de la alarma en la pantalla.
DateTime now = RTC.now();
Serial.print(now.year(), DEC); // A§o
Serial.print('/');
Serial.print(now.month(), DEC); // Mes
Serial.print('/');
Serial.print(now.day(), DEC); // Dia
Serial.print(' ');
Serial.print(now.hour(), DEC); // Horas
Serial.print(':');
Serial.print(now.minute(), DEC); // Minutos
Serial.print(':');
Serial.print(now.second(), DEC); // Segundos
Serial.println();
hor1 = now.hour();
min1 = now.minute();
lcd.setCursor(0, 0);
lcd.print("D:");
lcd.print(now.year(), DEC);
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.day(), DEC);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print("T: ");
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
delay(1000); // La informaci¢n se actualiza cada 1 seg.
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ES LA HORA!!");
while (analogRead(alarma) < 512) {
digitalWrite(RELE, HIGH);
delay(1000);
digitalWrite(RELE, LOW);
delay(1000);
}
delay(3000);
}//Final del else de arriba
}//Final de programa
Este código funcionaba hasta ese Error
tengo otros pero que estaban modificados
Pd: tengo pensado hacer un final con funciones xd, no soy tan rata
Pdd: uso un analogRead porque mi botón esta en el pin A1 y ya tengo la placa echa, error mío por no prestar atención, pero creo que no influye en nada
Muchísimas Gracias