Projekt Kaffeemühle mit Timersteuerung und Wägezellen

Hallo Leute,

ich sitze hier an einem Projekt. Habe jedoch ein Problem im Code sodass die Mühle nach dem ersten Mahlen nicht aufhört.
Hier eine Beschreibung des ganzen:

Würde mich über hilfe freuen.

int grinderPin = 13;
int isGrinding = LOW;
unsigned long delaybeforestart = 5000;
unsigned long swingdelay = 3000;
unsigned long firstgrindtime = 5000;
unsigned long secondgrindtime = 0;
unsigned long stoptime;
int counter=0;
float pause;

//Weigh

float loadA = 0; // kg
int analogvalA = 302.7; // analog reading taken with load A on the load cell
float loadB = -0.11375; // kg 
int analogvalB = 227.17; // analog reading taken with load B on the load cell
float analogValueAverage = 0;
long time = 0; // 
int timeBetweenReadings = 200; // We want a reading every 200 ms;
float newload;
float secondspergram;


//firstgrind um g/sec zu berechnen
void firstgrind() {
  
stoptime = millis() + firstgrindtime;
isGrinding = HIGH;
digitalWrite(grinderPin, HIGH);
counter=1;
Serial.println(counter);
}

//secondgrind um auf Wunschmenge  zu kommen
void secondgrind() {
stoptime = millis() + secondgrindtime;
isGrinding = HIGH;
digitalWrite(grinderPin, HIGH);
counter=3;
Serial.println(counter);
}



void setup(){
Serial.begin(9600);  
pinMode(grinderPin, OUTPUT);
digitalWrite(grinderPin, LOW);
float pause=delaybeforestart+firstgrindtime+swingdelay;
}

void loop(){

//firstgrind
if (millis()>=delaybeforestart){
firstgrind();
}
  
//Wiegen und berechnen und 2. Mahlung starten

if (counter==2 && millis()>=pause){
secondspergram=firstgrindtime/(newload*1000);
secondgrindtime= ((13-(newload*1000))*secondspergram);
Serial.println(secondgrindtime);
secondgrind();
}

// stop the grinder if nessesary
if(millis() >= stoptime && isGrinding == HIGH && counter == 1){
isGrinding = LOW;
digitalWrite(grinderPin, LOW);
counter=2;
Serial.println(counter);
}
if(millis() >= stoptime && isGrinding == HIGH && counter == 3){
isGrinding = LOW;
digitalWrite(grinderPin, LOW);
counter=4;
Serial.println(counter);
}

int analogValue = analogRead(0);

// running average - We smooth the readings a little bit
  analogValueAverage = 0.999*analogValueAverage + 0.001*analogValue;

// Is it time to print? 
  if(millis() > time + timeBetweenReadings){
    float load = analogToLoad(analogValueAverage);
    float newload=load-0.002;

//    Serial.print("analogValue: ");Serial.println(analogValueAverage);
//    Serial.print("             load: ");Serial.println(newload,4);
    time = millis();
  }

}


float analogToLoad(float analogval){

  // using a custom map-function, because the standard arduino map function only uses int
  float load = mapfloat(analogval, analogvalA, analogvalB, loadA, loadB);
  return load;
}

float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

Ich hab nur kurz drübergeschaut und einen Fehler gefunden:
Du deklarierst einen globalen float pause, und in setup() deklarierst du noch einen lokalen float pause, der aber beim Verlassen von setup() verloren geht. Sicher nicht beabsichtigt so...
das "float" vor "pause" in setup muss weg!