lunes, 12 de enero de 2015

Arduino: Usando pulsadores

Como hemos visto hasta ahora, solo hemos encendido y apagado leds sin tener nosotros ningún control sobre cuando encienden o cuando apagan.

Esta vez vamos a ver como interactuar con Arduino mediante pulsadores.

Arduino interpreta estas entradas digitales como  1 lógico = 5v (high) o con un 0 lógico = 0v (low).

¿Como interpreta Arduino un pulsador?
Cuando Arduino recibe un 1 quiere decir que en esa entrada están llegando +5v, si conectamos una resistencia a +5v en serie con un pulsador a masa e intercalamos Arduino, siempre estará en un estado alto (HIGH). Al presionar el pulsador, ese voltaje pasa a masa y Arduino recibe un 0 (LOW). A esto le llamamos una resistencia Pull Up (figura 1 de la foto)





Cuando Arduino recibe constantemente un 0 (LOW) y al presionar el pulsador damos paso a los 5v hacia el pin de arduino entonces detecta un 1 y pasa ha hacer lo que tenia programado, A esto se le llama Pull down. Esta representado en la figura 2 de la imagen.

De estas dos maneras podemos indicarle al microcontrolador un cambio en la programación, como por ejemplo apagar y encender un Led con un solo pulsador o utilizar varios pulsador, con uno apagamos y con el otro encendemos. También se pueden conectar varios pulsadores en matriz y hacer un teclado.

En este primer ejemplo sobre pulsadores vamos a encender y apagar un LED con un solo pulsador:

int pul1 = 2;   //Cargamos un 2 en la variable "pul1"
int led = 9;    //Cargamos un 9 en la variable "LED"
int e = 1;      //Cargamos un 1 en la variable "e"
int estado = 0;  //Cargamos un 0 en la variable "estado"

void setup() {    //Inicia la configuración
pinMode(led, OUTPUT); //El pin 9 es un pin de salida
pinMode(pul1, INPUT); //El pin 2 es un pin de entrada
}

void loop(){  //Inicia el Programa
estado = digitalRead(pul1);  //Lee el estado del pulsador 

if (estado == HIGH){ //Si el pusador es activado...
if (e==1) {               //Si la variable "e" es igual a 1 entonces...
digitalWrite(led, HIGH);  //Enciende el led en el pin 9
e=0;                      //Pasa la variabe "e" a 0
delay (500);              //Pausa de 500ms 
}
else {                   //Si "e" no es 1 entonce...
 if (e==0){              //Si la variable "e" es igual a 0 entonces...
digitalWrite(led, LOW);  //Apaga el LED en el pin 9
e=1;                     //Cargamos la variable "e" con un 1
delay (500);             //Hace una pausa de 500ms
      }
    }
  }
}

En este ejemplo vamos haremos que encienda y apague el LED con pulsadores independientes:

int led = 9;//Led
int pul1 = 2;  // Primer pulsador
int pul2 = 3;  // Segundo pulsador
int p1;
int p2;

void setup() {  
pinMode(led, OUTPUT); //El pin 9 es un pin de saida
pinMode(pul1, INPUT); //El pin 2 es un pin de entrada
pinMode(pul2, INPUT); //El pin 3 es un pin de entrada
}

void loop(){  //Comienza el programa
p1=digitalRead(pul1);  //Comprueba si el pulsador 1 esta activo
p2=digitalRead(pul2);  //Comprueba si el pulsador 2 esta activo
if (p1 == HIGH) {      // Si el pulsador 1 esta activo entonces...
digitalWrite(led, HIGH);  //Enciende el led situado en el pin 9
} 
else if (p2 == HIGH) {    //Si el pulsador 2 esta activo...
digitalWrite(led, LOW);   //Apaga el LED situado en el pin 9
}
}

En este tercer y ultimo ejemplo haremos que un LED apague y encienda pero además controlaremos la intensidad con la que lucirá mediante la modulación por ancho de lpulso PWM por sus siglas en ingles. Explicare más adelante como funciona el PWM con más detalle.


int led = 9;  //Cargamos un 9 en la variable "led"
int pul1 = 2; //Cargamos un 2 en la variable "pul1"
int pul2 = 3; //Cargamos un 3 en la variable "pul2"
int valor = 0;//Cargamos un 0 en la valriable "valor"
int p1;       //Creamos una variable llamada p1
int p2;       //Creamos una variable llamada p2


void setup() {
pinMode(led, OUTPUT); //El pin 9 es un pin de salida
pinMode(pul1, INPUT); //El pin 2 es un pin de entrada
pinMode(pul2, INPUT); //El pin 3 es un pin de entrada
} 
void loop(){

valor = constrain(valor, 0, 255); //Aseguramos que los valores estaran dentro de estos valores
analogWrite(led, valor);          //Función PWM
p1=digitalRead(pul1);             //Lee el pulsador 1
p2=digitalRead(pul2);             //Lee el pulsador 2
if (p1 == HIGH) { valor++; }      //Si el pulsador 1 esta activo, incrementa la variable "valor"
else if (p2 == HIGH) { valor--; } //Si el pulsador 2 esta activo, decrece la variable "valor"
delay(50);                        //Hace una pausa de 50 ms
}


No hay comentarios :

Publicar un comentario

Related Posts Plugin for WordPress, Blogger...