Første bryggeprosjekt - vvb - Arduino DIY

Hei.

En kompis og jeg er i oppstarten på vårt første bryggeprosjekt. Vi er helt uten erfaring med brygging, så her kan det dukke opp noen dumme spørsmål etter hvert. Vi har en plan om å bruke en varmtvannstank til oppvarming, mesking og koking.
Temperaturstyringen lager vi selv med et temperaturstyrt rele (ssr) som skrur på/av strømtilførsel til varmekolbe(r). Dette er Arduino-basert og vil videreutvikles etter hvert som vi ser an behov til å bli mer og mer automatisert. Legger ved bilde av prototypen på temperaturstyringen.



Sent from my iPhone using Tapatalk
 
Sist redigert:
Så, vi er kommet lengre i prosessen, og jeg plages med koden til Arduinoen. Mye er på plass, men problemet kommer når jeg skal bruke keypad til å velge en forhåndsprogrammert oppskrift. Jeg vil at programmet da skal kunne stegmeske, altså sjekke en temperatursensor og skru av/på varme dersom den ligger innenfor riktig temperatur. Etter en viss tid skal temperaturgrensen endres og holdes en viss tid, før den endres igjen. Problemet slik koden er nå, er at er at den sjekker temperaturen bare en gang, før den går tilbake til "velg program fra lista"-beskjeden på LCD. Er det noen Arduino-/C-kyndige som har gode råd om hvordan jeg kan få den til å repetere dette if-utsagnet i et forhåndsvalgt tidsintervall?


#include <Keypad.h>
#include <LiquidCrystal.h> //includes libraries for hardware
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2 //datacable for temp.sensor on digital pin 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire); //send oneWire-reference to Dallas Temperature

float step1Temp;
unsigned long step1Time;
float step2Temp;
unsigned long step2Time;
float step3Temp; // defining the different steps (if several) in the mashing-process as decimals (temperature) and integers (time).
unsigned long step3Time; // values will be defined later in the program, depending on which recipe is chosen by pressing a key on a keypad
float step4Temp; // keypad has 12 keys - potentially 12 preset recipes
unsigned long step4Time; // new recipes requires altering of program (replacing existing recipe)
float step5Temp;
unsigned long step5Time;

float tempInC = sensors.getTempCByIndex(0); //simplified name for comparing temperature

LiquidCrystal lcd(13, 14, 15, 16, 17, 18); //digital pins for LCD

const byte ROWS = 4; //Keypad has 4 rows
const byte COLS = 3; //keypad has 3 columns

char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'}, //defining keypad structure
{'7','8','9'},
{'#','0','*'}
};

byte rowPins[ROWS] = { 9, 8, 7, 6 }; // Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.

byte colPins[COLS] = { 12, 11, 10 }; // Connect keypad COL0, COL1 and COL2 to these Arduino pins.


Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //constructing keypad




const int onLed = 3; //LED on digital pin 3. this LED will light up when the heater is on
const int offLed = 4; //LED on digital pin 4. this LED will light up when the heater is off
const int relayPin = 5; //relay for switching power to heater on digital pin 5


void setup() {

sensors.begin();
lcd.begin(16,2);

lcd.println("Velkommen til"); //welcome message printed on LCD
lcd.print("GL bryggerier");
delay(6000); //wait 6 seconds - for brewers to enjoy message

}

