lunes, 1 de diciembre de 2014

Trabajando con pulsadores. Uso de If ..

Hola de nuevo.

Ahora que sabemos como funciona el hardware necesario para implementar un pulsador, vamos a ver un ejemplo de programación sencillo para leer el estado de un pulsador.

En este punto necesitaremos introducir una nueva referencia del lenguaje de programación de Arduino .El condicional if.

Esta sentencia siempre va acompañada de unos comparadores, que son los que verifican que la condición expuesta se cumpla. Un ejemplo:



if (x == 10)                // condición que debe comprobar
{ 
digitalWrite(pin1, HIGH);
} // Entre estos corchetes introducimos todas las acciones que queremos que se ejecuten si se cumple la condición



Este sencillo ejemplo verifica si la variable X es igual a 10. En caso de que se cumpla, pondrá a "1" el pin 1. Si la condición se cumple el programa ejecutará la parte de programa que se encuentra       entre { }.

¿Qué clase de comparaciones podemos realizar? Las siguientes:

x = = y , (x es igual que y)
x ! = y,   (x no es igual que y )
x > y ,    (x es mayor que y)
x < y,     (x es menos que y)
x >= y,   (x es igual o mayor que y)
x <=y,    (x es igual o menor que y)

Es importante no confundir x=y, con x==y. En el primer caso , no es tamos comparando x con y, sino dando directamente a x el calor de y. Con lo que si estuviésemos dentro de la comparación ,ésta siempre se cumpliría.

Un ejemplo completo, que active una salida durante dos segundos cuando pulsamos el pulsador.



//Ejemplo 1.3a Ejemplo para programar una entrada de Arduino que obedece a un 
//pulsador
//La salida permanecera activa durante 2 segundos despues de cada pulsacion

int pulsador = 2; //entrada de arduino a la que conectaremos nuestro pulsador
int led = 8; // salida de Arduino en la que conectaremos el led

void setup()
{
  pinMode(pulsador,INPUT); //Definimos el pulsador como entrada. Esta conectado                               //a resistencia pull-down  
  pinMode(led,OUTPUT);     //Definimos el led como salida
}

void loop()
{
if ( digitalRead(pulsador) == HIGH )
{

digitalWrite(led,HIGH);
delay (2000);               // lo mantenemos encendido 2 segundos
digitalWrite(led,LOW);
}
}


El esquema eléctrico del ejemplo es el siguiente:




Un ejemplo de disposición en la protoboard podría ser:


El sketch verificado lo puedes descargar de:

Ejemplo 1.3a Pulsador simple


Ahora, sí ha quedado claro el ejemplo podríamos darle una vuelta más al ejemplo de "la ola", y hacer que se iniciase con la pulsación del pulsador. Intentadlo antes de copiar el ejemplo. Mi propuesta para conseguirlo sería esta:


//Ejemplo1.3b Modificacion del ejemplo de la ola//para conseguir que la activacion responda a la pulsacion
int d=200; // variable de tipo integer, que define el tiempo de delay
int pulsador = 2; //entrada de arduino a la que conectaremos nuestro pulsador
int led = 8; // salida de Arduino en la que conectaremos el led

void setup()
{
  pinMode(pulsador,INPUT); //Definimos el pulsador como entrada. Esta conectado                               //a resistencia pull-down  

  pinMode(led,OUTPUT);     //Definimos el led como salida  
  pinMode(2,OUTPUT);       //Pin 2 conectado al led 1, definido como salida  
  pinMode(3,OUTPUT);       //Pin 3 conectado al led 2, definido como salida  
  pinMode(4,OUTPUT);       //Pin 4 conectado al led 3, definido como salida  
  pinMode(5,OUTPUT);       //etc...
}
void loop()
{
  if ( digitalRead(pulsador) == HIGH )
    {
     for ( int a = 2; a < 6; a++ )
      {
      digitalWrite(a,HIGH);
      delay (d);
      digitalWrite(a,LOW);
      delay (d);
      }
    }
delay(10);
}


Lo podeis descargar verificado del siguiente enlace:

Ejemplo 1.3b Pulsador en ejemplo de "La ola"

Podéis observar que en este ejemplo la sangría de cada bucle o parte de programa es diferente.          Es solo una norma de estilo, pero ayuda a entender donde acaba cada sentencia. Es importante también contar los corchetes,e ir cerrándolos, sino nos dará error a la hora de compilar el programa.


Un apunte para aquellos que hayan trabajado con autómatas tipos Siemens,Omron, etc. El trabajo con un Arduino difiere un poco ya que el autómata reacciona al cambio de estado de sus entradas ejecutando el proceso que hayas programado. Es decir, están constantemente "monitorizadas".

En un Arduino sin embargo, has de hacer una lectura constante de éstas, y ejecutar el código cuando detectas que ha cambiado de estado.

Os dejo con un video para ver el funcionamiento de los proyectos, y observéis la realización del conexionado.



No hay comentarios:

Publicar un comentario