// Este é um exemplo de uso da função millis().
// onde um led deve acender por 500ms e ficar apagado
// por 100 ms.
// Lembrar que millis() atua como um contador que atualiza automaticamente
// o seu valor a cada 1 mili segundo a partir do início do funcionamento do
// microcontrolador até que ele seja desligado ou o valor de millis()
// alcance um valor maior do que o reservado para a variável.
// Crie a variável tempo1 que será utilizada no código
// O valor da variável tempo1 será o valor do millis
unsigned long tempo1 = millis();
// Iniciação
void setup(){
// Inicia comunicação na porta serial
Serial.begin(9600);
// Define pinos dos led como saída
pinMode(8, OUTPUT);
}
void loop(){
// Aqui, será verdadeiro se a diferença entre os
// valores de millis() - tempo1 for menor do que 500
// e em sendo verdadeiro, o LED acenderá.
if((millis() - tempo1) < 500){
// Acende o led do pino 8
digitalWrite(8, HIGH);
Serial.println("ACESO");
}
// Quando a diferença passa de 500, o if torna-se
// falso e portanto o código "anda" e incia o else
// que apaga o LED
else{
// Apaga o led do pino 8
digitalWrite(8, LOW);
Serial.println("APAGADO");
}
// Este é o tempo que o LED ficará apagado
// que é de 100ms, então para chegar no tempo 100ms
// somou-se 100ms (tempo apagado) com 500ms que é o tempo
// que o LED permanece aceso.
// Então quando a diferença de millis menos tempo1 for maior
// do que 600 (500 + 100) o if é verdadeiro.
// Então faz a leitura atual do millis e guarda o novo valor
// em tempo1.
// Esse novo valor vai ser utilizado lá no primeiro if
// reiniciando todo o processo.
if((millis() - tempo1) > 600){
tempo1 = millis();
}
Serial.print ("Valor de millis = ");
Serial.println(millis());
Serial.print ("Valor tempo1 = ");
Serial.println(tempo1);
}
// A seguir, um extrato do monitor serial mostrando como varia
// a função millis() e a variável tempo1.
// É importante lenbrar que a função Serial.print que mostra os
// valores é mais lenta do que o millis e por causa disso, não é
// muito fácil mostrar os números inteiros que correspondem ao
// tempo de led aceso e apagado.
/*
ACESO // LED aceso
Valor de millis = 0 // Aqui é mostrado o primeiro valor de millis()
Valor tempo1 = 0 // Aqui aconteceu a primeira leitura de millis() e gravada em tempo1
ACESO
Valor de millis = 7
Valor tempo1 = 0
ACESO
Valor de millis = 55
Valor tempo1 = 0
ACESO
Valor de millis = 104
Valor tempo1 = 0
ACESO
Valor de millis = 153
Valor tempo1 = 0
ACESO
Valor de millis = 203
Valor tempo1 = 0
ACESO
Valor de millis = 253
Valor tempo1 = 0
ACESO
Valor de millis = 304
Valor tempo1 = 0
ACESO
Valor de millis = 354
Valor tempo1 = 0
ACESO
Valor de millis = 404
Valor tempo1 = 0
ACESO
Valor de millis = 454
Valor tempo1 = 0
ACESO
Valor de millis = 504 // Aqui, o valor de millis() é maior do que 500
Valor tempo1 = 0
APAGADO // Então o LED apaga
Valor de millis = 557
Valor tempo1 = 0
APAGADO
Valor de millis = 609
Valor tempo1 = 0
APAGADO
Valor de millis = 661 // Aqui, o valor de millis() é maior que 600
Valor tempo1 = 643 // É feita a segunda leitura de millis()
ACESO // O LED acende novamente.
Valor de millis = 713
Valor tempo1 = 643
ACESO
Valor de millis = 765
Valor tempo1 = 643
ACESO
Valor de millis = 818
Valor tempo1 = 643
ACESO
Valor de millis = 870
Valor tempo1 = 643
ACESO
Valor de millis = 922
Valor tempo1 = 643
ACESO
Valor de millis = 974
Valor tempo1 = 643
ACESO
Valor de millis = 1027
Valor tempo1 = 643
ACESO
Valor de millis = 1080
Valor tempo1 = 643
ACESO
Valor de millis = 1133
Valor tempo1 = 643
APAGADO
Valor de millis = 1188
Valor tempo1 = 643
APAGADO
Valor de millis = 1244
Valor tempo1 = 643
APAGADO
Valor de millis = 1299
Valor tempo1 = 1281
ACESO
Valor de millis = 1353
Valor tempo1 = 1281
*/