stufa a pellet con arduino, mi sono bloccato alle prime pause...(inesperto)

salve, ho cercato in rete ma non ho trovato precedenti da copiare o da prendere spunto, comunque conosco bene il processo di gestione di una stufa a pellet visto che ne faccio assistenza per diverse ditte e mi è venuta l'idea di fare una scheda di potenza con a capo di tutto un bel arduino....

Allora: ci sono da gestire 2 o + sonde di temperatura, un paio di uscite a relè e un paio analogiche, poi un display e qualche pulsante.
collego il display e qualche led per simulare le uscite e inizio a smanettare con le sonde di temperatura, nessun problema riesco a trovare un compromesso per rilevare la giusta temperatura che mi serve, poi inizio a scrivere qualche riga, diciamo che premendo un pulsante per qualche secondo devo entrare in pezzo di programma dove devo caricare il pellet, accendere la candeletta, e attendere che una soglia di temperatura venga superata dalla sonda fumi, poi passo al secondo pezzo di programma, dove bisogna stabilizzare la fiamma quindi caricare il combustibile con degli intervalli prestabiliti, e poi passare alla scelta della potenza da usare.
Sembra tutto funzionare, sostituisco una sonda con un potenziometro per simulare la fiamma e il programma gira, salta di passo in passo, tutto così semplice? possibile? sono al mio promo progettino!!!! infatti noto subito che arduino mentre fa una pausa, esempio tra una caricata e l'altra di combustibile si dimentica del resto del programma!!!! come cavolo si faa fargli gestire + cose contemporaneamente? esempio ho messo che se schiaccio il pulsante 2 mi fa vedere a display le temperature delle sonde per qualche secondo, e in quel tempo che è impegnato ad aspettare non fa nient'altro che quello, si scorda di caricare il pellet!!!
E ridicolo ma mi so bloccato, ho cercato in rete e sul forum ma non ci sto capendo, aiutatemi a capire come muovermi, o dove documentarmi.
posto il programma fatto fino ad ora per farvi capire...

Grazie

#include <LiquidCrystal.h> //libreria dell'lcd

LiquidCrystal lcd(5, 4, 3, 2, 1, 0); //settia le uscite per lcd
int tempFumi; // variabile temperatura fumi
int tempAria; // variabile temperatura aria
int acceso; // variabile stufa accesa
int passo; // variabile passo del programma

int sondaFumi = 0; // pin analogico sonda fumi
int sondaAria = 1; // pin analogico sonda aria
int setEstrat = 2; // pin analogico trimmer estrattore
int setPellet = 3; // pin analogico trimmer pellet

int ledLCD = 6; // uscita analogica regolazione retroilluminazione
int tasto1 = 7; // ingresso pulsante 1 accensione
int tasto2 = 8; // ingresso pulsante 2 visualizza temperature
int outEstrat = 9; // uscita analogica estrattore fumi
int outVentol = 10; // uscita analogica ventola scambiatore
int outPellet = 11; // uscita relè motore trasportatore
int outCandel = 12; // uscita relè candeletta accensione

void setup() {
pinMode(ledLCD, OUTPUT);
pinMode(outEstrat, OUTPUT);
pinMode(outVentol, OUTPUT);
pinMode(outPellet, OUTPUT);
pinMode(outCandel, OUTPUT);
pinMode(tasto1, INPUT);
pinMode(tasto2, INPUT);

lcd.begin(20, 4); // setta del numero delle colonne e delle righe del LCD
}

