Retornar
ao topo
ao topo
Classifique este tópicoPéssimoRuimMedianoBomÓtimo

Autor
Mensagem
Bom dia estou tentando montar um temporizador com o Arduíno, porem estou testando sem o RTC, consegui testar o seguinte sketch: int seg=0, min=0,hor=0; void setup() { Serial.begin(9600); } void loop() { static unsigned long ult_tempo = 0; int tempo = millis(); if(tempo - ult_tempo >= 1000) { ult_tempo = tempo; seg++; } if(seg>=60) { seg = 0; min++; } if(min>=60) { min = 0; hor++; } if(hor>=24) { hor=0; min=0; } Serial.print(hor); Serial.print(":"); Serial.print(min); Serial.print(":"); Serial.println(seg); delay(1000); } // fim do código fonte: http://www.seucurso.com.b...-um-relogio-no-arduino&catid=901:arduino&Itemid=65 Fiz os testes e o código funciona bem, é possível calibrar a hora substituindo os valores do inteiro pelo horário atual para inciar a contagem, o único inconveniente é que o uso do millis parece que a contagem encerra em 50 dias, mas dependendo da necessidade não chega a ser um inconveniente. O código não substitui inteiramente o RTC mas pode quebrar um galho em alguns projetos. No sketch que estou elaborando pretendo acionar um led para teste, com base neste código fiz as seguintes alterações: // temporizador para acionamento led int seg=0, min=0,hor=0; int ledPin = 12; int ledState = LOW; // ledState usado para amazena o estado atual do led aceso o apagado long intervalo = 1000; // intervalo de um segundo void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { static unsigned long ult_tempo = 0; int tempo = millis(); if(tempo - ult_tempo >= 1000) { ult_tempo = tempo; seg++; } if(seg>=60) { seg = 0; min++; } if(min>=60) { min = 0; hor++; } if(hor>=24) { hor=0; min=0; } Serial.print(hor); Serial.print(":"); Serial.print(min); Serial.print(":"); Serial.println(seg); delay(1000); } void led (){ // liga o led de acordo com o tempo programado long previousMillis = millis(); int cnt=0; if (min = 2, ledState == LOW) // quanto tempo for igual a 2 minutos se o led estava apagado, acende o led ledState = HIGH; else // armazena o ultimo estado se o led estava aceso ledState = LOW; digitalWrite(ledPin, ledState); }// fim do código Contudo estou com problema no ultimo bloco" Void led", pois quero evitar o comando Delay, e utilizar o millis, para que o led fique aceso por 3 segundos e depois aguarde completar as 24 horas ou um segundo horário para que o mesmo acenda. Eu verifiquei o sketch não há erro no código, mas o led não está acendendo quando cumpre o prazo, não faço ideia onde posso ter errado, mas devo ter esquecido de amarrar alguma variavel. Será que alguém poderia me ajudar
denis.silva.dms Escreveu: Tente trocar:
" if (min = 2, ledState == LOW) // quanto tempo for igual a 2 (...)"
por: slope game
" if (min == 2, ledState = LOW) // quanto tempo for igual a 2 (...)" |
Última edição feita por katherinesoda em Qua Jun 08, 2022 10:56 pm; editado 1 vez no total
Fiz alguns relógios com millis também... mas a melhor maneira, e mais fácil, é usando a TimerLib (timer-master), Além de funcionar muito bem, você pode programar os alarmes, ver o dia da semana etc. Aqui esta o que fiz, funciona com ou sem RTC externo, atualiza via html ou via NTP. https://www.robocore.net/...opic&t=7106
|
|
|
Todos os horários são GMT - 3 Horas | Você não tem permissão para escrever novas mensagens v não tem permissão para responder às mensagens Você não tem permissão para editar suas mensagens Você não tem permissão para deletar suas mensagens Você não tem permissão para classificar tópicos Você não tem permissão para classificar mensagens Você não tem permissão para votar em enquetes Anexar downloads : Proibido Fazer Download de Arquivos: Proibido |
Powered by phpBB © 2001 phpBB Group