Bienvenido a los foros de FT81x Manía. Te invitamos a regístrate totalmente gratis. Disfruta de tu experiencia con un grandes amigos y Staff.

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5

Thread Contributor: TFTLCDCygUso de millis como medio de control

#1
1
Better response on post Uso de millis como medio de controlA veces tenemos que usar con un controlador basado en tiempo para conseguir alguna acción determinada. La mejor forma de conseguirlo es usando un reloj externo, basando el contador en la hora, minuto o segundo que nos reporte el RTC. También podemos conseguir algo similar con la función millis, si podemos permitirnos algo de error en los valores de tiempo.

#include <GD2UD.h>

long previousMillis = 0, interval = 500;  //0.5 seg
int Control= 0;

void setup() {
GD.begin();
MP();
}
void loop() {}

void MP()
{
 while(1)
 {
  Identificador();

  GD.ClearColorRGB(0x000055);
  GD.Clear();
  GD.cmd_number(215, 110, 31, OPT_RIGHTX, Control);
  GD.swap();  
 }
}

void Identificador()
{
 unsigned long currentMillis = millis();        
 if(currentMillis - previousMillis > interval)
   {
    previousMillis = currentMillis;  
    Control = Control + 1;
    if(Control>=2){Control = 0;}
   }
}

El tiempo de espera lo podemos ajustar modificando la variable interval, la variable que se modificará entre dos parámetros: 0 y 1, es la variable Control, de esta forma podemos tener un switch digital, independiente de las rutinas de control en función de un tiempo de espera.

La ventaja es que no afectará otras funciones del programa, ya que al usar millis, no tenemos alguna interrupción en los tiempos de espera como la que ocurre con delay por ejemplo. 

Además, el intervalo de espera también lo podemos ajustar en tiempo real, asignando un botón dentro del programa. Nuevamente sin afectar la continuidad del proyecto.
Reply
#2
0
Gracias !!!  feliz

Angel Angel Angel
Reply
#3
0
Código adaptado a libreria ESP_GD2UC;

#include <EEPROM.h>
#include <SPI.h>
#include <GD2UC.h>


long previousMillis = 0, interval = 2000UL;  //0.5 seg
int Control = 0;

void setup() {
 
 Serial.begin(115200);
 EEPROM.begin(512);
 GD.begin();
 MP();
}
void loop() { }

void MP()
{
while(1) {
 Identificador();

 GD.ClearColorRGB(0x000055);
 GD.Clear();
 GD.cmd_number(215, 110, 31, OPT_RIGHTX, Control);
 GD.swap();  
}
}

void Identificador() {
 
unsigned long currentMillis = millis();        
 if(currentMillis - previousMillis > interval) {
  previousMillis = currentMillis;  
  Control = Control + 1;
  Serial.println(Control);
   
 if(Control >= 2){Control = 0;
  Serial.println(Control); }
  }
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)