Ciao Ragazzi, ho anch'io un problema con il millis(), non voglio intromettermi nell'argomento così brutalmente quindi se non è consono i moderatori sono liberissimi di cancellare o spostare la mia risposta/richiesta.
in soldoni, dopo aver letto svariati modi di utilizzare il millis() ed evitare l'overflow, il risultato migliore per il mio programma l'ho ottenuto seguendo la piccola guida di Leonardo (Milani):
http://www.leonardomiliani.com/2013/programmiamo-i-compiti-con-millis/
Vi spiego in breve (anche se credo di essere stato abbastanza chiaro nel codice): ovviamente il problema si pone perchè cerco di lavorare in multitasking. Una parte del programma si occupa di gestire una ventola (fanr) in funzione di un delta Temp (fra due sensori: quello nel DTH11 (h) e un DS18B20 -sensors.getTempCByIndex(0) ). Intanto che il programma esegue questo semplice comando deve rilevare la temperatura media fra i due sensori e nel caso A (temp < di 21°) accende una resistenza e una ventola, nel caso B (temp >= a 21°) spegne la resistenza e esegue un ciclo (quello che vorrei gestire con il millis() ) che consiste nell'accendere una ventola (vent) per una durata di 10s e tenerla spenta per una durata di 30s. Caricando il programma che segue verificando le condizioni, scopro che nel caso A resistenza e ventola si accendono (beh li è facile), nel caso B la resistenza si spegne, la ventola rimane accesa per un tempo sicuramente maggiore di 10s (all'incirca 12) e rimane spenta forse per 3/5s... Perdonatemi se dal codice si evince qualche errore stupido ma sono proprio agli inizi, mi troverei più a mio agio a revisionare una turbina della macchina da bendato con una mano legata dietro la schiena e un gatto che si fà le unghie sulla mia gamba (non so se rendo l'idea) 
// Definizione Temperatura e Umidità impostata:
#define imptemp 21
#define imphum 50
//SENSORE DS18B20
#include <OneWire.h>
#include <DallasTemperature.h>
//SENSORE DHT11
#include "DHT.h"
#define DHTPIN 6 // what pin we're connected to
#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);
//UTENZE
int fanr = 10; //Ventola piccola ricircolo
int ledr = 11; //Led Rosso
int ledg = 8; //Led Verde
int ledb = 12; //Led Blu
int res = 4; // resistenza
int vent = 7; //ventola
int pompa = 5; //ventola
int evap = 2; //evaporatore
// Il terminale data del sensore è connesso alla porta 9 di Arduino
#define ONE_WIRE_BUS 9
// Imposta la comunicazione oneWire per comunicare con un dispositivo compatibile
OneWire oneWire(ONE_WIRE_BUS);
// Passaggio oneWire reference alla Dallas Temperature.
DallasTemperature sensors(&oneWire);
extern unsigned long timer0_millis;
unsigned long previousMillis1 = 0; //will store last time vent was updated
unsigned long interval1 = 10000; //interval accensione ventola
unsigned long previousMillis2 = 0;
unsigned long interval2 = 30000;
unsigned int counter = 0;
void setup()
{
// Avvio librerie
sensors.begin();
Serial.begin(9600);
// definizione INPUT e OUTPUT
pinMode(fanr, OUTPUT);
pinMode(ledr, OUTPUT);
pinMode(ledg, OUTPUT);
pinMode(ledb, OUTPUT);
pinMode(res, OUTPUT);
pinMode(vent, OUTPUT);
pinMode(pompa, OUTPUT);
pinMode(evap, OUTPUT);
}
oid loop()
{
float h = dht.readHumidity(); //Valore Umidità DHT11
float tb = dht.readTemperature(); //Valore temperatura DHT11
sensors.requestTemperatures(); // Invia il comando di lettura delle temperatura al sensore DS18B20
//se deltaT fra T1 e T2 è compreso frà -50 e 2° la ventola è al 10% e il led blu è acceso
if ((sensors.getTempCByIndex(0) - tb) >=-50 && (sensors.getTempCByIndex(0) - tb) <=2 ) {
analogWrite(fanr, 40);
digitalWrite(ledb,HIGH);
digitalWrite(ledr,LOW);
digitalWrite(ledg,LOW);
}
//se deltaT fra T1 e T2 è compreso frà 2° e 5° la ventola è al 50% e il led verde è acceso
if ((sensors.getTempCByIndex(0) - tb) >=2 && (sensors.getTempCByIndex(0) - tb) <=5 )
{
analogWrite(fanr, 127);
digitalWrite(ledg,HIGH);
digitalWrite(ledr,LOW);
digitalWrite(ledb,LOW);
}
//se deltaT fra T1 e T2 è maggiore di 5° la ventola è al 100% e il led rosso è acceso
if ((sensors.getTempCByIndex(0) - tb) >5 )
{
analogWrite(fanr, 255);
digitalWrite(ledr,HIGH);
digitalWrite(ledb,LOW);
digitalWrite(ledg,LOW);
}
Serial.print("Tempo: ");
Serial.println (millis()/1000);
Serial.print("media: ");
Serial.println ((sensors.getTempCByIndex(0) + tb)/2); // media
if (((sensors.getTempCByIndex(0) + tb)/2) <imptemp) //se la temperatura media è minore di quella impostata (imptemp) parte la ventola e la resistenza
{
digitalWrite(res, HIGH);
digitalWrite(vent,HIGH);
}
if (((sensors.getTempCByIndex(0) + tb)/2) >= imptemp) //se la temperatura media è maggiore/uguale a quella impostata (imptemp) parte la ventola per 10s e rimane spenta 30s, la resistenza è spenta
{
// la resistenza si spegne
digitalWrite(res, LOW);
//nelle condizioni di cui sopra la ventola si accende per 10sec (interval1 10000)
unsigned long currentMillis = millis();
if (currentMillis - previousMillis1 > interval1)
{
previousMillis1 = currentMillis;
digitalWrite(vent,HIGH);
}
//nelle condizioni di cui sopra la ventola rimane spenta per 30sec (interval1 20000)
currentMillis = millis();
if (currentMillis - previousMillis2 > interval2)
{
previousMillis2 = currentMillis;
digitalWrite(vent,LOW);
}
}
}
PS: ci sarebbe un'altra parte di codice che gestisce altre funzioni in funzione dell'umidità e risolve l'overflow (dato che è un sistema che rimane acceso 24h su 24, ma per ora mi interessa risolvere la questione millis(), il resto lo risolvo di conseguenza.
Grazie mille,
a presto!