Tip 3
Descripción
Intentare explicar la diferencia entre usar delay() y millis().
Ambos códigos hacen lo mismo prender y apagar un LED cada 0.5 seg.
Tip: Este metodo permite a Arduino hacer mas cosas en el mismo ciclo.
Código 1
Este ejemplo funciona muy bien porque lo único que tiene que hacer Arduino es prender y apagar el LED. Pero si ademas quisieras hacer algo mas no funcionaria porque los delay() paralizan todas las operaciones y no habria tiempo para hacer nada mas. Aumentar el valor de n por ejemplo.
unsigned long n;
void setup(){
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop(){
digitalWrite(13, HIGH); //Prende LED
delay(500); //Espera 0.5 seg
digitalWrite(13, LOW); //Apaga LED
delay(500); //Espera 0.5 seg
n++;
Serial.println(n);
}
Nota: Veras que el valor de n se incrementa cada 1 segundo.
Código 2
Con este codigo te das cuenta que Arduino puede hacer otras tareas (aumentar el valor de n por ejemplo), porque le sobra tiempo hasta que debe conmutar el LED, porque el corre a una velocidad muy superior. Aproximadamente a 16 MHz.
unsigned long n,t;
void setup(){
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop(){
if (millis() - t > 500){
digitalWrite(13, !digitalRead(13)); //Conmuta LED
t = millis();
}
n++;
Serial.println(n);
}
Nota: Veras que el valor de n se incrementa muy rápidamente en cada ciclo de loop().
Código 3
Con este código te das cuenta que Arduino puede aparentar multihilo haciendo que dos LED intermitentes a destiempo.
const byte pinRojo = 4; //LED rojo
const byte pinVerde = 5; //LED verde
bool estadoRojo; //Estado LED rojo
unsigned long previoRojo; //Ultimo cambio LED rojo
int intervaloRojo = 500; //Intervalo LED rojo (milliseconds)
bool estadoVerde; //Estado LED verde
unsigned long previoVerde; //Ultimo cambio LED verde
int intervaloVerde = 1000; //Intervalo LED verde (milliseconds)
void setup() {
pinMode(pinRojo, OUTPUT);
pinMode(pinVerde, OUTPUT);
}
void loop(){
LedRojo();
LedVerde();
}
void LedRojo(){
if (millis() - previoRojo > intervaloRojo) {
previoRojo = millis();
estadoRojo = !estadoRojo;
digitalWrite(pinRojo, estadoRojo);
}
}
void LedVerde(){
if (millis() - previoVerde > intervaloVerde) {
previoVerde = millis();
estadoVerde = !estadoVerde;
digitalWrite(pinVerde, estadoVerde);
}
}
Nota: Veras que cada LED puede ir a su propio ritmo de forma independiente.
Vea también
Referencias externas
- Saber nuestra IP por Mail - jojopapa