// 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
*/