|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  Raspberry Pi Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  AutoIt (Programación) Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


.

Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando

-- Tutorial de iniciación a Arduino --

Volver al índice del tutorial

____________________________

8.- Temporizador.

Al pulsar el pulsador se espera 8 segundos.
Al cabo de ese tiempo el LED parpadea 5 veces.

El tiempo empieza a contar desde el momento que se pulsa el pulsador.

Código
/*
  Juan A. Villalpando
  kio4.com
  agosto 2015.
 */

/* Pulsamos, después de 8 segundos empieza a parpadear el LED. Hace 5 parpadeos y se apaga.
   Al pulsar el pulsador se marca activado=1, se establece tiempo inicial y final.
   Cuando ha sido activado y el tiempo actual supera al final...
   entra en funcionamiento la subrutina parpadeo.
   Cada vez que hace un parpadeo cuenta 1 más.
   Cuando hace 5 parpadeo inicializa todo. Pone activado a 0 y contador a 0.

*/

#define pin2 2   // Al terminal  2 lo llamamos pin2. Aquí irá el pulsador.
#define LED13 13 // Al terminal 13 lo llamamos LED13. Aquí irá el LED.
int valor2; // Esto es una variable entera
int contador=0; // Variable contador igual a cero en el inicio.
int activado=0; // Al principio no ha sido activado.
long inicio, final, actual; // Tiempos.
void parpadeo(); // Vamos a utilizar la subrutina parpadeo. La declaramos.

// En el setup establecemos los parámetros iniciales.
void setup() {
  pinMode(pin2, INPUT);     // El pin2 será entrada. Pulsador.
  pinMode(LED13, OUTPUT);   // El LED13 será salida. LED.
}


void loop() {
  valor2 = digitalRead(pin2); // Lee el valor del pin2 y se lo asigna a valor2. (Puede ser 0 o 1)

if (valor2 == HIGH && activado == 0) {      // Si ha pulsado HIGH y no ha sido activado=0 antes...
        activado = 1;                       // marca activado=1 y guarda el tiempo de inicio.
        inicio = millis();
        final = inicio + 8000;              // Tiempo final es inicio más 8 segundos.
                         } 
                    
        actual = millis();                  // Consulta el tiempo actual.

if (activado == 1 && (actual > final) ) {   // Si fue activado=1 y el tiempo actual es mayor que el final....
     parpadeo();                            // haz un parpadeo.
} 
}


// Subrutina parpadeo.
void parpadeo()
{
  contador = contador + 1; // Cada vez que hace un parpadeo cuenta uno más.
  if (contador == 5){      // Si la cuenta llega a 5, inicializa todo.
  contador = 0;
  activado = 0;
  }
  digitalWrite(LED13, HIGH); 
  delay(300);
  digitalWrite(LED13, LOW); 
  delay(300);
}

 

- Recuerda que debes guardar cada archivo de proyecto en una carpeta única para él.
- Una subrutina es un trozo de código al que podemos llamar desde el código principal.

- La subrutina la declaramos al principio: void parpadeo(); .

- if (valor2 == HIGH && activado == 0). Si valor2 es ALTO Y activado es cero. El doble ampersand "&&" significa Y

- inicio = millis();. millis() toma los milisegundos actuales desde que se inició la ejecución de la aplicación.

Supongamos que millis = 64010

inicio = 64010
final =  64010 + 8000 = 72010

Supongamos que actual = 65900

if (activado == 1 && (actual > final) ) --------- Actual no supera a final .

Supongamos que actual = 72011

if (activado == 1 && (actual > final) ) --------- Actual sí supera a final y hace el contenido del if.

_________________________
8B.- Temporizador, mantener pulsado.

- En este otro ejemplo pulsamos el pulsador y lo mantenemos pulsado durante 8 segundos, al cabo de ese tiempo se encenderá el LED. Si dejamos de pulsar, se apagará el LED.

- Si pulsamos y antes de los 8 segundos dejamos de pulsar, el tiempo se iniciará, es decir no acumulará el tiempo pulsado.

- Si queremos que acumule el tiempo pulsado, anulamos la línea activado = 0; de la subrutina apagar.

Código
	/* Juan A. Villalpando
  kio4.com */

#define pin2 2
#define LED13 13
int valor2;
int activado=0; // Al principio no ha sido activado.
int encendido=0; // Al principio no ha sido encendido.
long inicio, final, actual;

void setup() {
  pinMode(pin2, INPUT);     // El pin2 será entrada. Pulsador.
  pinMode(LED13, OUTPUT);   // El LED13 será salida. LED.
}

void loop() {
    valor2 = digitalRead(pin2); // Lee el valor del pin2 y se lo asigna a valor2. (Puede ser 0 o 1)
  
  if (valor2 == HIGH && activado == 0) {      // Si ha pulsado HIGH y no ha sido activado=0 antes...
          activado = 1;                       // marca activado=1 y guarda el tiempo de inicio.
          inicio = millis();
          final = inicio + 8000;}              // Tiempo final es inicio más 8 segundos.
                              
          actual = millis();                  // Consulta el tiempo actual.
  
  if (activado == 1 && (actual > final) ) {enciende_LED13();} 
  
  if (encendido == 1 && (valor2 == LOW) ) {apaga_LED13();} 
  
  if (valor2 == LOW){activado = 0;}
}



// Subrutina encendido.
void enciende_LED13(){
  digitalWrite(LED13, HIGH); 
  encendido = 1;}

// Subrutina apagado.
void apaga_LED13(){
  digitalWrite(LED13, LOW); 
  encendido = 0;
  activado = 0;
  }		  
			  
			  

________________________________

 

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información