Programação sem delay(), usando millis()
Sistemas e Aplicações Digitais (Lógica e Programação) Robótica
Um programa Blink que pisca um LED pode ser usado para exemplificar o problema de uso do comando delay.
O comando delay deixa o microcontrolador "dormindo" sem fazer nada, não executa comandos e nem verifica se um sensor está sendo acionado por algum evento.
Deste modo, é importante trocar o uso do delay pelo uso da função milis() que retorna um número do tipo inteiro longo, com a quantidade de milisegundos passados desde que o Arduino foi ligado. A lógica da programação precisa calcular o tempo que já se passou desde o último evento controlado até o instante atual. Se esse tempo passado corresponder ao intervalo desejado o programa deve mudar de estado.
Código fonte comparando o programa Blink dos dois modos, para o Arduino na lnguagem C++
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, 1);
delay(1000);
digitalWrite(13, 0);
delay(1000);
}
Programa utilizando a função millis() e não usar a função delay().
unsigned long anterior = 0;
unsigned long intervalo = 1000;
unsigned int liga = 1;
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
unsigned long atual = millis();
if (atual - anterior > intervalo)
{
if (liga == 1)
{
digitalWrite(13, 1);
liga = 0;
}
else
{
digitalWrite(13, 0);
liga = 1;
}
anterior = atual;
}
}
O mesmo código fonte pode ser alterado, usando o S4A.