Alguien me puede resolver una duda en arduino?

Iniciado por priorigi_10, 17 Febrero 2014, 23:31 PM

0 Miembros y 1 Visitante están viendo este tema.

priorigi_10

Hola
Quiero poner una pantalla lcd y un teclado numerico en una misma placa como lo hago ?
Y si hay que usar algun otro componente me podrian decir como ponerlo y programarlo?
Un saludo y gracias de antemano

engel lex

el teclado lca solo usa 6 patas si no me equivoco, cuantas usa el teclado?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

priorigi_10

Es teclado tiene para 7 pines pero no se si se usan todos

engel lex

cheque el diagrama o datasheet del teclado y el lcd para ver primero que tipo de conexion vas a hacer y como capturar los datos... en el peor es de los casos puedes usar para el lcd un 74ls595 (o hc en lugar de ls), pero es complicado, ya que tienes que saber bien la logica del lcd y que vas a convertir de datos seriales en paralelos...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Meta

#4
Cita de: engelx en 18 Febrero 2014, 00:40 AM
cheque el diagrama o datasheet del teclado y el lcd para ver primero que tipo de conexion vas a hacer y como capturar los datos... en el peor es de los casos puedes usar para el lcd un 74ls595 (o hc en lugar de ls), pero es complicado, ya que tienes que saber bien la logica del lcd y que vas a convertir de datos seriales en paralelos...

Hola:

La lógica del LCD te viene super explicado en espñol en este libro.  ::)



Cuando lo sepas, puedes conectar este LCD al al puerto paralelo y haces lo que quieras con cualquier lenguaje de programación. ;)

Hay LCD solo con protocolo del puerto serie o COM RS232, otros bajo I2C y este es en paralelo, el más rápido si se trabajan a 8 bits.

En cuanto de usar un LCD 16x2 con un teclado numérico, tengo los ejemplos para el PIC16F84A. Si los quiere te los mando por correo.


Aquí está el programa principal.
Código (asm) [Seleccionar]
; Cerradura Electrónica: la salida se activa cuando una clave de varios digitos introducida
; por teclado sea correcta. El esquema se describe en la figura 19-7.
;
; Tiene una salida "CerraduraSalida" que, cuando se habilita, activa durante unos segundos
; el electroimán de la cerradura permitiendo la apertura de la puerta:
;   - Si (CerraduraSalida) = 1, la puerta se puede abrir.
;   - Si (CerraduraSalida) = 0, la puerta no se puede abrir.
;
;Funcionamiento:
; - En pantalla visualiza "Introduzca CLAVE". Según se va escribiendo, visualiza asteriscos '*'.
; - Cuando termine de escribir la clave pueden darse dos posibilidades:
;     - Si la clave es incorrecta la cerradura sigue inactivada, en pantalla aparece el mensaje
; "Clave INCORRECTA" durante unos segundos y tiene que repetir de nuevo el proceso.
;     - Si la clave es correcta la cerradura se activa durante unos segundos y la puerta
; puede ser abierta. En pantalla aparece: "Clave CORRECTA" (primera línea) y "Abra
; la puerta" (segunda línea). Pasados unos segundos, se repite el proceso.
;
; ZONA DE DATOS **********************************************************************

LIST P=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

CBLOCK  0x0C
ENDC

; La clave puede tener cualquier tamaño y su longitud se calcula:

#DEFINE  LongitudClave (FinClaveSecreta-ClaveSecreta)
#DEFINE  CerraduraSalida PORTA,3

; ZONA DE CÓDIGOS ********************************************************************

ORG 0
goto Inicio
ORG 4
goto ServicioInterrupcion

Mensajes
addwf PCL,F
MensajeTeclee
DT "Teclee CLAVE:", 0x00
MensajeClaveCorrecta
DT "Clave CORRECTA", 0x00
MensajeAbraPuerta
DT "Abra la puerta", 0x00
MensajeClaveIncorrecta
DT "Clave INCORRECTA", 0x00
;
LeeClaveSecreta
addwf PCL,F
ClaveSecreta
DT 4h,5h,6h,0Eh ; Ejemplo de clave secreta.
DT 7h,8h
FinClaveSecreta

