Durchflusssensor mit Bedingung / #Anfänger#

Hallo. Das Ergebnis bisher sieht schon sehr gut aus. Habe allerdings ein Problem, dass ich nicht ganz nachvollziehen kann. Zahl und t_ml sind alle als unsigned long deklariert. Beim Vergleich (t_ml >= (Zahl)) bricht die Schleife allerdings gleich beim ersten Durchlauf ab obwohl die Zahl 30 und t_ml 0 ist. Was habe ich falsch gemacht ?

Consoleninhalt:
13:38:10.876 -> 30
13:38:10.876 -> Zahl wird verarbeitet
13:38:11.890 -> Current flow: 0.0L/min Total: 0mL
13:38:11.938 -> Füllmenge erreicht

unsigned long Zahl;
char Data[5];                    //Anzahl der max Ziffernzahl -1 in diesem Fall eine 4-stellige Zahl
int i;                           //Arbeitsvariable
unsigned long Tempo;             // Startzeit für die Übertragung
int PINOUT = 8;                  // Pin 8 am Arduino festlegen
float cfactor = 5.0;
byte interrupt = 0;
byte sensorPin = 2;
byte pulseCount;
float flowRate;
unsigned int f_ml;
unsigned long t_ml;
unsigned long oldTime;


void setup()
{
  Serial.begin(9600);
  pinMode(PINOUT, OUTPUT);     // Initialisieren des Ausgangs
  digitalWrite(PINOUT, HIGH);  // Initialisiere: Relais aus
  pinMode(sensorPin, INPUT);
  digitalWrite(sensorPin, HIGH);
  attachInterrupt(interrupt, pulseCounter, FALLING);
}

void loop() {

  do {
    if (Serial.available()) {
      Data[i] = Serial.read();                        //liest die Zeichen nacheinander ein
      i++;
    }
    if (i < 1)Tempo = millis();                         // Startzeit abspeichern
  } while (i < 4 && (millis() - Tempo) < 500); // schleife solange nicht 4 Zeichen übertragenoder 0,5 Sekunden vorbei sind

  Data[i] = 0;                                                // Abschluß der Zeichenkette mit Null für die Umwandlung
  Zahl = atoi(Data);                                      // Umwandlung Zeichenkette zu
  i = 0;
  Serial.println(Zahl);                                   // ausgabe der Zahl zu kontrolle
  if (Zahl > 0) { // Testet, ob das Zeichen eine Zahl ist.
    Serial.println("Zahl wird verarbeitet" );
    digitalWrite(PINOUT, LOW);  // Schaltet ein
    delay(1000);
    do {
      if ((millis() - oldTime) > 1000)
      {
        int semic;
        detachInterrupt(interrupt);
        flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / cfactor;
        oldTime = millis();
        f_ml = (flowRate / 60) * 1000;
        t_ml += f_ml;
        Serial.print("Current flow: ");
        Serial.print(int(flowRate));
        Serial.print(".");
        semic = (flowRate - int(flowRate)) * 10;
        Serial.print(semic, DEC) ;
        Serial.print("L/min");
        Serial.print("  Total: ");
        Serial.print(t_ml);
        Serial.println("mL");
        pulseCount = 0;
        attachInterrupt(interrupt, pulseCounter, FALLING);
      }
    } while (t_ml >= (Zahl));
     Serial.println("Füllmenge erreicht");
    digitalWrite(PINOUT, HIGH);   // Schaltet aus
  }

  else {
    Serial.println("Das Zeichen ist keine Zahl");
  }
}

void pulseCounter()
{
  pulseCount++;
}