void loop() {

lcd.println("Velg program fra"); //instructs brewer to chose program by pressing a single key on keypad
lcd.println("lista. 0-9"); //numbers 0-9 will match beer names on a written list on the wall

char key = kpd.getKey(); //requesting key input

if(key == '1'){
lcd.println("Du har valgt:"); //LCD informs you what type of beer you have chosen
lcd.print("India Pale Ale"); //'1' is a preset IPA recipe
step1Temp = 74;
step1Time = 1800000;
step2Temp = 70;
step2Time = 1000000;
step3Temp = 67; //temperature and time values are set according to a IPA recipe
step3Time = 700000; //these are just random values for the example
//step4Temp = ;
//step4Time = ;
//step5Temp = ;
//step5Time = ;
delay(6000); //wait 6 seconds so you can read about the choice

sensors.requestTemperatures(); //command to receive temperature reading
sensors.getTempCByIndex(0); //sends temperature in degrees Celsius

//initiating step 1
if (tempInC < step1Temp)
{ digitalWrite (relayPin, HIGH); //if temperature is under preset limit, relay/heater goes on
digitalWrite (onLed, HIGH); //if temperature is under preset limit, red LED goes on.
digitalWrite (offLed, LOW);
lcd.println("Temperatur:");
lcd.print(tempInC); //LCD prints temperature
lcd.setCursor(1,6);
lcd.print("Celsius");
}

else
{
digitalWrite (relayPin, LOW); //heater off
digitalWrite (offLed, HIGH); //white LED on, indicates heater off
digitalWrite (onLed, LOW);
lcd.println("Temperatur:");
lcd.print(tempInC); //LCD prints temperature
lcd.setCursor(1,6);
lcd.print("Celsius");
}


//initiating step 2
if (tempInC < step2Temp)
{ digitalWrite (relayPin, HIGH); //if temperature is under preset limit, relay/heater goes on
digitalWrite (onLed, HIGH); //if temperature is under preset limit, red LED goes on.
digitalWrite (offLed, LOW);
lcd.println("Temperatur:");
lcd.print(tempInC); //LCD prints temperature
lcd.setCursor(1,6);
lcd.print("Celsius");
}

else
{
digitalWrite (relayPin, LOW); //heater off
digitalWrite (offLed, HIGH); //white LED on, indicates heater off
digitalWrite (onLed, LOW);
lcd.println("Temperatur:");
lcd.print(tempInC); //LCD prints temperature
lcd.setCursor(1,6);
lcd.print("Celsius");
}


//initiating step 3
if (tempInC < step3Temp)
{ digitalWrite (relayPin, HIGH); //if temperature is under preset limit, relay/heater goes on
digitalWrite (onLed, HIGH); //if temperature is under preset limit, red LED goes on.
digitalWrite (offLed, LOW);
lcd.println("Temperatur:");
lcd.print(tempInC); //LCD prints temperature
lcd.setCursor(1,6);
lcd.print("Celsius");
}

else
{
digitalWrite (relayPin, LOW); //heater off
digitalWrite (offLed, HIGH); //white LED on, indicates heater off
digitalWrite (onLed, LOW);
lcd.println("Temperatur:");
lcd.print(tempInC); //LCD prints temperature
lcd.setCursor(1,6);
lcd.print("Celsius");
}

}

}
 

Amarillo

Norbrygg-medlem
Hvis koden stopper her og venter på input fra keypad:

char key = kpd.getKey();

Ville jeg flyttet hele denne biten til void setup(), for den skal vel bare kjøre en gang?

Kode:
lcd.println("Velg program fra"); //instructs brewer to chose program by pressing a single key on keypad
lcd.println("lista. 0-9"); //numbers 0-9 will match beer names on a written list on the wall

char key = kpd.getKey(); //requesting key input