Inicio
call LCD_Inicializa
bsf STATUS,RP0
bcf CerraduraSalida ; Define como salida.
bcf STATUS,RP0
call Teclado_Inicializa ; Configura las líneas del teclado.
call InicializaTodo ; Inicializa el resto de los registros.
movlw b'10001000' ; Habilita la interrupción RBI y la general.
movwf INTCON
Principal
sleep ; Espera en modo bajo consumo que pulse alguna tecla.
goto Principal

; Subrutina "ServicioInterrupcion" ------------------------------------------------------
;
CBLOCK
ContadorCaracteres
GuardaClaveTecleada
ENDC

ServicioInterrupcion
call Teclado_LeeHex ; Obtiene el valor hexadecimal de la tecla pulsada.
;
; Según va introduciendo los dígitos de la clave, estos van siendo almacenados a partir de
; las posiciones RAM "ClaveTecleada" mediante direccionamiento indirecto y utilizando el
; FSR como apuntador. Por cada dígito leído en pantalla se visualiza un asterisco.
;
movwf INDF ; Almacena ese dígito en memoria RAM con
; con direccionamiento indirecto apuntado por FSR.
movlw '*' ; Visualiza asterisco.
call LCD_Caracter
incf FSR,F ; Apunta a la próxima posición de RAM.
incf ContadorCaracteres,F ; Cuenta el número de teclas pulsadas.
movlw LongitudClave ; Comprueba si ha introducido tantos caracteres
subwf ContadorCaracteres,W ; como longitud tiene la clave secreta.
btfss STATUS,C ; ¿Ha terminado de introducir caracteres?
goto FinInterrupcion ; No, pues lee el siguiente carácter tecleado.
;
; Si ha llegado aquí es porque ha terminado de introducir el máximo de dígitos. Ahora
; procede a comprobar si la clave es correcta. Para ello va comparando cada uno de los
; dígitos almacenados en las posiciones RAM a partir de "ClaveTecleada" con el valor
; correcto de la clave almacenado en la posición ROM "ClaveSecreta".
;
; Para acceder a las posiciones de memoria RAM a partir de "ClaveTecleada" utiliza
; direccionamiento indirecto siendo FSR el apuntador.
;
; Para acceder a memoria ROM "ClaveSecreta" se utiliza direccionamiento indexado con el
; el registro ContadorCaracteres como apuntador.
;
call LCD_Borra ; Borra la pantalla.
clrf ContadorCaracteres ; Va a leer el primer carácter almacenado en ROM.
movlw ClaveTecleada ; Apunta a la primera posición de RAM donde se ha
movwf FSR ; guardado la clave tecleada.
ComparaClaves
movf INDF,W ; Lee la clave tecleada y guardada en RAM.
movwf GuardaClaveTecleada ; La guarda para compararla después.
movf ContadorCaracteres,W ; Apunta al carácter de ROM a leer.
call LeeClaveSecreta ; En (W) el carácter de la clave secreta.
subwf GuardaClaveTecleada,W ; Se comparan.
btfss STATUS,Z ; ¿Son iguales?, ¿Z=1?
goto ClaveIncorrecta ; No, pues la clave tecleada es incorrecta.
incf FSR,F ; Apunta a la próxima posición de RAM.
incf ContadorCaracteres,F ; Apunta a la próxima posición de ROM.
movlw LongitudClave ; Comprueba si ha comparado tantos caracteres
subwf ContadorCaracteres,W ; como longitud tiene la clave secreta.
btfss STATUS,C ; ¿Ha terminado de comparar caracteres?
goto ComparaClaves ; No, pues compara el siguiente carácter.
ClaveCorrecta ; La clave ha sido correcta. Aparecen los mensajes
movlw MensajeClaveCorrecta ; correspondientes y permite la apertura de la
call LCD_Mensaje ; puerta durante unos segundos.
call LCD_Linea2
movlw MensajeAbraPuerta
call LCD_Mensaje
bsf CerraduraSalida ; Activa la cerradura durante unos segundos.
goto Retardo
ClaveIncorrecta
movlw MensajeClaveIncorrecta
call LCD_Mensaje
Retardo
call Retardo_2s
call Retardo_1s
InicializaTodo
bcf CerraduraSalida ; Desactiva la cerradura.
clrf ContadorCaracteres ; Inicializa este contador.
movlw ClaveTecleada ; FSR apunta a la primera dirección de la RAM
movwf FSR ; donde se va a almacenar la clave tecleada.
call LCD_Borra ; Borra la pantalla.
movlw MensajeTeclee ; Aparece el mensaje para que introduzca la clave.
call LCD_Mensaje
call LCD_Linea2 ; Los asteriscos se visualizan en la segunda línea.
FinInterrupcion
call Teclado_EsperaDejePulsar
bcf INTCON,RBIF
retfie

