Problema codice

not:
Grazie delle risposte! @docdoc il mio problema è che voglio i dati esattamente ogni 40 ms, putroppo è questa la maggiore difficoltà.
come faccio ad avere intervalli "regolari"?

Con quella precisione, secondo me non puoi.
Il fatto è che il loop() è un processo continuo ma non è detto che parta né ogni millisecondo (o meno) né esattamente quando millis() è pari al precedente evento più esattamente 40. Se anche solo UNA volta la differenza dovesse per qualche ragione (es. un interrupt) non essere esattamente 40, ma 41, con quel codice non avrai MAI PIU' alcun evento perché l'if() sarà sempre falsa.
Considera anche che il timer interno che è usato da millis() non è del tutto preciso, quindi 40 millisecondi potrebbero a volte essere in realtà qualche decimale in più o in meno, e ad un certo punto basta che "salti" l'intero che stai daccapo col problema che non fa più niente.
In ogni caso mettere ">= 40" non significa quindi che potrebbe partire a 50ms o più, ma sarà quasi sempre 40, forse qualche volta 41. Ma non avendo la certezza di avere 40, devi mettere il ">=".