martes, 22 de mayo de 2012

Control de Varias Funciones de un Led mediante Switch Case



En esta  práctica, voy a controlar varias funciones de un Led mediante un Pulsador y la función Switch Case.
Es una practica sencilla, pero nos puede servir para muchísimas cosas, o para dar varios modos de funcionamiento a un prototipo.
Para quien desconozca lo que es la función  Switch case. Es una función que  nos permite elegir y ejecutar entre diferentes sentencias de programación, es decir como si se tratase de un menú.


Por tanto, en esta practica he utilizado un pulsador, el cual en función de las veces que lo pulsemos el Diodo Led cambiará el modo de funcionamiento.


1ª Pulsacion On
2ª Pulsación Blink
3ª Pulsación Blink quickly
4ª Off



Materiales empleados:
  • Nuestro Arduino
  • 1 Pulsador
  • 1 Resistencia 330 ohmios


Esquema para la Protoboard




En este vídeo podemos ver como funciona, ademas si en el entorno de programación de Arduino pulsamos a serial monitor podemos ver en el case en que se encuentra.







SKETCH:



//Programa de control de varias funciones de un led mediante cases// 



//Definicion de Variables//


int led = 13; //Definimos el diodo led en el pin 13
int boton = 2; //Definimos la entrada del pulsador en el pin 2
int numeropulsaciones;
int contador;
int i=0;

//Configuracion Pines y puerto serie
void setup () 
{
  pinMode (led, OUTPUT);
  pinMode (boton, INPUT);
  Serial.begin (9600);
  int espera=200;
  int time=0;
}

//Programa Principal
void loop () 
{
    int espera=200;
    int time=0;
    i=0;

    if (digitalRead (boton) == HIGH && millis() - time > espera) // He empleado la funcion millis para evitar el antirrebote
    {
      numeropulsaciones ++;
      Serial.print (numeropulsaciones); // Imprime el numero de pulsacion en el Serial Monitor de Arduino//
    }
    
    if (numeropulsaciones == 4)// En el momento que se encuentre en el Case4 vuelve a 0.
    numeropulsaciones = 0;
    
    switch (numeropulsaciones) // Dentro del switch he definido 4 cases, que cambiaran en funcion de las pulsaciones dadas.
    {
    case 0:
       digitalWrite(led, LOW);//Off
       break;
      
    case 1:
      digitalWrite(led,HIGH);//On
      break;
      
    case 2:
       digitalWrite(led, LOW);//blink
       delay(100);
       digitalWrite(led,HIGH);     
       break;
      
    case 3:
       digitalWrite(led,HIGH);//blink quickly
       delay(10);
       digitalWrite(led, LOW);
       break;
      
    case 4:
        time = millis();   
  }

   delay (100);
}

//By Redfox 




10 comentarios:

  1. ayuda con el diagrama, no lo entiendo, tengo todos los materiales... podrias explicarme, a donde conecto la resistencia y a donde la tierra

    ResponderEliminar
  2. Hola Luis. Como se ve en el esquema de la proto, la resistencia conectas un extremo a tierra y el otro extremo a la unión entre el Pulsador y el cable que va al pin 2 del arduino, si te fijas forma como un T . De tal forma que al apretar el pulsador o cerrar el jumper, llegan los 5 voltios al pin 2 del arduino, reconociéndolo como un 1 logico. Espero haberme explicado bien, si tienes alguna otra pregunta, no dudes en postear.
    Un saludo

    ResponderEliminar
  3. Esta bueno el codigo , pero yo tengo un problema real que no puedo resolver
    Sabrias hacer un switch en donde la variable puede tomar varios valores ???
    Por ejemplo si var esta entre 100 y 200 hacer una cosa
    si esta entre 201 y 300 hacer otra
    si esta entre 301 y 400 hacer otra
    etc etc
    gracias de antemano

    ResponderEliminar
  4. para que sirve declarar i?

    ResponderEliminar
  5. Hola comunidad.
    Mi consulta es porque quiero usar un pulsador y usar variaciones de encendido y apagado de un rele.
    En la primer secuencia tednria 4 seg encendido y 2 SEG apagado en bucle continuo. Al pulsar otra vez pasar a otra secuencia para el mismo rele de 2 seg y 4 seg y una vez mas al pulsar otra vez pasar a otra secuencia de 1 seg y 1 seg. Al volver a pulsar que vuelva a la primer secuencia.
    Un sludo

    ResponderEliminar
  6. Hola comunidad.
    Mi consulta es porque quiero usar un pulsador y usar variaciones de encendido y apagado de un rele.
    En la primer secuencia tednria 4 seg encendido y 2 SEG apagado en bucle continuo. Al pulsar otra vez pasar a otra secuencia para el mismo rele de 2 seg y 4 seg y una vez mas al pulsar otra vez pasar a otra secuencia de 1 seg y 1 seg. Al volver a pulsar que vuelva a la primer secuencia.
    Un sludo

    ResponderEliminar
  7. Excelente el codigo, me sirvio mucho, gracias!!!!!!!!

    ResponderEliminar
  8. Hola. No entiendo la definicion de la variable contador si despues no se usa, y tampoco entiendo para que el int i=0. Gracias.

    ResponderEliminar
  9. Hola que tal mi pregunta es como guardarlos estados del contador en caso de que se vaya la luz y se reinicie el arduino?

    ResponderEliminar