Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

18/01/2015 #1


problemas con teclado y arduino mega
Hola amigos, espero me puedan ayudar, les comento, primeramente soy novoto en esto y es posible que diga alguna tonteria, se me encomendo hacer el siguiente trabajo en arduino mega, ingresar dos numers via teclado y visualizado en un lcd, el numero 1 a la izquierda y el numero 2 a la derecha, estos numeros debe considerar decimal y en el futuro sumarlos, miltiplicar, dividirlos y restarlos

La filosofia y forma de ingreso es la siguiente.

1.- Para ingresar el nuemro 1 se debe presionar primero la letra A y luego ingresar numero (presionando los cuatro digitos y luego el = para dividirlospor 100 para hacer con dos digitos decimal)

2.- Para ingresar el nuemero se debe presionar primero la letra B y luego ingresar numero (presionando los cuatro digitos y luego el = para dividirlospor 100 para hacer con dos digitos decimal)


3.- En ambos casos al presionar * se debe dejar en blanco los espacios

Ques lo que he ehcho, busque en internert y he estudiado algo de estos bichos, encontre un video de una calculadora y realice las modificaciones necesarias, hasta aqui sin problemas, todo se dificultad cuando debo hacer que se presione la letra A, aqui estoy entrampado,adjunto codigo de lo realizado hasta el momento espero me puedan ayudar

Código:
#include <Keypad.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(23, 22, 27, 26, 25, 24);


long Num1 = 0;
long Num2 = 0;
double finNum1 = 0;
double finNum2 = 0;
double Div = 100;

char teclado;
const byte ROWS = 4;
const byte COLS = 4;
char tecla;

char keys[ROWS][COLS] = {
  {'1','2','3','+'},
  {'4','5','6','-'},
  {'7','8','9','*'},
  {'C','0','=','/'}
};
byte rowPins[ROWS] = {35, 34, 33, 32}; //coneccion de pines fila teclado
byte colPins[COLS] = {31, 30, 29,28}; //coneccion de pines columnas teclado

Keypad customKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); 

void setup()
{
    lcd.begin(16, 2);
    lcd.setCursor(0,0);
    lcd.print("Num 1");
    lcd.setCursor(10,0);
    lcd.print("Num 2");
}

void loop()
{
      teclado = customKeypad.getKey();
  switch(teclado) 
  {
    case '0' ... '9': 
    lcd.setCursor(0,2);
    Num1 = Num1* 10 + (teclado - '0');
    lcd.print(Num1);
    break;

    case '=':
    Num1 = (finNum1 != 0 ? finNum1 : Num1);
    lcd.setCursor(0,1);
    finNum1 = (float)Num1 / (float)Div;
    lcd.print(finNum1);
    Num1 = 0;
    break;

  case 'C':
    finNum1 = 0;
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Num 1");
    lcd.setCursor(10,0);
    lcd.print("Num 2");
    break;
  }
  }
Javier
19/01/2015 #2

Avatar de JoaquinFerrero

Perdón, pero... ¿esto es correcto?
Código PHP:
    case '0' ... '9'
Creo que no. Creo que debes escribirlo de esta manera:
Código PHP:
        case '0'
        case 
'1'
        case 
'2'
        case 
'3'
        case 
'4':
        case 
'5':
        case 
'6':
        case 
'7':
        case 
'8':
        case 
'9'
19/01/2015 #3


JoaquinFerrero dijo: Ver Mensaje
Perdón, pero... ¿esto es correcto?
Código PHP:
    case '0' ... '9'
Creo que no. Creo que debes escribirlo de esta manera:
Código PHP:
        case '0'
        case 
'1'
        case 
'2'
        case 
'3'
        case 
'4':
        case 
'5':
        case 
'6':
        case 
'7':
        case 
'8':
        case 
'9'
Por lo menos funciona, pero lo modificare y comento

Javier
19/01/2015 #4


JoaquinFerrero, realice los cambios indicados y funciona de las dos formas, por lo menos en esta parte del codigo no se mas adelante

javier
16/07/2016 #5


Hola necesito ayuda con un array: Encontré este código (que adjunto) que me ayuda bastante, pero en este ejemplo solamente se usa una linea de código para verificar si los dígitos introducidos con un teclado 4x4 para arduino coinciden o no con una determinada "contraseña" dada, sin embargo, en mi caso lo que tengo es una lista de códigos y necesito que al introducir un código con el teclado, si dicho código existe en la lista me devuelva el nombre que está asociado a dicho código.

Bien este es el código que estoy trabajando como base (lo dejo original con la linea de código de la contraseña) y abajo les dejo mi lista para ver si me pueden orientar como construir un array que me permita sacar en monitor serial el nombre asociado a dicho código...
Código:
#include <Keypad.h> //llama a la librería Keypad.h
 
char contrasena[]="2222";  //aquí escribimos la contraseña de 4 dígitos
char codigo[4];            //Cadena donde se guardaran los caracteres de las teclas presionadas
int cont=0;          //variable que se incrementara al presionar las teclas



const byte ROWS = 4; //Numero de filas del teclado que se esta usando
const byte COLS = 4; //Numero de columnas del teclado que se esta usando
 
char hexaKeys[ROWS][COLS] =  //Aquí pondremos la disposición de los caracteres tal cual están en nuestro teclado
{
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
 
byte rowPins[ROWS] = {9, 8, 7, 6}; //Seleccionamos los pines en el arduino donde iran conectadas las filas
byte colPins[COLS] = {5, 4, 3, 2}; //Seleccionamos los pines en el arduino donde iran conectadas las filas
 
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //inicializa el teclado
 
void setup()
{
  pinMode(13, OUTPUT); //Pin 13 como salida
  Serial.begin(9600); //inicializar puerto serie
}
 
void loop()
{
  char customKey = customKeypad.getKey(); //se guarda en la variable customKey el caracter de la tecla presionada
  if (customKey != NO_KEY)         //se evalúa si se presionó una tecla
  {
    codigo[cont]=customKey;          //se guarda caracter por caracter en el arreglo codigo[]
    Serial.println(codigo[cont]);    //se imprime en el puerto serie la tecla presionada
    cont=cont+1;              //incrementamos la variable cont
    if(cont==4)          //si ya fueron presionadas 4 teclas se evalúa si la contraseña es correcta
    {
      if(codigo[0]==contrasena[0]&&codigo[1]==contrasena[1]&&codigo[2]==contrasena[2]&&codigo[3]==contrasena[3])
      {
        digitalWrite(13,!digitalRead(13));        //si la contraseña fué correcta se enciende o se apaga el led del pin13
      }
      cont=0;  //resetear a 0 la variable cont
    }
  }
}
Y esta es mi lista de códigos y el nombre asociado a este que necesito sacar por el monitor serial.
A001= "Ferti";
A002= "Maleza";
A003= "Fito";
A004= "Muestra";
A005= "Laborato";
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Arduino y Raspberry Pi

Cerrar
Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.