Brew System -impianto Birra

Ciao a tutti,sono un novello riguardo arduino e stò cercando di automatizzare il mio impianto della birra.Ho difficoltà nella programmazione dell'arduino mega che ho in quanto sono più elettronico che informatico.
ho una sonda DS18B20 per la pentola di MASH
Gestirò il tutto con tre relè SSR che già ho.
quindi con un relè Gestirò l'accensione del motore per mescolare l'orzo nella pentola di mash,con un altro accenderò e spengerò l'elettrovalvola del fornello della pentola di mash,e con il terzo accenderò e spengerò il fornello della pentola di bollitura.
C'è qualcuno che può aiutarmi a fare una bozza di Sketch....Considerate che ho visto sul forum e c'è poco e niente al riguardo.....
In pratica avrò la possibilità di programmare 4/5 step di temperatura e per un determinato tempo, raggiunta la temperatura devo mantenerla per un tot di tempo.....Tutto ciò gestibile con dei pulsanti set point.
Come display ho sia il seriale che il parallelo ed ho arduino mega e 2009,pulsanti ne ho una decina.

Ho fatto questo ma mi dà errore quando provo a verificarlo sul punto
pinmode(motor_mashtun, OUTPUT);

#include <LiquidCrystal.h>
#include <OneWire.h>

LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

int motor_mashtun = 31; //relè motore mashtun
int mashtun_birra = 29; // relè mashtun birra 
int boil_birra = 30;  //relè mashtun bollitore birra
int sonda_birra = 8;          // pin a cui e' collegata la sonda serbatoio birra
int alza_birra = 32;     // pin per il bottone aumento setpoint birra
int abbassa_birra = 33;  // pin per il bottone diminuzione setpoint birra
int setpoint_birra;// inizializza il setpoint della birra
long temp_birra;     // inizializza una variabile contenente la temperatura della birra

int i;


void setup() {                                  // ingressi come imput o output
  pinmode(motor_mashtun, OUTPUT);
  pinmode(mashtun_birra, OUTPUT);
  pinmode(boil_birra, OUTPUT);
  pinMode(sonda_birra, INPUT);
  lcd.begin(4,20);
  lcd.clear();
}

void loop() {
     
OneWire  ds(temp_birra);        // ds18b20 pin #2 (middle pin) to Arduino pin 8

byte i;
byte present = 0;
byte data[12];
byte addr[8];
  
int HighByte, LowByte, SignBit, Whole, Fract, TReading, Tc_100, FWhole;

void setup(void) {
  
  lcd.begin(4,20);              // rows, columns.  use 2,16 for a 2x16 LCD, etc.
  lcd.clear();                  // start with a blank screen
  lcd.setCursor(0,0);           // set cursor to column 0, row 0
  
    if ( !ds.search(addr)) {
      lcd.clear(); lcd.print("No more addrs");
      delay(1000);
      ds.reset_search();
      return;
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) {
      lcd.clear(); lcd.print("CRC not valid!");
      delay(1000);
      return;
  }
}

void getTemp() {
  int foo, bar;
  
  ds.reset();
  ds.select(addr);
  ds.write(0x44,1);
  
  present = ds.reset();
  ds.select(addr);    
  ds.write(0xBE);

  for ( i = 0; i < 9; i++) {
    data[i] = ds.read();
  }
  
  LowByte = data[0];
  HighByte = data[1];
  TReading = (HighByte << 8) + LowByte;
  SignBit = TReading & 0x8000;  // test most sig bit
  
  if (SignBit) {
    TReading = -TReading;
  }
  Tc_100 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25
  Whole = Tc_100 / 100;          // separate off the whole and fractional portions
  Fract = Tc_100 % 100;
  if (Fract > 49) {
    if (SignBit) {
      --Whole;
    } else {
      ++Whole;
    }
  }

  if (SignBit) {
    bar = -1;
  } else {
    bar = 1;
  }
  
}

void printTemp(void) {
  lcd.clear();
  lcd.setCursor(0,2);
  lcd.print("MASH-TEMP : ");
  lcd.setCursor(0,3);   
  
  if (SignBit) {  
     lcd.print("-");
  }
  lcd.print(Whole);
  lcd.print(" C  ");
  
}

void loop(void) {
  getTemp();
  printTemp();
  delay(1000);
}     


    
  if (temp_birra < setpoint_birra){   // controlla se la birra è in temperatura
    digitalWrite(motor_mashtun, HIGH);             // accendi il motore mash tun
    delay(50);                          // attende
    digitalWrite(mashtun_birra, HIGH);       // accendi caldaia mash tun
    delay(50);                          // attende
    }
     }
  
  if (temp_birra == setpoint_birra){ // se birra è in temperatura 
    digitalWrite(mashtun_birra, LOW);  // spengi gas mash tun
    }
      }
   if (digitalRead (alza_birra) == LOW){           // se ha rilevato pressione del bottone + birra incrementa
    setpoint_birra=setpoint_birra+1;
  }
 if (digitalRead (abbassa_birra) == LOW){           // se ha rilevato pressione del bottone - birra decrementa
    setpoint_birra=setpoint_birra-1;
  }
   }
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Birra");
  lcd.setCursor(9, 0);
  lcd.print("Set");
  lcd.setCursor(9, 1);
  lcd.print("Set");
  lcd.setCursor(6, 0);
  lcd.print(temp_birra);
  lcd.setCursor(13, 1);
  lcd.print(setpoint_birra);
  delay(100);  
}

anche un copia incolla dell'errore sarebbe veramente utile ::slight_smile:

eccolo:

In function 'void setup()':
error: 'pinmode' was not declared in this scope In function 'void loop()':

pinmode(motor_mashtun, OUTPUT);
pinmode(mashtun_birra, OUTPUT);
pinmode(boil_birra, OUTPUT);

Le "M" vanno maiuscole

Corretto,ma ora ho altri errori...porca miseria

leggi nella riga error, di solito (come nel caso sopra) è di aiuto

In function 'void loop()':
error: expected initializer before 'lcd' In function 'void getTemp()':
In function 'void printTemp()':
In function 'void loop()':
At global scope:
:cry:

In questo caso il messaggio non è proprio attinente all'errore, però se ricontrolli ti accorgerai che nel tuo codice ci sono due funzioni "setup" e due "loop".

Ricontrolla un po' tutto

hai già visto questo:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1241337653

Si grazie, già l'ho scaricato solo che non mi funzionano le parti di visualizzazione sul mio display,deve aver usato un tipo di display seriale diverso dal mio,poi dovrei modificarlo perchè io non uso pompe per spostare il liquido da un pentolone all'altro.Comunque è un ottimo progetto dal quale volevo prendere spunto

allora a quanto pare hai tolto il codice relativo all'lcd...
secondo me se devi solo adattare il codice ti conviene usare il suo che è già fatto e modificare/cancellare solo le parti non necessarie. Ma occhio a quello che fai, potresti cancellare anche istruzioni che ti servono

ok,ma a me non funziona proprio la parte grafica come faccio a modificarlo?

devi leggerti tutto il suo codice e capire come lo ha organizzato. Poi puoi sostituire le istruzioni che lui ha usato per il suo display con quelle per il tuo display.
il codice è un po' lungo ma se sai cosa fare non dovrebbe essere difficile.