LusoRobótica - Robótica em Português
Software => C/C++ => Tópico iniciado por: jrobe em 10 de Dezembro de 2011, 22:08
-
Srs.
Sou novo por aqui e também com o arduino. Solicito me ajudarem com o seguinte:
O código abaixo deveria escrever na serial sempre aproximadamente o mesmo valor, por que isso não acontece? O que há de errado?
#include <MsTimer2.h>
unsigned long contador = 0;
void setup(){
Serial.begin(9600);
MsTimer2::set(1000, flash);
MsTimer2::start();
}
void loop(){
contador = contador++;
}
void flash(){
Serial.println(contador);
contador = 0;
}
Agradeço qualquer ajuda.
José Roberto
-
Se quiseres verificar se o timer esta a ser disparado com precisão tenta antes verificar deste modo:
#include <MsTimer2.h>
unsigned long time_old =0, time_new= 0,contador = 0;
void flash() {
time_new = millis();
Serial.print("time: ");
Serial.print(time_new-time_old);
Serial.println("!");
Serial.println(contador);
contador = 0;
time_old = millis();
}
void setup() {
Serial.begin(9600);
MsTimer2::set(500, flash);
MsTimer2::start();
}
void loop() {
contador = contador++;
}
-
Veja o resultado:
time: 498!
126991
time: 500!
253882
time: 501!
126902
time: 499!
127089
time: 500!
126906
time: 501!
126903
time: 500!
126906
time: 500!
126903
time: 500!
126906
time: 500!
126906
time: 500!
188273
time: 500!
126906
time: 500!
253813
o valor de contador não deveria ser sempre aroximadamente o mesmo?
Obrigado.
-
Se fossemos para um nível mais abaixo, que não a programação "Arduino", sim deveria ser aproximadamente igual. O problema é o de sempre, como Arduino, é complicado usar em aplicações de precisão temporal. Existem rotinas escondidas que correm sem tu dares ordem explícita.
Experimenta colocar um delay() no teu loop() e observar o resultado.