Beste mensen,
dank alvast voor het meelezen en eventuele meedenken/meehelpen...
ik heb de volgende code gevonden van het internet en aangepast/bijgewerkt
//Confirm Settings
void confirmSettings() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Number of Steps:");
lcd.setCursor(7, 1);
lcd.print(noCookingSteps);
delay(2000);
for (int i = 0; i < noCookingSteps; i++) {
lcd.clear();
lcd.setCursor(4, 0);
lcd.print("Step:");
lcd.setCursor(10, 0);
lcd.print(i + 1);
lcd.setCursor(0, 1);
lcd.print(cookingStepsTempArray[i][1]);
lcd.setCursor(5, 1);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(10, 1);
lcd.print(cookingStepsTimeArray[i][0]);
lcd.setCursor(13, 1);
lcd.print("Min");
delay(2000);
}
}
//pidOutput Control
void pidOutput() {
for (int i = 0; i < noCookingSteps; i++) {
//LCD Setup
lcd.clear();
lcd.print("Step: SP:");
//lcd.print Step Number
lcd.setCursor(5, 0);
lcd.print(i + 1);
//lcd.print Temp Setpoint
lcd.setCursor(11, 0);
dtostrf(cookingStepsTempArray[i][1], 5, 1, spBuffer);
lcd.print(spBuffer);
//Set Cooking Timer
unsigned long cookingTimer = (cookingStepsTimeArray[i][0] * 60000);
//windowStartTime start
//windowStartTime = millis();
//set Setpoint from cookingStepsArray
Setpoint = cookingStepsTempArray[i][1];
//lcd.print for cookingStep Monitoring
lcd.setCursor(0, 1);
lcd.print("T:");
//turn the PID on
myPID.SetMode(AUTOMATIC);
//While 'now' reading is less than the cookingTimer, proceed with cooking.
while (millis() <= cookingTimer) {
//Read thermocouple temperature
readTemp();
//Compute PID output
myPID.Compute();
//When is now?
unsigned long now = millis();
if(millis() - windowStartTime>WindowSize)
{ //time to shift the Relay Window
windowStartTime += WindowSize;
}
//Update LCD every half a second with remaining time.
if (now - lastInt > 500) {
lastInt = now;
//lcd.print Seconds Remaining in cooking process
lcd.setCursor(2, 1);
dtostrf(((cookingTimer - now) ) / 1000), 4, 0, timeBuffer);
lcd.print(timeBuffer);
Serial.print("Timer ");
Serial.print(cookingTimer);
Serial.print(" now ");
Serial.print(now);
Serial.print(" = ");
Serial.print((((cookingTimer - now ) / 1000), 4, 0, timeBuffer));
Serial.print('\n');
if (Output <= 50) {
digitalWrite(relayPin, LOW);
finished = millis();
Serial.print("Op temperatuur");
Serial.print("\n");
} else {
digitalWrite(relayPin, HIGH);
Serial.print("Te koud!");
Serial.print("\n");
}
//lcd.print Input Temp
lcd.setCursor(9, 1);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(11, 1);
lcd.print(pvBuffer);
}
}
}
//turn the PID off before next step
myPID.SetMode(MANUAL);
digitalWrite(relayPin, LOW);
}
//readTemperature Sensor and pass it to Input
void readTemp() {
//Read thermocouple temperature
sensors.requestTemperatures();
//Pass to Input of PID
Input = sensors.getTempCByIndex(0);
dtostrf(Input, 5, 1, pvBuffer);
}
De code zorgt voor dat er een menu is waar ik aangeef hoeveel koop stappen ik wil hebben hoe lang die moeten duren en op welke temperatuur dit moet gebeuren. vervolgens gaat hij aan de slag en print hij uit hoeveel seconde de huidige stap nog moet uitvoeren vorens na de volgende te gaan.
Alleen is het probleem dus dat met deze code
//lcd.print Seconds Remaining in cooking process
lcd.setCursor(2, 1);
dtostrf(((cookingTimer - now) ) / 1000), 4, 0, timeBuffer);
lcd.print(timeBuffer);
Hij meteen vagint af te tellen zodra je de arduino opstart, ik ben al de nodige uren aan het bekijken hoe ik hem kan laten aftellen op het moment dat de relay op tenperatuur aangeeft....
now is uitgevoerd in millis en zorgt voor dit probleem sinds die telt vanaf het moment dat de arduino aan staat. enig idee hoe nu verder?