Skip to content

Semana 2 Entradas Digitales

Nestor Plasencia edited this page Nov 5, 2017 · 4 revisions

Entradas Digitales

Pulsador

Primero conozcamos al pulsador, que cumnplira la funcion deentrada digital.

Si tu pulsador tiene 4 pines como el que usaremos las conexiones son como se muestran.

Este es un pulsador con rebote, es decir solo hará la conexión entre dos puntos cuando lo presionemos, al dejarlo regresará automáticamente al estado de desconexión.

Conexión de pulsador a Arduino

Cuando conectamos un pulsador a arduino y a una variable digital positiva, aparentemente el voltímetro percibe 5V al presionar el botón y 0 si lo soltamos, pero en realidad al soltarlo no percibe ningún voltaje, sino un estado indeterminado,

Para evitar este estado indefinido utilizaremos un resistor pull-down, esto es simplemente conectar un resistor de alto ohmiaje, de 10 kohms por ejemplo, con conexión directa al pin de entrada y a tierra.

Con esta nueva configuración tendremos 0 lógico cuando el pulsador esté sin presionar y 1 lógico cuando se presiona el pulsador.

Vayamos a Circuits.io , vamos a continuar con el circuito realizado en Salidas Digitales en +Components, adicionamos esta vez un Pushbutton y otro Resistor.

Los colocamos el pushbutton en la protoboard, teniendo cuidado que sus terminales queden en columnas separadas.

Los pines de la resistencia irán, uno a la fila inferior negativa y el otro a un del pulsador.

Escogemos un pin para entrada digital yo tomaré el 9, y realizamos una conexión de este pin hacia un punto de conexión del pulsador y la resistencia a negativo, teniendo así un 0 lógico cuando el pulsador esté sin presionar.

El otro terminal del pulsador lo conectaremos a la fila positiva inferior.

Ahora que tenemos una entrada y una salida digital programaremos el comportamiento, para que cuando presionemos el pulsador el led encienda y cuando lo soltemos se apague.

Estructura condicional

Una estructura lógica condicional realiza cierta instrucción o conjunto de instrucciones si cumple determinada condición o condiciones, sino cumple realiza otras instrucciones distintas.

En nuestro circuito el algoritmo será el siguiente, si el pulsador está presionado, entonces encenderá el led pero si el botón no está presionado este se apagará.

Si el pulsador está presionado
  Encender Led
Sino
  Apagar Led

Vayamos a codificar.

Declaramos las variables enteras de led y pulsador con los números de pines usados.

int led = 11;
int pulsador = 9; 

En la función void setup(){}, realizamos las configuraciones iniciales necesarias. Incluimos aquí la función pinMode() como recordarás posee dos parámetros, el primero para seleccionar el pin y el segundo para la función que cumplira.

Configuramos el pin led como salida con OUTPUT y el pin pulsador como entrada con INPUT.

void setup() {
  pinMode(led,OUTPUT);
  pinMode(pulsador,INPUT);
}

Para la estructura condicional usamos la palabra reservada if(){} en los paréntesis irá la condición que se debe cumplir, es decir que el pulsador esté presionado.

Para leer la entrada digital utilizamos la función digitalRead(). Esta función sólo tiene un parámetro que es el número de pin de entrada, en este caso pulsador.

digitalRead(pulsador)

Un condicional ejecutará el código entre sus llaves, si el resultado de lo que se especifique entre los paréntesis sea verdadero, para ello usaremos un operador de comparación. En arduino se tienen los siguientes operadores de comparación:

x == y      // x es igual a y
x != y      // x no es igual a y
x <  y      // x es menor que y
x >  y      // x es mayor que y
x <= y      // x es menor o igual que y
x >= y      // x es mayor o igual que y

El pulsador estará presionado cuando se detecta un 1 lógico a la entrada, por esta razón la entrada del pulsador la comparamos con HIGH mediante el operador == de igualdad, recordemos que HIGH es palabra reservada para indicar un 1 lógico.

if(digitalRead(pulsador)==HIGH){}