void loop() {

// gestione tasto 2 prolungato, visualizzazione delle temperature
if(digitalRead(tasto2)) // premo tasto 2 per 3 secondi
{
delay(2000);
lcd.setCursor(0, 2); // setta il cursore sulla terza riga al primo carattere
lcd.print("Temperatura ARIA>"); // stampa della stringa sull'lcd
lcd.setCursor(0, 3); // setta il cursore sulla quarta riga al primo carattere
lcd.print("Temperatura FUMI>"); // stampa la stringa
lcd.setCursor(17, 2);
lcd.print(tempAria); // stampa la temperatura aria
lcd.setCursor(17, 3);
lcd.print(tempFumi); // stampa la temperatura fumi
delay(10000);
lcd.setCursor(0, 2);
lcd.print(" "); // cancella la terza riga
lcd.setCursor(0, 3);
lcd.print(" "); // cancella la quarta riga
}

// gestione della stampa intestazione
lcd.setCursor(0, 0); // setta il cursore sulla primaa riga al primo carattere
lcd.print("<<< MastroMario >>>>"); // stampa della prima riga sull'lcd

// gestione delle letture e conversioni delle sonde
tempFumi = analogRead(sondaFumi); //lettura valore del sensore
tempFumi = (tempFumi + 50)/6; //conversione del dato analogico in temperatura
tempAria = analogRead(sondaAria); //lettura valore del sensore
tempAria = (tempAria + 50)/6; //conversione del dato analogico in temperatura

// gestione dello stato di aria accesa/spenta
if (tempFumi > 50){
digitalWrite (outVentol, HIGH);
lcd.setCursor(0, 1);
lcd.print("ventola aria accesa");}
if (tempFumi < 45){
digitalWrite (outVentol, LOW);
lcd.setCursor(0, 1);
lcd.print(" ");}
if (digitalRead(passo==0)){ // se all'avvio la temperatura è sopra 60 vai in spegnimento
if (tempFumi > 60);
passo=9;}

// proviamo a creare dei passi
// Verifico se l'utente ha premuto il bottone
if(digitalRead(tasto1))
{
delay(2000);
// Cambio l'ultimo stato del bottone
if(passo==0) passo=1;
else passo=9;

}

switch (passo) // in base allo stato del passo scelgo dove saltare
{

case 1: // accensione
lcd.setCursor(0, 3);
lcd.print(" ACCENSIONE ");
digitalWrite(outEstrat, HIGH); // accende l'estrattore fumi
digitalWrite(outCandel, HIGH); // accende la candeletta
digitalWrite(outPellet, HIGH); // accende il trasportatore per un certo periodo
delay(2000); // aspetta il tempo di precarico
digitalWrite(outPellet, LOW); // spegne il trasportatore
if (tempFumi > 50){ // aspetta che aumenti la temperatura dei fumi
digitalWrite(outCandel, LOW); // spegne la candeletta
passo=2;}
break;

case 2: // stabilizzazione
lcd.setCursor(0, 3);
lcd.print("STABILIZZAZIONE ");
delay (500);
digitalWrite(outPellet, LOW);
delay (2000);
digitalWrite(outPellet, HIGH);
if (tempFumi > 80){ // aspetta che aumenti la temperatura dei fumi
passo=3;}
break;

case 3: // stufa a potenza 1
lcd.setCursor(0, 3);
lcd.print(" stufa a pot 1 ");

break;

case 4: // stufa a potenza 2
lcd.setCursor(0, 3);
lcd.print(" stufa a pot 2 ");

break;

case 5: // stufa a potenza 3
lcd.setCursor(0, 3);
lcd.print(" stufa a pot 3 ");

break;

case 6: // stufa a potenza 4
lcd.setCursor(0, 3);
lcd.print(" stufa a pot 4 ");

break;

case 7: // stufa a potenza 5
lcd.setCursor(0, 3);
lcd.print(" stufa a pot 5 ");

break;

case 8: // potenza in modalità eco
lcd.setCursor(0, 3);
lcd.print(" Modalità ECO ");

break;

case 9: // spegnimento
lcd.setCursor(0, 3);
lcd.print(" SPEGNIMENTO ");
delay (1000);
lcd.setCursor(0, 3);
lcd.print(" ATTENDERE ");
delay(500);
digitalWrite(outEstrat, LOW); // spegne l'estrattore fumi
digitalWrite(outCandel, LOW); // spegne la candeletta
digitalWrite(outPellet, LOW); // spegne il trasportatore

if (tempFumi < 45) passo=0; // quando si raffredda vai al passo 0

break;

case 0: // tutto spento
lcd.setCursor(0, 3);
lcd.print(" Stufa Spenta ");
break;
}

}

se i delay ti danno fastidio, guarda l'esempio blink without delay , per farti un'idea di come sostituirlo con una funzione non bloccante.

Grazie, visto adesso, un po macchinoso ma ho capito come fare, con la voglia di iniziare gli esempi con i commenti in inglese non li ho seguiti bene tutti.... stanotte provo a risolvere....

Invece altra questione che non mi è per niente chiara come devo fare per creare una tabella di parametri con inseriti i tempi di trasporto pellet e le potenze di estrattore alle diverse potenze che mi deve essere possibile richiamare e modificare da display

Ciao,

per gestire meglio le varie attivita' della stufa potresti usare uno "scheduler" o "task manager", ve ne sono tanti.
Questo ti permette inoltre di eliminare un po' di delay dal codice. I delay bloccano l'esecuzione del codice.

Ad esempio
http://www.arduino.cc/playground/Code/Scheduler
http://basbrun.com/?s=scheduler

come devo fare per creare una tabella di parametri con inseriti i tempi di trasporto pellet e le potenze di estrattore alle diverse potenze che mi deve essere possibile richiamare e modificare da display

Puoi utilizzare la memoria EEPROM interna.
Puoi vedere
http://arduino.cc/playground/Code/EEPROMWriteAnything
http://arduino.cc/playground/Code/EEPROMLoadAndSaveSettings

Ciao,
Marco.

grazie, un bel po di materia prima da studiare, penso che dovrò fare un altro paio di notti fino alle 5 per tirarne via una bozza semi definitiva... vi aggiornerò sui risultati....
grazie ancora, Mario

mastro_mario:
grazie, un bel po di materia prima da studiare, penso che dovrò fare un altro paio di notti fino alle 5 per tirarne via una bozza semi definitiva... vi aggiornerò sui risultati....
grazie ancora, Mario

..non spaventarti ma occhio che le scritture sulle EEPROM non sono infinite.. se sbagli è incominci a scriverci a raffica esaurisci la scrittura in poco tempo..