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 TTL 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 una señal de +5v, si conectamos una resistencia a +5v en serie con un pulsador conectado a GND e intercalamos el pin correspondiente de Arduino, siempre estará en un estado alto HIGH. Al presionar el pulsador, ese voltaje pasa a GND 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) al presionar el pulsador damos paso a los 5v hacia el pin de arduino entonces detecta un 1 (HIGH) 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

También podemos utilizar varios pulsador, con uno apagamos y con el otro encendemos o se pueden conectar varios pulsadores en matriz y hacer un teclado.

Para poder usar un pulsador como entrada tenemos que declararlo como entrada en el void setup de la siguiente manera:

pinMode(pin, INPUT);

También se pueden se puede usar INPUT_PULLUP, esta manera de usar los pulsadores utiliza las resistencias internas del microcontrolador, con lo que no haría falta una resistencia externa. Llamamos a INPUT_PULLUP de la siguiente manera:

pinMode(pin, INPUT_PULLUP);


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); // Pin 9 es salida
pinMode(pul1, INPUT); // Pin 2 es entrada
// pinMode(pul1, INPUT_PULLUP); // Pin 2 es entrada con resistencia interna activada
}

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); // Pin 9 es salida
pinMode(pul1, INPUT); // Pin 2 es entrada
pinMode(pul2, INPUT); // Pin 3 es entrada
// pinMode(pul1, INPUT_PULLUP); // El pin 2 entrada con resistencia interna activada
// pinMode(pul2, INPUT_PULLUP); // El pin 3 entrada con resistencia interna activada
}

void loop(){  				// Comienza el programa
	p1=digitalRead(pul1);  	// Comprueba pulsador 1 
	p2=digitalRead(pul2);  	// Comprueba  pulsador 2 
	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 pulso o PWM por sus siglas en ingles.

Más adelante explicaremos 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 salida
pinMode(pul1, INPUT); // El pin 2 es entrada
pinMode(pul2, INPUT); // El pin 3 es entrada

// pinMode(pul1, INPUT_PULLUP); // El pin 2 es entrada con resistencias internas
// pinMode(pul2, INPUT_PULLUP); // El pin 3 es entrada con resistencias internas
} 
void loop(){
	valor = constrain(valor, 0, 255); // constrain asegura valores están entre 0 y 255
	analogWrite(led, valor);          // Función PWM
	p1=digitalRead(pul1);             // Lee el pulsador 1
	p2=digitalRead(pul2);             // Lee el pulsador 2
	if (p1 == HIGH) { 
    	valor++;        // Con pulsador 1 activo, incrementa la variable "valor"
	}else if (p2 == HIGH) { 
    	valor--;  		// Con pulsador 2 activo, decrece la variable "valor"
    }
delay(50);				// Hace una pausa de 50 ms
}



1 comentario :

  1. hola , cUANDO DICE PULSADOR ACTIVO EN BAJO SE REFERIRIA A PULL DOWN ???

    ResponderEliminar