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

Vtiger clic-to-call Asterisk

Cześć, Jak Sie Masz ludzie?. He vuelto con un nuevo manual muy sencillo de integración Asterisk con el popular Vtiger a traves de un conector en Java. Dependencias previas, bueno tener Asterisk 11 y Vtiger 7.3 funcionando, si las tienen, sin mas preambulos manos a la obra. Instalar dependencias.  #yum -y install java-11-openjdk-devel Descargar conector #cd /usr/src/ # mkdir VtigerAsteriskConnector_1.4.2 #cd VtigerAsteriskConnector_1.4.2 #wget https://sourceforge.net/projects/salesplatform/files/addons/SPAsteriskConnector-1.4.2.zip/download  -O SPAsteriskConnector-1.4.2.zip # unzip SPAsteriskConnector-1.4.2.zip Editar la configuración del archivo conf/SPVtigerAsteriskConnector.properties los siguientes parametros: AsteriskUsername   = vtigerclient1 AsteriskPassword   = vtiger2020 VtigerSecretKey = vtiger2020* Agregar a manager.conf [vtigerclient1] secret = vtiger2020 deny=0.0.0.0/0.0.0.0 permit=0.0.0.0/0.0.0.0 read = system,call,log,verbo...

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 In...

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...