Al cumplirse esta condición debe encender el Led, como recordarás esto se logra con la función digitalWrite(led,HIGH) con los parámetros del número de pin asignado al led y el estado, que será encendido HIGH.

digitalWrite(led,HIGH);

¿Qué sucede si no se cumple la condición? simplemente no ejecuta nada y seguirá el flujo del programa, pero nosotros necesitamos que si no cumple la condición apague el led para ello agregamos a la estructura la palabra reservada else{} en este bloque irán las instrucciones que se ejecutarán en el caso de que no se cumpla la condición, es decir que se apague el Led.

digitalWrite(led,LOW);

El código de la estructura condicional quedará así.

if(digitalRead(pulsador)==HIGH){
  digitalWrite(led,HIGH);
}else{
  digitalWrite(led,LOW);
}

Necesitamos que el microcontrolador esté constantemente ejecutando este condicional por ello añadimos esta estructura condicional en void loop(){}

void loop(){
  if(digitalRead(pulsador)==HIGH){
    digitalWrite(led,HIGH);
  }else{
    digitalWrite(led,LOW);
  }
}

En Code Editor ejecutamos la simulación con Upload and Run. Con el mouse presionamos el pulsador

`

Como resultado obtenemos que el LED enciende únicamente cuando se presione el pulsador.

Bucle While

Un bucle while, es una estructura en la cual se realiza un conjunto de instrucciones mientras se cumpla determinada condición o condiciones.

Por ejemplo utilizando el circuito armado en el video anterior, si quisiera que el led parpadee mientras tengamos el pulsador se encuentre presionado, lo que tengo que programar es un bucle while.

Vamos a modificar el algoritmo anterior

La palabra reservada para esta estructura es while, en los paréntesis irá la condición que se debe cumplir, es decir que el pulsador se encuentre presionado.

Utilizamos la función digitalRead() con parámetro el pin del pulsador y la comparamos con el uno booleano.

while(digitalRead(pulsador)==HIGH){
  
} 

Dentro de las llaves colocamos el parpadeo del led, utilizando digitalWrite() en el pin led y delay() de 300 milisegundos, igual que el parpadeo que realizamos en el capítulo de Hola mundo con arduino.

while(digitalRead(pulsador)==HIGH){
  digitalWrite(led,HIGH);
  delay(300);
  digitalWrite(led,LOW);
  delay(300);
}

Y como ya es costumbre todo este código lo añadiremos en la función void loop(){} de bucle infinito.

void loop(){
  while(digitalRead(pulsador)==HIGH){
    digitalWrite(led,HIGH);
    delay(300);
    digitalWrite(led,LOW);
    delay(300);
  }    
}

Con este programa se producirá un parpadeo únicamente cuando el pulsador se encuentre presionado.

En Code Editor ejecutamos la simulación con Upload and Run. Con el mouse presionamos el pulsador

`

Como se observa ahora parpadea el Led pero si dejamos de presionar este comportamiento termina.

Funciones

Habrás notado que para conseguir el parpadeo siempre usamos las mismas 4 líneas de código, este pequeño conjunto de sentencias cumplen una función específica, por ello se pueden colocar en una función llamada.

digitalWrite(led,HIGH);
delay(300);
digitalWrite(led,LOW);
delay(300);

Esta función la llamaremos Parpadeo, como no devolverá ningún valor la tanto la iniciamos con void, como parámetros, vamos a poner primero el pin con el cual realizará el parpadeo, este parámetro es de tipo entero, y como segundo parámetro msec que indicará el tiempo que durará la función delay() también será de tipo entero.

Añadimos a esta función el código de parpadeo y cambiamos todas las variables led por la variable pin y los números 300 por la variable msec

void Parpadeo(int pin,int msec){
  digitalWrite(pin,HIGH);
  delay(msec);
  digitalWrite(pin,LOW);
  delay(msec);
}

Ahora en la estructura while hacemos el llamado de la función Parpadeo().

void loop() {
  while(digitalRead(pulsador)==HIGH){
     Parpadeo(led,300);
  } 
}

En Code Editor ejecutamos la simulación con Upload and Run.

El funcionamiento no ha cambiado, pero ahora tenemos un código mejor estructurado.