나는 Arduino를 함수가 실행될 때마다 1 초 동안 잠자기 상태로 만들려고 노력하고있다.Arduino millis 기능이 예상보다 오래 걸림.
루프와 관련된 메서드는 실행 시간이 다를 수 있으므로 밀리 초를 구현 한 것입니다.
내가하고 있어요 다음
unsigned long ejecucionExcedida = 0;
int calcularExceso(int tiempo) {
if (tiempo>1000) {
ejecucionExcedida = ejecucionExcedida + (tiempo-1000);
// TO DO agregar alarma si el exceso se incrementa mucho
if(ejecucionExcedida > 20000) {
alertas(9);
}
// Listo las alertas :D
return 1000;
}
else {
if(ejecucionExcedida == 0) {
return tiempo;
}
else {
if (ejecucionExcedida + tiempo < 1000) {
ejecucionExcedida = 0;
return ejecucionExcedida + tiempo;
}
else {
int exceso = ejecucionExcedida + tiempo - 1000;
ejecucionExcedida = exceso;
return 1000;
}
}
}
}
void loop() {
unsigned long comienzo = millis();
// A couple of methods
unsigned long final = millis();
delay(calcularExceso(final-comienzo));
}
스케치는 각 실행에 정확히 하나의 초 지연 될 것으로 예상된다,하지만 난 시계와 그것을 초과하고 그것이 초당 실행보다 더 오래 복용 .
안녕하세요 Eric!무엇보다도 먼저 응답 해 주셔서 감사합니다. 코드를 실행하는 데 시간이 필요하다는 것을 고려해야합니다. 코드 밀리 (코드) 맨 위와 코드 맨 아래에 다시 놓은 이유는 무엇입니까? 그 사이에 알고리즘을 실행하는 데 많은 시간이 걸렸습니다. 그 결과로 나는 calcularExceso() 함수를 호출하여 차이가 1000보다 작 으면 1000을 슬립합니다. 그러나 더 많은 경우 초과를 저장합니다. –
하지만 delay()는 실행하는 데 시간이 걸리며 millis() 함수에도 시간이 걸립니다. – Eric
기대하는 것과 표시되는 것의 차이가 얼마나 큰지, 지연을 측정하는 방법과 arduino 프로세서가 얼마나 빠릅니까? – Eric