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 :
Resultado do debug();
[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
Permissões neste sub-fórum
Não podes responder a tópicos
|
|