Robótica Livre
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Ir para baixo
Paulo Augusto Batista
Paulo Augusto Batista
Admin
Mensagens : 5039
Data de inscrição : 11/02/2019
Idade : 52
Escola : Colegio Lindaura
https://roboticalivre.forumeiros.com

A função millis() Empty A função millis()

Dom Jun 16, 2019 5:27 pm
millis()
[Funções Temporizadoras]
Descrição
Retorna o número de milissegundos passados desde que a placa Arduino começou a executar o programa atual. Esse número irá sofrer overflow (chegar ao maior número possível e então voltar pra zero), após aproximadamente 50 dias.

Sintaxe
time = millis()

Parâmetros
Nenhum

Retorna
O número de milissegundos passados desde que o programa iniciou (unsigned long)

Notas e Advertências
Note que o valor retornado por millis() é unsigned long, erros podem ser gerados se o programador tentar fazer operações matemáticas com outros tipos de dados, como int. Até mesmo o tipo long com sinal pode causar erros, já que seu valor máximo é metade de sua contraparte sem sinal.

Na aula fizemos o seguinte programa :
Código:
/*
 * CURSO DE ROBOTICA 2019
 *
 * Exercicio: 2.4
 * Tema: Função IF
 * Atividade: Alerme de Temperatura com Buzzer
 * Descrição: Usar um pino analógico ligado no NTC para monitorar a temperatura, se passar de um valor tocar o buzzer de forma intermitentemente
 * Hardware: Ligar o buzzer em um pino digital configurado como SAÍDA DIGITAL e o NTC em uma entrada analógica
 * Comandos: pinMode, analogRead, analogWrite,IF
 * Dica1:A saída analógica aceita valores entre 0 e 255, e o conversor analógico possui 10 bits ou seja até 1024
 * Dica2:converter a escala do NTC usando a função map,
 * Dica3:Escrever o valor lido do NTC é diretamente proporcional a temperatura, usar um valor entre 400 e 460 para disparar o buzzer
 * Dica4:Na função map tente ajustar os valores de entrada para acionar o buzzer com a temperatura da mão, lembrando que nesse circuito não é possível atingir o zero nem o valor máximo.
 * Dica5:EM temperatur ambiente 21 graus, sem conversão de escala, o valor lido fica em media 400 a 30 graus fica em media 460
 * Dica6:Fazer o buzzer tocar de forma intermitente, em beep, usar o contador de tempo millis() para não reter o programa
 */

//DEFINICOES INICIAIS
#define buz 12 //Definido o pino 3 para ligar o led
#define ldr A0 //definido que o pino A1 agora se chama NTC


//DECLARAcAO DE VARIAVEIS GLOBAIS
long tempo;  //definida como variavel de 32 bits, nela será carregado o tempo de execução para gerar o beep


//INICIALIZAÇÃO DO HARDWARE
void setup() {
  Serial.begin(9600);
pinMode(buz, OUTPUT); //programa o pino 3 como saída
tempo = millis(); // carrega a variavel tempo com o contador de execução do arduino
}

//FUNÇÕES COMPLEMENTARES
void debug(){  //Função para checar se tecla foi pressionada
  Serial.print("millis=");
  Serial.print(millis());
  Serial.print(" tempo=");
  Serial.print(tempo);
  Serial.print(" LDR=");
  Serial.print(analogRead(ldr));
  Serial.print("\n");
}
 

//PROGRAMA PRINCIPAL

void loop() {
  if(analogRead(ldr) >= 400){ //Testa se a temperatura for maior do que o limite e tambem se o teste está ativo
    if(millis() > (tempo + 1000)){  //testa se o buzzer esta desligado e o tempo está abaixo de t-low
      tone(buz,1500,100); // se a condição for atendida aciona o buzzer
      tempo = millis(); //atualiza o valor do tempo para o beep no buzze tempo = 1100
    }
}
debug();
delay(100);
}

Resultado do debug();
Código:
millis=100 tempo=0 LDR=801
millis=200 tempo=0 LDR=802
millis=302 tempo=0 LDR=803
millis=402 tempo=0 LDR=803
millis=503 tempo=0 LDR=800
millis=604 tempo=0 LDR=790
millis=704 tempo=0 LDR=787
millis=805 tempo=0 LDR=785
millis=906 tempo=0 LDR=785
millis=1006 tempo=1006 LDR=782
millis=1107 tempo=1006 LDR=787
millis=1208 tempo=1006 LDR=794
millis=1309 tempo=1006 LDR=803
millis=1411 tempo=1006 LDR=804
millis=1511 tempo=1006 LDR=804
millis=1612 tempo=1006 LDR=804
millis=1713 tempo=1006 LDR=802
millis=1814 tempo=1006 LDR=803
millis=1914 tempo=1006 LDR=803
millis=2016 tempo=2016 LDR=800
millis=2116 tempo=2016 LDR=804
millis=2217 tempo=2016 LDR=805
millis=2318 tempo=2016 LDR=805
millis=2419 tempo=2016 LDR=804
millis=2521 tempo=2016 LDR=803
millis=2621 tempo=2016 LDR=802
millis=2722 tempo=2016 LDR=802
millis=2823 tempo=2016 LDR=804
millis=2924 tempo=2016 LDR=804
millis=3024 tempo=3024 LDR=801
millis=3126 tempo=3024 LDR=804
millis=3226 tempo=3024 LDR=804
millis=3328 tempo=3024 LDR=803
millis=3428 tempo=3024 LDR=803
millis=3529 tempo=3024 LDR=803
millis=3630 tempo=3024 LDR=803
millis=3731 tempo=3024 LDR=805
millis=3832 tempo=3024 LDR=805
millis=3933 tempo=3024 LDR=805
millis=4034 tempo=4034 LDR=802
millis=4134 tempo=4034 LDR=804
millis=4236 tempo=4034 LDR=803
millis=4336 tempo=4034 LDR=803
millis=4438 tempo=4034 LDR=803
millis=4538 tempo=4034 LDR=804
millis=4639 tempo=4034 LDR=805
millis=4740 tempo=4034 LDR=805
millis=4841 tempo=4034 LDR=805
millis=4942 tempo=4034 LDR=805
millis=5043 tempo=5043 LDR=800
millis=5144 tempo=5043 LDR=801
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos