martes, 11 de junio de 2013

PROGRAMANDO UN BOTÓN


OBJETIVOS
  • Crear un programa Shell que capture cuando ha sido pulsado un botón mediante sysfs.
  • Crear un programa Shell que capture cuando ha sido pulsado un botón mediante el comando gpio de la librería WiringPi.
  • Crear un programa en C que capture cuando ha sido pulsado un botón mediante la librería WiringPi
CONSTRUCCIÓN DEL CIRCUITO
Para comprender el circuito, primero hay que analizar que el botón que tiene dos patillas y cuando se aprieta, deja pasar la corriente. Cada una de estas patillas irá a parar a una línea diferente de la protoboard, luego, una de ellas irá conectada a un pin programable y otra se podrá conectar al pin de tierra o al pin de 3.3v.
Para proteger Raspberry Pi de sobretensiones se recomienda la utilización de resistencias, por ello, ha sido utilizado una resistencia de 1 KΩ.
Cuando se desea capturar si ha sido pulsado habrá que tener muy en cuenta si una de las patillas está conectada a tierra o a 3.3v, ya que esto se deberá especificar en el programa, mediante pull down ó pull up. El pin programable se deberá definir de entrada y su valor será 0 hasta que sea pulsado el botón. Por tanto, para crear un programa que capture cuando un botón es pulsado deberá entrar en un bucle infinito hasta que el valor del pin programable input valga 1.
Programa botonsysfs.sh
 
#!/bin/bash
#################################################################
##                                                             ##
## botonsysfs.sh                                               ##
##                                                             ##
## Este script controla el botón que indica el usuario         ##
## mediante sysfs, una patilla debe estar a la linea continua  ##
## de 3.3v y la otra al pin programable, insertando una        ##
## resistencia de 1Kohm                                        ##
##                                                             ##
## Autor: M.Alvarez (miguelwarez@gmail.com) 2013               ##
## Más ejemplos en http://rpiplus.sourceforge.net              ##
##                                                             ##
## License GPLv3 http://www.gnu.org/licenses/gpl-3.0.html      ##
##                                                             ##
## Para ejecutar hay que ser root (sudo su) y escribir         ##
## ./botonsysfs.sh                                             ##
##                                                             ##
#################################################################
#obtener numero de pin al que se conecta el boton
read -p "Introduce el boton que deseas controlar con numeracion BCM " BOTON
echo "Controlando el BOTON $BOTON"
#comprobar que el boton no se esta utilizando
if [ -e /sys/class/gpio/gpio$BOTON ]
then
      TIPO=`cat /sys/class/gpio/gpio$BOTON/direction`
      echo "Esta siendo utilizado el pin en una operacion $TIPO"
      VALOR=`cat /sys/class/gpio/gpio$BOTON/value`
      echo "El valor actual del pin es $VALOR"
      exit
fi
#esperar a obtener 1 en el fichero valor
`echo $BOTON >/sys/class/gpio/export`
`echo in >/sys/class/gpio/gpio$BOTON/direction`
READ=0
while [ $READ -eq 0 ]
do
      READ=`cat /sys/class/gpio/gpio$BOTON/value`
done
echo "El boton ha sido pulsado"
`echo $BOTON >/sys/class/gpio/unexport`
Programa botongpio.sh
 
#!/bin/bash
#################################################################
##                                                             ##
## botongpio.sh                                                ##
##                                                             ##
## Este script captura cuando un botón es pulsado mediante     ##
## el comando gpio facilitado por la libreria wiring PI        ##
##                                                             ##
## Autor: M.Alvarez (miguelwarez@gmail.com) 2013               ##
## Más ejemplos en http://rpiplus.sourceforge.net              ##
##                                                             ##
## License GPLv3 http://www.gnu.org/licenses/gpl-3.0.html      ##
##                                                             ##
## Para ejecutar ./botongpio.sh                                ##
##                                                             ##
#################################################################
#obtener numero de pin al que se conecta el boton
read -p "Introduce el boton que deseas controlar con numeracion BCM " BOTON
gpio -g mode $BOTON in
gpio -g mode $BOTON down #conectado a 3.3v
#gpio -g mode $BOTON up #conectado a tierra
echo "Controlando el BOTON $BOTON"
while ((1));
do
     READ=`gpio -g read $BOTON`
     if [ $READ -ne "0" ] #conectado a 3.3v
     #if [ $READ -eq "0" ] #conectado a tierra
     then
            echo "Pulsado el boton"
           break
     fi
done
Programa boton.c
 
/****************************************************************
**                                                             **
** boton.c                                                     **
**                                                             **
** Este programa captura cuando un botón es pulsado            **
** mediante la libreria Wiring Pi. Para la ejecución del       **
** programa es necesario que sea ejecutado como root           **
**                                                             **
** Autor: M.Alvarez (miguelwarez@gmail.com) 2013               **
** Más ejemplos en http://rpiplus.sourceforge.net              **
**                                                             **
** License GPLv3 http://www.gnu.org/licenses/gpl-3.0.html      **
**                                                             **
** Para compilar:                                              **
** gcc -o boton -l wiringPi boton.c                            **
**                                                             **
** Para ejecutar:                                              **
** sudo ./boton                                                **
**                                                             **
****************************************************************/
#include <wiringPi.h>
#include<stdio.h>
#include<stdlib.h>
main(){
      int boton;
      printf("Introduce el botón que deseas controlar\n");
      scanf("%d",&boton);
      printf("Controlando el boton %d\n",boton);
      if (wiringPiSetupGpio() == -1){
            perror("Error de inicializacion\n");
            exit (1) ;
      }
      pinMode (boton, INPUT) ;
      pullUpDnControl(boton,PUD_DOWN); //conectado a 3.3v
//    pullUpDnControl(boton,PUD_UP); //conectado a tierra
      while(1){
            if(digitalRead(boton)!=0){ //conectado a 3.3v
            //if(digitalRead(boton)==0){ //conectado a tierra
                  printf("Boton pulsado\n");
                  exit(0);
            }
      }
}

No hay comentarios:

Publicar un comentario