Estoy realizando un proyecto cuenta atras con arduino y un teclado 3x4 donde quiero con la tecla # borrar los datos ingresados por el teclado, y también limitar que solo se pueda ingresar números 0 - 99 no números mayores a 99 si alguien me puede ayudar le agradeciese toda la vida
//aqui no se como limitar el ingreso de 0-99
if(key>='0' && key <= '9'){
cadena[index] =key;
index++;
conta = atof(cadena);// * 60;
reversa = conta;
}
//aqui no logro que se borren los datos ingresados
if ((key == '#')){
//cadena[index]=conta;
conta==0;
//index --;
}
if (key == '*'){
salida = 1 - salida;
}
//aqui inicio el contador hacia atras pero no logro hacer que cuando
//el valor de reversa llegue a 0 conta se haga 0
if (salida == 1)
{
if(reversa == 0){
reversa == 0;
conta ==0;
salida = 1 - salida;
}else{
reversa--;
delay(1000);
}}
Hola L3ON87!
Mira, la verdad es que yo no se programar en Arduino, pero si se programar en bastantes otros lenguages, empezando por algo tan extraño como Fortran.
Mi sugerencia primero es dividir el problema en subproblemas, y resolverlos uno a uno (en Chile dicen que "los piojos se matan de a uno"
asi que
1.) haz un bucle para leer el teclado y guardar las teclas
verifica que funcione, si no, vuelve a 1.)
2.) limita la entrada a las teclas numericas, anulando las no numericas y actualizando el contador de datos entrados
verifica que funcione, si no, vuelve a 1.)
3.) cuando esto funcione limita la entrada a dos cifras solamente
verifica que funcione (si entras "1a4" te queda 14), si no, vuelve a 1.)
4.) el paso siguiente, tienes que modificar el 2.), haciendo que la # borre la ultima entrada y haga -1 en el indice. Si el indice no tiene el valor 0 (primer digito) o 1 (segundo digito), indice = 0
pero lo importante es matar los piojos de a uno
Ok lo estoy intentando o alguien que entre a este post tiene algún libro de referencia donde exista un ejempo donde pueda ver la manera de como resolver mi problema
Ya solucione una parte solo necesito que con # borre los datos almacenados help
Yo no puedo ayudarte porque no veo todo el código sino parte del mismo.
Muestra todo el código (usa tags como con el que posteaste) y te aconsejaré.
Estas usando la librería keypad.h?
Postea todo el código y con gusto te ayudo.
NOTA: por cierto, creo haberte enviado un privado y si no lo hice lo hago ahora público. Edita tu título ya que AYUDA con teclado 3x4 no es un título permitido según las Normas del foro en el punto 5.
**5. Piensa un título y descriptivo **
Trata de resumir tu problema con un título inteligente, útil e informativo.
Un título útil salta a la vista de las personas que podrían conocer la respuesta. Los títulos inútiles son los que deberías evitar.
Ejemplos de títulos inútiles que deberías evitar:
• ERROR EN CODIGO, AYDUA URGENTE
• Problema al programar
• Tengo un error
• Error
• Tendré problemas?
• Novato en apuros
• POR FAVOR NECESITO AYUDA RAPIDO!!!!
Ejemplo de un buen título:
vas abajo a la derecha, dice More, luego Modify, y editas el titulo y le pones Teclado 3x4 y lo que gustes.
Lo mas indicativo de tu problema.
De paso lee las normas y si lo hiciste, hazlo de nuevo.
Ok amigo gracias no sabia eso del titulo, aquí pongo el código completo gracias por su ayuda
int index = 0;
char cadena[2];
int salida = 0;
int estado = 0;
int conta = 0;
int seg = 0;
int reversa = 0;
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};
byte colPins[COLS] = {5, 4, 3};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup()
{
keypad.setHoldTime(500);
keypad.setDebounceTime(250);
Serial.begin(9600);
}
void loop(){
char key = keypad.getKey();
if(key>='0' && key <= '9'){
cadena[index] =key;
index++;
conta = atof(cadena);// * 60;
reversa = conta; }
if ((key == '#')){
//cadena[index]=conta; aqui el problema lograr hacer 0 el vector ingresado
conta==0;
//index --;
}
if (key == '*'){
salida = 1 - salida; }
if (salida == 1) {
if(reversa == 0){
reversa == 0;
salida = 1 - salida; }
else{
reversa--;
delay(1000); }}
Serial.println(reversa);
}
Al código le falta el include de la librería
#include <Keypad.h>
o no lo copiaste?
Se me paso perdon lo que necesito es que los numeros ingresados en cadena[index] se reseteen los valores que contienen dentro
Logre borrar los datos de esta manera gracias a los que respondieron fin de semana subo el proyecto y explico de que trata gracias
if (key == '#'){
if (conta!=0){
index --;
cadena[index] =0;
conta = atof(cadena);
reversa = conta;}}
Vaya, te había respondido algo pero no salió. La mala costumbre de pensar que cuando le doy ENTER el mensaje sale.
En fin.. era para decirte que el número lo terminas teniendo en conta y tu tenias conta == 0 y que debe ser conta = 0;
Nada mas.
No se para borras la cadena o ese tambien formaba parte.
La cadena la puedes inicializar de otro modo.
cadena[2] = " "; // 2 espacios
esto es lo mismo que lo que hiciste