domingo, 8 de diciembre de 2019

Los pulsadores (I)

Micro:bit cuenta con dos pulsadores (A y B), conectados internamente a los pines 5 y 11. Al presionar un pulsador el voltaje existente en su pin es cercano a 0 voltios (0 o LOW), mientras que si está levantado el voltaje será del orden de 3 voltios (1 o HIGH). Para poder leer estos valores y conocer el estado del pulsador vamos a utilizar una nueva instrucción del IDE Arduino:

digitalRead(pin)
Lee el valor (HIGH o LOW) que tiene el pin y lo devuelve al programa. Generalmente, este valor se almacena en una variable.

Una variable es una pequeña porción de la memoria del procesador a la que le asignamos un nombre y un valor (este puede ser modificado posteriormente todas las veces que se desee). Generalmente, para crear una variable hay que declararla al inicio del programa, indicando el tipo de datos que vamos a guardar en ella, su nombre y, si se desea, su valor inicial.

También va a ser necesaria una instrucción que nos permita tomar decisiones según que se cumpla o no una determinada condición:

if(condición){
    instrucciones si cierta;
}
Si se cumple la condición se ejecutan las instrucciones que hay entre las llaves, si no se saltan y se continúa con la siguiente. Los operadores que podemos usar en la condición son los siguientes: ==, !=, <, >, <=, >=; es decir, igualdad, distinto, menor, mayor, menor o igual y mayor o igual.

En el siguiente programa vamos a controlar el primer LED de la segunda fila con el pulsador A:

/* 
 * EncendidoApagadoPulsadorA.ino
 * Encendido-Apagado del primer led de la segunda fila
 * (pines 28-3) con el pulsador A (pin 5). Al pulsar se enciende, 
 * al levantar se apaga.
*/

boolean pulsadorA;  //variable donde guardaremos el estado del pulsador.
                    //De tipo booleano, ya que sólo puede tomar
                    //dos valores (0 o 1).
                    
void setup() {
  pinMode(28, OUTPUT);
  pinMode(23, OUTPUT);
  pinMode(5, INPUT);      //pulsador A (pin 5) como entrada
  digitalWrite(28, HIGH); //activamos fila interna
  digitalWrite(23,HIGH);  //desactivamos columna (LED apagado)
}

void loop() {
  pulsadorA = digitalRead(5); //leemos el estado del pulsador.
  if (pulsadorA==0) {         //si pulsador A presionado
    digitalWrite(23, LOW);    //encendemos.
  }
  if (pulsadorA==1) {         //si pulsador A levantado
    digitalWrite(23, HIGH);   //apagamos.
  }
}

Ahora vamos a hacer que el diodo sólo se encienda si mantenemos presionados los dos pulsadores; apagándose cuando se levante uno cualquiera de ellos. Para conseguirlo podemos utilizar el operador && (y), que nos permite preguntar si se cumplen varias condiciones a la vez, y el operador || (o), con el que podemos saber si se cumple una cualquiera de las condiciones.

/*  
 * EncendidoDoblePulsadoresAB.ino
 * Encendido del primer led de la segunda fila (pines 28-23)
 * si los dos pulsadores están presionados. Apagado con uno
 * de ellos levantado.
 * pulsador A (pin 5) 
 * pulsador B (pin 11)
*/

boolean pulsadorA;  //Variables para guardar el estado de
boolean pulsadorB;  //los pulsadores.

void setup() {
  pinMode(28, OUTPUT);
  pinMode(23, OUTPUT);
  pinMode(5, INPUT);
  pinMode(11, INPUT); 
  digitalWrite(28, HIGH);  //activamos fila
  digitalWrite(23, HIGH);  //desactivamos columna (LED apagado)
}

void loop() {
  pulsadorA=digitalRead(5);
  pulsadorB=digitalRead(11);
  if (pulsadorA==0 && pulsadorB==0) {  //si los dos presionados
    digitalWrite(23, LOW);             //enciende el LED
  }
  if (pulsadorA==1 || pulsadorB==1) {  //si uno de ellos levantado
    digitalWrite(23, HIGH);            //apaga el LED
  }
}




No hay comentarios:

Publicar un comentario