/*Ejemplo 1 – Conteo de tiempo en microsegundos
Función micros
Devuelve el número de microsegundos (μs) desde que la placa
Arduino empezó a ejecutar el sketch. Este número
(de tipo unsigned long) se reseteará a cero aproximadamente
después de 70 minutos. Esta instrucción tiene una resolución
de 4 μs (es decir, que el valor retornado es siempre un
múltiplo de cuatro). Recordar que 1.000 μs es un milisegundo
y por tanto, .1000.000 μs es un segundo. No tiene parámetros.
el mismo tipo que la que devuelve micros()*/
/*
unsigned long time; //Declara un variable
void setup(){
Serial.begin(9600); //Inicializa la comunicación serial
}
void loop(){
time = micros(); //Consulta los microsegundos desde que se inició el sketch
Serial.println(time); //Imprime el valor en el monitor serial
delay(1000); //Espera 1 segundo
}
*/
/*Ejemplo 2 – Como funciona millis()*/
/*
unsigned long inicio, fin, transcurrido; // Declaramos 3 variables
void setup(){
Serial.begin(9600); //Inicializa la comunicación serial
}
void loop(){
inicio=millis(); //Consulta los milisegundos desde que se inició el sketch
delay(1000); //espera un segundo
fin=millis(); //Consulta los milisegundos desde que se inició el sketch
transcurrido=fin-inicio; //Calcula el tiempo desde la última lectura
Serial.println(transcurrido); //Imprime el valor en el monitor serial
delay(500); //espera 0.5 segundos
}
*/
/*
Las funciones delay() y delayMicroseconds() como lo
mencionamos anteriormente, ponen en pausa el sketch,
lo cual puede resultar un problema cuando tenemos otras
tareas que atender, y este problema se ve acentuado
cuando los tiempos de espera son largos. Para resolver
esto es recomendable usar la función millis() para
controlar esos tiempos. En el siguiente ejemplo veremos
como hacer parpadear un led usando millis(). Y podemos
usar una programación similar para atender eventos
periódicos.
Ejemplo 3 – Hacer parpadear un led con millis()*/
/*
int estadoLed; //guarda el estado del led (encendido o apagado)
int periodo = 1000; // tiempo que esta el LED en alto y bajo
unsigned long tiempoAnterior = 0; //guarda tiempo de referencia para comparar
#define led 2
void setup() {
pinMode(led,OUTPUT); //configura la salida
}
void loop() {
if(millis()-tiempoAnterior>=periodo){ //si ha transcurrido el periodo programado
estadoLed=!estadoLed; //cambia el estado del led cada 100ms
digitalWrite(led,estadoLed); //actualiza el estado del led
tiempoAnterior=millis(); //guarda el tiempo actual como referencia
}
}
*/
/*
Ejemplo 4 – Contar un periodo de tiempo con millis()
En el siguiente ejemplo tenemos el caso de un periodo de tiempo
que necesitamos medir pero que no se repite, para probarlo
conectamos un pulsador al pin 8 y a tierra y, usaremos el LED
del pin 2 para ver su funcionamiento. Cada vez que presionemos
el pulsador, el LED del pin 2 se apagara por 3 segundos
(al iniciar el programa el LED esta apagado, se encenderá tres
segundos después de la primera vez que lo pulse).
*/
/*
int periodo = 3000; // tiempo para que el led se encienda
byte temp = 0; //estado del temporizador, 1= activo 0= inactivo
unsigned long tiempoAnterior = 0; //guarda tiempo de referencia para comparar
#define led 2
#define pulsador 8
void setup() {
pinMode(led,OUTPUT); //configura la salida
//tengo un pulsador conectado al pin 8 usando la resistencia pull-up
//cuando lo presiono leo cero
pinMode(pulsador,INPUT_PULLUP); //configura la entrada con resistencia pull-up
}
void loop() {
if (digitalRead(pulsador)==0) { //si el pulsador fue presionado
tiempoAnterior=millis(); //guarda el tiempo actual como referencia
temp = 1; //indica que esta activo el temporizador
digitalWrite(led,LOW); //apaga el LED
}
if((millis()-tiempoAnterior>=periodo)&&temp==1){ //si ha transcurrido el periodo programado
digitalWrite(led,HIGH); //enciendo el LED
temp = 0; //y desactivo el temporizador
}
}
*/
//Semaforo con la función mills()
int verde = 2; //v=2
int amarillo = 3;//a=3
int rojo = 4;//r=4
int tiempoVerde =5000;//t=5000
int tiempoAmarillo =2000;//t1=2000
int tiempoRojo =4000;//t2=4000
unsigned long tv =0;//ta=0
unsigned long ta =0;//tb=0
unsigned long tr =0;//tc=0
bool estadoVerde =true;//stado=true
bool estadoAmarillo =true;//stado1=true
bool estadoRojo =true;//stado2=true
void setup(){
pinMode(verde,OUTPUT);
pinMode(amarillo,OUTPUT);
pinMode(rojo,OUTPUT);
digitalWrite(verde,HIGH);
digitalWrite(amarillo,LOW);
digitalWrite(rojo,LOW);
}
void loop(){
if(millis()>=tiempoVerde+tr&&estadoVerde ==true)
{
if(estadoAmarillo ==true)
{
estadoVerde =false;
digitalWrite(verde,LOW);
digitalWrite(amarillo,HIGH);
tiempoVerde=millis();
}
}
if(millis()>=tiempoAmarillo+tv&&estadoVerde ==true)
{
if(estadoAmarillo ==false)
{
estadoAmarillo ==true;
digitalWrite(rojo,HIGH);
digitalWrite(amarillo,LOW);
tiempoAmarillo=millis();
}
}
if(millis()>=tiempoRojo+ta&&estadoVerde ==true)
{
if(estadoAmarillo ==true)
{
estadoVerde ==false;
estadoAmarillo ==true;
digitalWrite(rojo,HIGH);
digitalWrite(amarillo,LOW);
tiempoRojo=millis();
}
}
}