delayMicroseconds bug

nuovo problema!

sapevate che delayMicroseconds accetta solo int come argomento? e perchemai?????? allora vado ad aprire il wiring.c nei cores di arduino e cosa trovo che è dichiarato int...

provo a modificare: wiring.c

void delayMicroseconds(unsigned long us)

e wiring.h la stessa cosa.

però non cambia il risultato... pensavo bastasse quello qualche sommo conoscitore dei meandri di arduino mi può aiutare?

se ho capito bene in un post inglese spiegano che non può fare calcoli al contario su numeri 32bit così velocemente perchiò si limita al 16 bit...

peccato.

provo a scrivere una routine che passa direttamente al delay millis se supero il valore.

Apologies for reply in English...

This is original code void delayMicroseconds(unsigned int us)

There is no point in having a LONG... a 16 bit integer will give you enough room. (65535) that is 65 ms

1ms == 1000 Micro Seconds. You need a two part counter, one that counts to 1000 micro seconds, then one that counts the milliseconds.

Hope that is clear.

I saw the same post in English and tried to respond -- but it disappeared -- cross-posting rules I guess.

sorry but i deleted i because i read that 32 bit counter is too slow to count microsecond so my question was unuseful.

i undestand what you sad and is my answer to my question, i'm trying to write a function which separate microsecond e millisecond in order to make 2 separate delays from a long microsecond delay.

unsigned long tempo = 100001;

void setup() {
  Serial.begin(115200);
}

void loop() {
unsigned long time = micros();
aspetta(tempo);
time = micros()-time;
Serial.print(time);
//delay(1000);
}

void aspetta(unsigned long Now){
unsigned long t0 = micros()-10; //correzione di 10 ms dovuta al tempo dei comandi
while((micros()-t0) < Now){}
}

codice che ho usato per ovviare al problema
ogni consiglio è ben accetto…

"Currently, the largest value that will produce an accurate delay is 16383." (http://arduino.cc/en/Reference/DelayMicroseconds)