if(key == '1'){
lcd.println("Du har valgt:"); //LCD informs you what type of beer you have chosen
lcd.print("India Pale Ale"); //'1' is a preset IPA recipe
step1Temp = 74;
step1Time = 1800000;
step2Temp = 70;
step2Time = 1000000;
step3Temp = 67; //temperature and time values are set according to a IPA recipe
step3Time = 700000; //these are just random values for the example 
//step4Temp = ;
//step4Time = ;
//step5Temp = ;
//step5Time = ;
delay(6000); //wait 6 seconds so you can read about the choice
 
Sist redigert:

Amarillo

Norbrygg-medlem
I stedet fo if-else ville jeg heller gått for while-looper.
Noe som dette:

Kode:
time = millis();
    while (time + millis() < step1Time) {
      // din kode her
.
.
.
    }

Du trenger egentlig ikke noe kode i void loop() hvis du gjør det på denne måten. Hvert steg vil gå til forhåndsprogrammert tid er oppnådd, og så vil koden gå til neste steg.
I hver while-loop legger du sjekk av temperatur, slår elementer av og på og sender temperaturen til displayet.
 
I stedet fo if-else ville jeg heller gått for while-looper.
Noe som dette:

Kode:
time = millis();
    while (time + millis() < step1Time) {
      // din kode her
.
.
.
    }

Du trenger egentlig ikke noe kode i void loop() hvis du gjør det på denne måten. Hvert steg vil gå til forhåndsprogrammert tid er oppnådd, og så vil koden gå til neste steg.
I hver while-loop legger du sjekk av temperatur, slår elementer av og på og sender temperaturen til displayet.


Perfekt! Jeg tenkte å kanskje kjøre all kode i setup når du sa det med keypad i setup i forrige innlegg. Vil det være mulig å lage en funksjon med fem steg (meskesteg), og kun plotte stegTemp og tid ut fra valgt oppskrift?


Sent from my iPhone using Tapatalk
 

Amarillo

Norbrygg-medlem
Er ikke helt sikker på hva du mener med funksjon med fem steg, men hvis du f.eks. har 5 meskesteg ville jeg ha laget 5 while-looper som sjekker tid. Inne i loopen kalles en funksjon som leser temperaturen fra sensor og skriver til displayet. Så sjekkes temperatur mot programmert temperatur og elementer slås av/på. Sparer noen linjer på det, og koden blir mer oversiktlig.
 
Sist redigert:
Er ikke helt sikker på hva du mener med funksjon med fem steg, men hvis du f.eks. har 5 meskesteg ville jeg ha laget 5 while-looper som sjekker tid. Inne i loopen kalles en funksjon som leser temperaturen fra sensor og skriver til displayet. Så sjekkes temperatur mot programmert temperatur og elementer slås av/på. Sparer noen linjer på det, og koden blir mer oversiktlig.
Det funker helt sikkert.
Litt vanskelig å forklare hva jeg mener, men i og med at jeg skal bruke keypad med 12 taster for å velge øltype (det vil potensielt kunne ligge 12 oppskrifter inne), må jeg lage 12x5 = 60 while looper. Jeg har også fått litt hjelp på arduino.cc-forumet. Der mener de at jeg kan lage en funksjon f.eks.
void function step1(unsigned int step1Time, float step1Temp)
Hvor da step1Time og step1Temp blir definert ut fra hvilken tast/oppskrift man velger. Skal se om jeg får til en kombinasjon av while og funksjon, så holder det å lage 5 while-looper.
 

Amarillo

Norbrygg-medlem
Du trenger bare 5 looper fordi du kjører bare ett meskeprogram om gangen.
Du må bare legge inn 12 'oppskrifter' som dette:

if(key = '1'){
step1Temp = 47;
step1Time = 1800000;
step2Temp = 56;
step2Time = 1000000;
.
.
}

if(key = '2'){
step1Temp = 56;
step1Time = 1100000;
step2Temp = 70;
step2Time = 1200000;
step3Temp = 67;
.
.
}

Du bruker dermed de samme variablene, men setter forskjellige verdier på dem ut fra oppskrift.
Variablene blir universelle og kan brukes i de samme loopene.
Har du en oppskrift med f.eks. bare 3 meskesteg, så settes bare de to siste tidene til 0 så funker det også.

Håper dette var forståelig, ikke enkelt å forklare kode med ord :confused:
Men det er nok flere måter å gjøre dette på.
 
Sist redigert:

Amarillo

Norbrygg-medlem
En mulig kombinasjon av while og funksjoner:

Kode:
 void getTempPrintLcd(); {
    sensors.requestTemperatures();
    tempInC = (sensors.getTempCByIndex(0));
    lcd.println("Temperatur:");
    lcd.print(tempInC);
    lcd.setCursor(1, 6);
    lcd.print("Celsius");
  }

  void elementOn() {
    digitalWrite (relayPin, HIGH);
    digitalWrite (onLed, HIGH);
    digitalWrite (offLed, LOW);
  }

  void elementOff() {
    digitalWrite (relayPin, LOW);
    digitalWrite (onLed, LOW);
    digitalWrite (offLed, HIGH);
  }

  time = millis();
  while (time + millis() < step1Time) {
    getTempPrintLcd();
    if (tempInC < step1Temp) elementOn()
      else elementOff()
      }

  time = millis();
  while (time + millis() < step2Time) {
    getTempPrintLcd();
    if (tempInC < step2Temp) elementOn()
      else elementOff()
      }
 
En mulig kombinasjon av while og funksjoner:

Kode:
 void getTempPrintLcd(); {
    sensors.requestTemperatures();
    tempInC = (sensors.getTempCByIndex(0));
    lcd.println("Temperatur:");
    lcd.print(tempInC);
    lcd.setCursor(1, 6);
    lcd.print("Celsius");
  }

  void elementOn() {
    digitalWrite (relayPin, HIGH);
    digitalWrite (onLed, HIGH);
    digitalWrite (offLed, LOW);
  }

  void elementOff() {
    digitalWrite (relayPin, LOW);
    digitalWrite (onLed, LOW);
    digitalWrite (offLed, HIGH);
  }

  time = millis();
  while (time + millis() < step1Time) {
    getTempPrintLcd();
    if (tempInC < step1Temp) elementOn()
      else elementOff()
      }

  time = millis();
  while (time + millis() < step2Time) {
    getTempPrintLcd();
    if (tempInC < step2Temp) elementOn()
      else elementOff()
      }

Dette ser strøkent ut. Nydelig med god hjelp - takk!
Nå må bare Megaen komme i posten så jeg får koblet kretsen også, får ikke plass til alt på Uno..;)


