Anfängerfrage zu Berechnung mit unterschiedlichen Datentypen

ich bin auch bereit meinen Plan zu ändern, aber ich möchte nicht nur eine Lösung für diesen Einzelfall sondern auch Hintergründe verstehen.

Fein!

Trotzdem ziehe ich von einem [unsigned long] einen größeren [unsigned long] ab soll doch etwas negatives herauskommen.

Fakt:

if ((millis() - lTempMessung - TempConvertZeit) > TempIntervall)
Hier kannst du dir 2 Unterläufe einfangen.

Einer wird durch das Verfahren kompensiert.
Der zweite bricht dir das Genick.

Darum muss die Lösungssuche an einem Punkt beginnen, der vor der Fehlentscheidung mit der doppelten Subtraktion liegt!

Soweit einverstanden?

const unsigned long gesamtesMessInterval = 10000UL;
const unsigned long convertierInterval   = 3000UL;
const unsigned long warteInterval        = gesamtesMessInterval - convertierInterval;

unsigned long timestamp;

byte messStatus = 0;



void messwertAufnahme()
{
  switch(messStatus)
  {
    case 0 : Serial.print("Messung eingeleitet Zeit: "); Serial.println(millis());
             messStatus++;
             return;
             
    case 1 : if(millis() - timestamp < convertierInterval) return;
             Serial.print("Messung abgeschlossen Zeit: "); Serial.println(millis());
             timestamp += convertierInterval;
             messStatus++;
             return;
             
    case 2 : if(millis() - timestamp < warteInterval) return;
             Serial.print("Wartezeit abgeschlossen Zeit: "); Serial.println(millis());
             timestamp += warteInterval;
             messStatus = 0;
             return;
  }
}



void setup() 
{
  Serial.begin(9600);
  Serial.println("Start");
  timestamp = millis();
}

void loop() 
{
  messwertAufnahme();
}