Ir al contenido principal

Teclado membrana 4x4 en Raspbery con Perl

Cześć !!

En esta entrega, de Raspberry y Perl (mi lenguaje preferido tipo script) les contare cómo reconocer los dígitos de un teclado membrana 4x4. Estos son los mas baratos que hay en el mercado y lucen mas o menos así.


Lo primero que debemos hacer es que estos teclados no traen un circuito interno, o resistores, capacitores, etc. Son mas simples botones que al ser presionados unen dejan pasar la corriente de un lado al otro. Las conexiones estan distribuidas como una matriz,  de izquierda a derecha en el bus, los 4 primeras corresponden a las filas iendo conectadas a los numeros 1,4, 7 y * respectivamente mientras que el resto corresponde a la fila *,0,# y D. Al presionar por ejemplo la tecla 1, la corriente pasara a travez de la fila 1 y la cola 1 o lo que en el bus seria el 1 y el 5(de izquierda a derecha), sea el sentido que sea.

Teniendo claro lo anterior, pasamos a la conexión del tecladito a la Raspberry. Las conexiónes de la 1,2,3,4 del bus irán conectadas a los pins 7,11,13,15 de la board(ojo, no confundir con los pins GPIO) y los 5,6,7,8 a los 12,16,18,22.

Pasamos al código en Perl, previamente debemos haber instalado la libreria HIPI (que explique en el ultimo post).

#!/usr/bin/perl

use HiPi::BCM2835;
use HiPi::Constant qw( :raspberry );
use strict;

#Iniciamos objeto BCM
my $bcm = HiPi::BCM2835->new()
|| die "No se pudo iniciar ";

my @keypad=[
        [1,2,3,'A'],
        [4,5,6,'B'],
        [7,8,9,'C'],
        ['*',0,'#','D'] ];

#pinboard filas [7,11,13,15] columnas[12,16,18,22], los pasamos a pin GPIO internos
my @fil=[4,17,27,22];
my @col=[18,23,24,25];

#Establecemos las columnas como de SALIDA y el voltage.
for (my $j=0; $j <= 3; $j++) {
        $bcm->gpio_fsel($col[0][$j],RPI_PINMODE_OUTP);
        $bcm->gpio_write($col[0][$j],1);
        }

#Establecemos como de entrada las filas, y PUD
for (my $i=0; $i <= 3; $i++) {
        $bcm->gpio_fsel($fil[0][$i],RPI_PINMODE_INPT);
        $bcm->gpio_set_pud($fil[0][$i],RPI_PUD_UP);
        }


while(1){
        for (my $j=0; $j <= 3; $j++) {
                #Establecemos el voltage a 0
                $bcm->gpio_write($col[0][$j],0);
                        for (my $i=0; $i <= 3; $i++) {
                                #verificamos que la fila no se haya desactiado,
                                if(($bcm->gpio_lev($fil[0][$i])) == 0){
                                         # si se desactivo imprima el numero de la matrix
                                        print "digitos :$keypad[0][$i]->[$j]\n";
                                        while(($bcm->gpio_lev($fil[0][$i]))== 0  ){
                                                }
                                }
                }
                #Establecemos el voltage a 3.3 V nuevamente a la col
                $bcm->gpio_write($col[0][$j],1);
        }
}

A continuación la explicacion:

Dado que si presiono 1, el voltage pasara por la conexion del bus en 1 y 5(7, 12 en pin de board y 4 y 18 en los pins GPIO), la conexion del bus 1 sea de entrada y la 5 de salida,  asi yo sepa que mi pin 1 esta energizado, que hay un paso de corriente, se que el número puede ser 1,4,7,* pero no puedo saber mas.

El algoritmo establece los pins de columna como ,RPI_PUD_UP, una propiedad que desactiva y activa en microsegundos el voltage, a continuacion, procedemos a desactivar el voltage de la cola 1(conexion 5 de bus del tecladito) y verificamos el voltage de la fila1(conexion 1,2,3,4 del bus)  con $bcm->gpio_lev(), si este se desactivó, hemos encontrado la posicion exacta(i y j) de que numero se ha presionado y procedemos  a imprimirlo(de la matrix "$keypad). Tan pronto salímos, activamos el voltage a 3.3 con $bcm->gpio_write($col[0][$j],1);.

Espero les haya servido.  Do widzenia

Comentarios

Publicar un comentario

Entradas populares de este blog

Asterisk con WebRTC, TLS, libsrtp

  Cześć !! En esta ocasión vamos a explicar cómo configurar Asterisk para que desde un teléfono web podamos sacar y recibir llamadas. Se usará los siguientes componentes de Asterisk: libsrtp tls Asterisk module http Antes que nada debemos tener un teléfono web(obviamente), en el laboratorio vamos a usar Sipml5 en el siguiente link : https://www.doubango.org/sipml5/call.htm El siguiente paso es instalar libsrtp del enlace: https://github.com/cisco/libsrtp . #git clone https://github.com/cisco/libsrtp.git #cd libsrtp #./configure #make && make install Luego verificamos tener los siguientes módulos activos para compilar en menuconfig de Asterisk: res_crypto res_http_websocket res_srtp Comunmente si res_crypto no está selecionable, le falta la dependencia openssl-devel o su equivalente dependiendo del sistema que tengan. Cuando estemos seguros que están cargados en Asterisk continuamos con la instalación de los certificados locales(Si usa Lets'encrypt omitir la generación de c

GNUDIALER en Asterisk

Hola Como están? GNUDIALER es un software de marcacion predictiva que nos ofrece varios modos, prediccion, modo automatico, modo preview, ademas de incluir un CRM y es muy dinamico. A pesar de que en el mercado existen muchos software de este tipo sean GNU o pagos, GNUDIALER es muy efectivo y lo mejor es GNU. Eso quiere decir que puedes modificarlo con un poco de conocimiento en lenguaje C y asterisk, bueno uno poco no, mucho conocimiento. He usado VICIDIAL en otras ocasiones y es también verdaderamente interesante, sin embargo como todo en este planeta hay ventajas y desventajas. Una de las ventajas que tiene sobre VICIDIAL(hasta el momento he podido observar en VICIDIAL) es que es mucho mas sencillo de administrar via web, puedo tener un numero ilimitado de campos en mi campaña,  puedo editar mis scripts ami antojo via web html(teniendo un conocimiento html). Desventajas es q aveces se puede comportar algo inestable si no tengo en cuenta el ratio vs cantidad de lineas vs agentes di

Instalar Queuemetrics desde 0.

Cześć. Queuemetrics a pesar de estar casi personalizada su  instalación a Centos, también puede instalarse en otros sistemas operativos, de hecho en cualquier Linux podría hacerse. A continuación describo los pasos para hacerlo. En este demo se usó Suse. Descargar los siguientes paquetes: - Queuemetrics(obviamente XD)      link http://queuemetrics.loway.it/download.jsp      formato tar.gz - Mysql connector      link https://dev.mysql.com/downloads/connector/j/      formato  "platform independent" tar.gz      debe registrarse previamente. - Tomcat      link http://tomcat.apache.org/      formato tar.gz      en este manual se instaló la version 8.5.37 - JDK      link https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html      formato tar.gz      version linux x64 Instalar: - JDK Descomprimir #tar -zxvf jdk-8u201-linux-x64.tar.gz Mover jdk a /usr/local/ #mv jdk1.8.0_201 /usr/local/ - Tomcat Descomprimir #tar -zxvf a