Sent from my iPhone using Tapatalk
 

Amarillo

Norbrygg-medlem
Bare hyggelig å kunne hjelpe.
Et lite tips som dere kan tenke på, jeg ville heller brukt en nodemcu i stedet for Arduino.
Programmeringen og funksjonen er helt lik, men enheten kobles til wifi.
Da kan dere hente ut data til nettsider og styre enheten via telefonen med f.eks. Blynk og pensjonere både display og keypad.

Funksjonen blir kanskje ikke veldig mye bedre, men kulhetsfaktoren vil øke med flere hakk. :cool:
Men når dere først har startet med Arduino er det nok best å få alt til å fungere på den først og så evt. ta et nytt skritt etterpå.
 
Bare hyggelig å kunne hjelpe.
Et lite tips som dere kan tenke på, jeg ville heller brukt en nodemcu i stedet for Arduino.
Programmeringen og funksjonen er helt lik, men enheten kobles til wifi.
Da kan dere hente ut data til nettsider og styre enheten via telefonen med f.eks. Blynk og pensjonere både display og keypad.

Funksjonen blir kanskje ikke veldig mye bedre, men kulhetsfaktoren vil øke med flere hakk. :cool:
Men når dere først har startet med Arduino er det nok best å få alt til å fungere på den først og så evt. ta et nytt skritt etterpå.

Hehe, takk for tipset:) det går an å bygge ut det samme med arduino ved hjelp av et wifi eller 4g shield. Vi kommer nok til å bevege oss i den retningen etter hvert som koden sitter og vi har fått litt erfaring med bryggingen.
PS: ikke se bort fra at det kan dukke opp flere spørsmål her[emoji6]


Sent from my iPhone using Tapatalk
 

TorfinnS

Norbrygg-medlem
Står varmeelementet rett inn i mesken? Kan se ut som du har tenkt på en termostatfunksjon for å styre varmen? I såfall kan det være litt vanskelig å holde en konstant temperatur, litt avhengig av hvordan elementet er plassert. Du kan få overskyting av temp. En bedre løsning vil være å programmere en PI funksjon, evt PID. Det er jo litt mer arbeid å programmere en pid fra scratch.

https://no.m.wikipedia.org/wiki/PID-regulator
 
Står varmeelementet rett inn i mesken? Kan se ut som du har tenkt på en termostatfunksjon for å styre varmen? I såfall kan det være litt vanskelig å holde en konstant temperatur, litt avhengig av hvordan elementet er plassert. Du kan få overskyting av temp. En bedre løsning vil være å programmere en PI funksjon, evt PID. Det er jo litt mer arbeid å programmere en pid fra scratch.

https://no.m.wikipedia.org/wiki/PID-regulator
Takk for tipset. Varmelementet står rett inn i mesken ja, det går ca 4/5 inn i tanken, ca 25cm fra bunn. Jeg er ikke så dyktig at jeg kan programmere en PI eller PID enda, men om det viser seg nødvendig, må man kanskje prøve det og. Har du erfaring med overskyting av temp med en slik temp-styring? Hvor mye vil man kunne gå over i så fall, og i hvor stor grad vil det påvirke kvaliteten på produktet?
 