INCLUDE  <TECLADO.INC>
INCLUDE  <LCD_4BIT.INC>
INCLUDE  <LCD_MENS.INC>
INCLUDE  <RETARDOS.INC>

; Las posiciones de memoria RAM donde se guardará la clave leída se definen al final, después
; de los Includes, ya que van a ocupar varias posiciones de memoria mediante el
; direccionamiento indirecto utilizado.

CBLOCK
ClaveTecleada
ENDC

END ; Fin del programa.


Si es para Arduino, aquí hay ejemplos.
http://playground.arduino.cc/Main/KeypadTutorial#.UwKr3oVw7G0
            #include <Keypad.h>
            // DECLARACIÓN DE PINES
            const int ledrpin = 11; // Led rojo
            const int ledgpin = 12; // Led verde
            const int speakerpin = 3; // Speaker
            const int botonpin = 2; // Botón
            const int zumbpin = 14; // Zumbador
            int estadoboton = 0; // Estado del botn por defecto
            // DECLARACIÓN DEL TECLADO MATRICIAL
            const byte ROWS = 4; // Filas
            const byte COLS = 3; // Columnas
            //Mapa de caracteres
            char keys[ROWS][COLS] = {
              {'1','2','3'},
              {'4','5','6'},
              {'7','8','9'},
              {'*','0','#'}
            };
            byte rowPins[ROWS] = { 4, 5, 6, 7 };  // Declaracion de pines de las filas
            byte colPins[COLS] = { 8, 9, 10 };   // Declaracion de pines de las columnas
            Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );  // Crear teclado
            //OBTENCION DE CARACTERES
            int caracter = 0;
            char clave [10] ;
            String claveint;
            String claveguardada = "123456"; // Clave por defecto
            int reset = 0;
            void setup()
            {
            // CONFIGURACIÓN DE PINES
              pinMode(ledrpin,OUTPUT);
              pinMode(ledgpin,OUTPUT);
              pinMode(speakerpin,OUTPUT);
              pinMode(botonpin,INPUT);
              pinMode(zumbpin,OUTPUT);
              Serial.begin(9600); //Configuración de serial para desarrollar
            }
             
            void loop()
            {
              //BOTÓN DE RESET
              if (reset == 1) { // Si el botón reset fue pulsado
                digitalWrite(ledgpin,HIGH);
              }
              if (reset == 0) { // Si el botón de reset estaba abierto
                digitalWrite(ledgpin,LOW);
              }
              char key = kpd.getKey(); //Obtener tecla pulsada con la función "kpd.getKey()
              estadoboton = digitalRead(botonpin);
              if (estadoboton == HIGH) { //Si se ha pulsado el botón
                reset = 1;
                for (int i=0; i<300; i++) {  // Generar sonido con Speaker (Reset)
                  digitalWrite(speakerpin, HIGH);
                  delayMicroseconds(300);
                  digitalWrite(speakerpin, LOW);
                  delayMicroseconds(200);
                }
                delay(100);
                for (int i=0; i<300; i++) { 
                  digitalWrite(speakerpin, HIGH);
                  delayMicroseconds(300);
                  digitalWrite(speakerpin, LOW);
                  delayMicroseconds(200);
                }
                delay(100);
                for (int i=0; i<300; i++) { 
                  digitalWrite(speakerpin, HIGH);
                  delayMicroseconds(300);
                  digitalWrite(speakerpin, LOW);
                  delayMicroseconds(200);
                }
                delay(100);
                for (int i=0; i<300; i++) { 
                  digitalWrite(speakerpin, HIGH);
                  delayMicroseconds(300);
                  digitalWrite(speakerpin, LOW);
                  delayMicroseconds(200);
                }
                delay(100);
                for (int i=0; i<600; i++) { 
                  digitalWrite(speakerpin, HIGH);
                  delayMicroseconds(300);
                  digitalWrite(speakerpin, LOW);
                  delayMicroseconds(200);
                }
                delay(100);
              }
                   
                   
             
             
              if(key)  // Si hay una tecla pulsada
              {
                      caracter++; //Añadir un caracter a la suma
                      if (caracter == 10){ //Si se pulsan 10 caracteres cancelar la obtención y resetear los valores (Cancelar)
                        digitalWrite(ledrpin,HIGH);
                        claveint = 0;
                        caracter = 0;
                        for (int i=0; i<600; i++) { // Generar sonido con Speaker (Cancelar)
                          digitalWrite(speakerpin, HIGH);
                          delayMicroseconds(300);
                          digitalWrite(speakerpin, LOW);
                          delayMicroseconds(200);
                        }
                        digitalWrite(ledrpin,LOW);
                      }
                    else if(key == '*') { //Si se pulsa la tecla '*' cancelar la obtención y resetear los valores (Cancelar)
                      digitalWrite(ledrpin,HIGH);
                      claveint = 0;
                      caracter = 0;
                      for (int i=0; i<600; i++) { // Generar sonido con Speaker (Cancelar)
                        digitalWrite(speakerpin, HIGH);
                        delayMicroseconds(300);
                        digitalWrite(speakerpin, LOW);
                        delayMicroseconds(200);
                      }
                      digitalWrite(ledrpin,LOW);
                    }
                   else if(key == '#') { //Si se pulsa la tecla '#' comprobar la contraseña introducida(Comprobación) o guardar la contraseña(Reset)
                      if (reset == 1) { //Si fue pulsado el botón de Reset guardar la contraseña introducida
                        claveguardada = claveint;
                        claveint = 0;
                        caracter = 0;
                        reset = 0;
                        digitalWrite(ledgpin,HIGH);
                        for (int i=0; i<300; i++) {  // Generar sonido con Speaker (Correcto)
                          digitalWrite(speakerpin, HIGH);
                          delayMicroseconds(300);
                          digitalWrite(speakerpin, LOW);
                          delayMicroseconds(200);
                        }
                        delay(100);
                          for (int i=0; i<300; i++) {
                            digitalWrite(speakerpin, HIGH);
                            delayMicroseconds(300);
                            digitalWrite(speakerpin, LOW);
                            delayMicroseconds(200);
                          };
                        digitalWrite(ledgpin,LOW);
                      }
                    else  if (claveint == claveguardada) { // Si la contraseña introducida(claveint) es igual a la guardada(claveguardada) ->Encender led verde y zumbador
                        claveint = 0;
                        caracter = 0;
                        digitalWrite(ledgpin,HIGH);
                        digitalWrite(zumbpin,HIGH);
                        for (int i=0; i<300; i++) {  // Generar sonido con Speaker (Correcto)




http://www.gradotelecovigo.com/viewtopic.php?f=109&t=1738


Un saludo.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/