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 con la función digitalRead()


digitalRead(pin);

Esta función tiene un retorno de HIGH o LOW.

Y finalmente este es el ejemplo con la que leeremos el estado de un puerto con Arduino:



int pul1 = 2;   // Carga un 2 en la variable "pul1"
int led = 9;    // Carga un 9 en la variable "LED"
int e = 1;      // Carga un 1 en la variable "e"
int estado = 0; // Carga 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 la función digitalWrite() y dos 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;  // Carga un 9 en la variable "led"
int pul1 = 2; // Carga un 2 en la variable "pul1"
int pul2 = 3; // Carga un 3 en la variable "pul2"
int valor = 0;// Carga un 0 en la valriable "valor"
int p1;       // Crea una variable llamada p1
int p2;       // Crea 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