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;
}
|
________________________________
|