se ddebbo utilizzare millis facendo del polling non so mai se prdo del tempo
uint32_t lastMillis = 0;
uint32_t miaBaseTempi = 0;
...
...
if ( millis() - lastMillis => 10 ) {
miaBaseTempi ++
lastMillis = millis();
}
così miaBaseTempi viene incrementata ogni 10 ms ... poi tu te l'aggiusti come ti pare con il GPS.
Guglielmo
P.S.: ovvio che il loop() deve durare MENO di 10 ms o il tutto salta.
Se invece vuoi fare una cosa completamente indipendente da millis() usa la libreria SAMD_TimerInterrupt per creare un interrupt legato ad un Timer dedicato e fare con quello il tuo orologio.
Guglielmo
}
uint32_t lastMillis = 0;
uint32_t miaBaseTempi = 0;
...
...
if ( millis() - lastMillis => 10 ) { // puo succedere ce sono passati piu di 10 ms
//perche magari allo scadere dei 10 ms stavo facendo un adc di 4 sensori
miaBaseTempi ++
lastMillis = millis();
}
vedro la libreria timer ..
certo che potendo aggiungere quella istruzione non appesantirei nulla ...
... e NON cambieresti nemmeno nulla ... staresti SOLO duplicando millis() e allora usa quello!
Possibile che NON ti è chiaro che, se usi lo stesso meccanismo che fa avanzare millis ha SOLO una copia di millis?
Fatti il TUO timer e aggiustatelo come ti pare.
Guglielmo
si ma non posso variare il valore di millis a piacimento in quanto
millis viene usato nel programma parecchie volte
... e allora crea un tuo timer, con la precisione che ti occorre e richiami un interrupt che incrementa la tua variabile, indipendentemente da tutto.
Guglielmo
ho risolto con la mia idea
modificato delay.c
void SysTick_DefaultHandler(void)
{
extern uint32_t VKK_ZXC; // mia base tempi
// Increment tick count each ms
_ulTickCount++;
VKK_ZXC++;
tickReset();
}
mio programma
uint32_t VKK_ZXC = 3333333;
void setup() // inizio setup -----------------------------------------------------------------------------inizio swtup
{
vt2 = millis(); // questo non c'entra
VKK_ZXC = 600000000;
```void loop() // Inizio mio pgm--------------------------------------------------------------------------imizio pgm
``` Serial.print(millis());
Serial.print(" ");
Serial.println(VKK_ZXC);
il risultato
10910483 600910483
10910484 600910483
10910484 600910483
10910484 600910483
10910484 600910483
10910485 600910484
10910485 600910484
funziona ho cosi una variabile che posso leggere e scrivere a piacimento senza richiamare
alcuna funzioned alcuna libreria
sono accettate critiche e migliorie
digita o incolla il codice qui
digita o incolla il codice qui
Ciascuno si fa male come preferisce ... ![]()
Al primo aggiornamento del "core" devi rimetterci le mani o non funziona più nulla ...
... regola generale: MAI mettere direttamente le mani nei files del "core", ma trovare sempre un'altra strada perché ... prima o poi qualche cosa va storta.
Vedi un po' tu ...
Guglielmo
uso platformio per quel che riguarda le librerie non le aggiorna sui progetti esistenti
credo non ne sono sicuro che non aggiorni neanche i files core
communquue nel mio codice riportero le modifiche fatte dovessi rifarle
la prossima sara molto piu triste ..
porte seriali su due pin non facenti parte di arduino
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.