Diferencia entre revisiones de «Tip 3»
(Página creada con «== 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. == Código...») |
(→Código 2) |
||
Línea 45: | Línea 45: | ||
{{Nota|Veras que el valor de n se incrementa muy rápidamente en cada ciclo de loop().}} | {{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. | ||
+ | |||
+ | <syntaxhighlight lang="c++"> | ||
+ | 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); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | {{Nota|Veras que cada LED puede ir a su propio ritmo de forma independiente.}} | ||
== Vea también == | == Vea también == |
Revisión del 23:14 18 sep 2019
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.
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