Nå har jeg forsøkt å skrive om koden, og den er blitt til dette:
Kode:
key = kpd.getKey(); //checking for pressed key

  while (key == NO_KEY){     
  lcd.print("Velg program fra");
  lcd.setCursor(0,1);
  lcd.print("lista...  0-9   ");
}
if (key == '1') {   //valg 1 er IPA. Sett inn meskeverdier for IPA.
  step1Temp = 47;
  step1Time = 1800000;
  step2Temp = 56;
  step2Time = 100000;
  step3Temp = 65;
  step3Time = 700000;
  step4Temp = 0;
  step4Time = 0;
  step5Temp = 0;
  step5Time = 0;
}

else if (key == '2') {
  step1Temp = 49;
  step1Time = 1300000;
  step2Temp = 59;
  step2Time = 1100000;
  step3Temp = 67;
  step3Time = 600000;
  step4Temp = 0;
  step4Time = 0;
  step5Temp = 0;
  step5Time = 0;
}

//COMNTINUE ELSE IF FROM 3-9


step1(step1Time, step1Temp);
step2(step2Time, step2Temp);
step3(step3Time, step3Temp);
step4(step4Time, step4Temp);
step5(step5Time, step5Temp);
elementOff();
lcd.clear();
lcd.print("Mesking ferdig");
//make buzzing victorymarch
}

void loop() {
}

void getTempPrintLcd() {    //function to read and print temp from sensor
  sensors.requestTemperatures();
  tempInC = (sensors.getTempCByIndex(0));
  lcd.print("Temperatur:");
  lcd.setCursor(0,1);
  lcd.print(tempInC);
  lcd.setCursor(6,1);
  lcd.print("Celsius");
}

void elementOn() {        //function to turn relay/heat-element and red LED on
  digitalWrite (relayPin, HIGH);
  digitalWrite (onLed, HIGH);
  digitalWrite (offLed, LOW);
}

void elementOff() {       //function to turn relay/heat-element and white LED on
  digitalWrite (relayPin, LOW);
  digitalWrite (onLed, LOW);
  digitalWrite (offLed, HIGH);
}

void step1(unsigned long step1Time, float step1Temp) {  //function to read step1 time and temp and turn heat on or off according to temperature and time passed
  unsigned long then1 = millis(); //registers milliseconds passed since program start
  while(millis()-then1 < step1Time){
    getTempPrintLcd();
    if (tempInC < step1Temp) {
      elementOn();
    }
    else{
      elementOff();
    }
  }
}

void step2(unsigned long step2Time, float step2Temp) {  //function to read step2 time and temp and turn heat on or off according to temperature and time passed
  unsigned long then2 = millis(); //registers milliseconds passed since program start
  while(millis()-then2 < step2Time){
    getTempPrintLcd();
    if (tempInC < step2Temp) {
      elementOn();
    }
    else{
      elementOff();
    }
  }
}

void step3(unsigned long step3Time, float step3Temp) {    //function to read step3 time and temp and turn heat on or off according to temperature and time passed
  unsigned long then3 = millis(); //registers milliseconds passed since program start
  while(millis()-then3 < step3Time){
    getTempPrintLcd();
    if (tempInC < step3Temp) {
      elementOn();
    }
    else{
      elementOff();
    }
  }
}

void step4(unsigned long step4Time, float step4Temp) {    //function to read step4 time and temp and turn heat on or off according to temperature and time passed
  unsigned long then4 = millis(); //registers milliseconds passed since program start
  while(millis()-then4 < step4Time){
    getTempPrintLcd();
    if (tempInC < step4Temp) {
      elementOn();
    }
    else{
      elementOff();
    }
  }
}

void step5(unsigned long step5Time, float step5Temp) {    //function to read step5 time and temp and turn heat on or off according to temperature and time passed
  unsigned long then5 = millis(); //registers milliseconds passed since program start
  while(millis()-then5 < step5Time){
    getTempPrintLcd();
    if (tempInC < step5Temp) {
      elementOn();
    }
    else{
      elementOff();
    }
  }
}

Her har jeg laget en funksjon for hvert steg. Da jeg var ferdig med det, slo det meg at jeg muligens kan lage bare en stegfunksjon, og sette forskjellige temp- og tidsverdier i den, slik?:

Kode:
key = kpd.getKey(); //checking for pressed key

  while (key == NO_KEY){     
  lcd.print("Velg program fra");
  lcd.setCursor(0,1);
  lcd.print("lista...  0-9   ");
}
if (key == '1') {   //valg 1 er IPA. Sett inn meskeverdier for IPA.
  step1Temp = 47;
  step1Time = 1800000;
  step2Temp = 56;
  step2Time = 100000;
  step3Temp = 65;
  step3Time = 700000;
  step4Temp = 0;
  step4Time = 0;
  step5Temp = 0;
  step5Time = 0;
}

else if (key == '2') {
  step1Temp = 49;
  step1Time = 1300000;
  step2Temp = 59;
  step2Time = 1100000;
  step3Temp = 67;
  step3Time = 600000;
  step4Temp = 0;
  step4Time = 0;
  step5Temp = 0;
  step5Time = 0;
}

//COMNTINUE ELSE IF FROM 3-9


steps(step1Time, step1Temp);
steps(step2Time, step2Temp);
steps(step3Time, step3Temp);
steps(step4Time, step4Temp);
steps(step5Time, step5Temp);

elementOff();
lcd.clear();
lcd.print("Mesking ferdig");
//make buzzing victorymarch
}

void loop() {
}

void getTempPrintLcd() {    //function to read and print temp from sensor
  sensors.requestTemperatures();
  tempInC = (sensors.getTempCByIndex(0));
  lcd.print("Temperatur:");
  lcd.setCursor(0,1);
  lcd.print(tempInC);
  lcd.setCursor(6,1);
  lcd.print("Celsius");
}

void elementOn() {        //function to turn relay/heat-element and red LED on
  digitalWrite (relayPin, HIGH);
  digitalWrite (onLed, HIGH);
  digitalWrite (offLed, LOW);
}

void elementOff() {       //function to turn relay/heat-element and white LED on
  digitalWrite (relayPin, LOW);
  digitalWrite (onLed, LOW);
  digitalWrite (offLed, HIGH);
}

void steps(unsigned long timer, float tempLimit) {  //function to read step time and and temp and turn heat on or off according to temperature and time passed
  unsigned long then = millis(); //registers milliseconds passed since program start
  while(millis()-then < timer){
    getTempPrintLcd();
    if (tempInC < tempLimit) {
      elementOn();
    }
    else{
      elementOff();
    }
  }
}

Vil noen av disse funke? Vil begge? Den andre løsningen er mer sexy i så fall.. :)
 
Sist redigert:

TorfinnS

Norbrygg-medlem
Takk for tipset. Varmelementet står rett inn i mesken ja, det går ca 4/5 inn i tanken, ca 25cm fra bunn. Jeg er ikke så dyktig at jeg kan programmere en PI eller PID enda, men om det viser seg nødvendig, må man kanskje prøve det og. Har du erfaring med overskyting av temp med en slik temp-styring? Hvor mye vil man kunne gå over i så fall, og i hvor stor grad vil det påvirke kvaliteten på produktet?
Ikke annet enn det vi har på vårt system. Men det er med rims og litt annerledes. Vi har stor termisk masse i elementet, og kan overskyte temperaturen med 5-7 grader. http://www.behindbarsbrewery.net/2017/04/19/mesketemperaturens-pavirkning-pa-det-ferdige-olet/
 
Synes det ser bra ut, spesielt den siste utgaven.
Dette bør funke, det er bare å teste med temperatursensor og en led for varmeelement så luker du fort ut småfeil (hvis det er noen).
Bør vel legge til en elementOn til step1Temp er oppnådd.. Ellers ble jeg litt usikker på om jeg burde prøve å legge inn PID-regulering med en gang - må si jeg ikke helt henger med på koden du linket til/hvordan den kan integreres. Jeg må vertfall legge inn et slingringsmonn på kanskje +-0.3 grader, så ikke releet går av og på riktig hele tiden...
 
Kode:
//CONTINUE ELSE IF FROM 3-9

  sensors.requestTemperatures();
  tempInC = (sensors.getTempCByIndex(0));
  while(tempInC < (step1Temp-0.1)) {
    elementOn();
  }

steps(step1Time, step1Temp);
steps(step2Time, step2Temp);
steps(step3Time, step3Temp);
steps(step4Time, step4Temp);
steps(step5Time, step5Temp);

elementOff();
lcd.clear();
lcd.print("Mesking ferdig");
//make buzzing victorymarch
}

Noe sånt. Element vil ikke skrus av og på mellom hver temp-sjekk
 
Topp