primi passi, mi date una mano a pulire il codice

Grazie ragazzi per i consigli. Mi scuso prima di tutto se ho posto inizialmente le mie domande in quei termini e ho urtato la sensibilita di qualcuno per il mio atteggiamento, ma l'ho fatto inconsapevolmente, e dal fatto che raramente intervengo nei forum, di conseguenza avvolte ho bisogno che qualcuno mi ricordi quali sono le regole(di una comunita). Chiuso il capitolo, in fin dei conti sono riuscito a completare lo sketch, a ripulirlo dai vari errori ecc, lo sto testando su arduino e perfezionando i vari bug.

Ciao. Scusami, come ha detto uwe ho esagerato, ma giustamente chiudiamo il capitolo e passiamo alle cose serie :-) Mi fa piacere se hai fatto progressi. Posta pure il codice e fai altre domande.

Vi tengo aggiornati circa il progetto dell incubatrice . I codici funzionano entrambi, ne ho fatto:

-uno basato su un delay di 3 secondi:

//un semplice programma, che legge i valori di due sensori, e se tali valori non rispettano i miei parametri accende determinati pin digitali di output. inoltre c’è un servomotore che ogni 17280 secondi gira di centoottanta gradi;
// i sensori da me usato phidgets temperatura umiditaa analogico, che si trova in robot italy, mentre è un comune servo analogico da 4,8v
#include <Servo.h>//libreria per il controllo del servo;
Servo myservo;
#define temperaturaPin 1; //sensore temperatura pin 1 analogico int float temperatura = 0;
#define lampadinaPin 5; // pin digitale uscita che si attiva in caso di una determinata temperatura;
#define umiditaPin 2; //sensore umidita pin 2 analogico;
#define pompaPin 10; // pin digitale uscita, che si attiva in caso di una determinata umidita;
int pos = 0; // variabile posizione servo, che parte da zero gradi;
float temperatura = 0; // variabile di comodo;
unsigned int temposervo= 0; // variabile di che si incrementa di uno, che si incrementa di un unita ogni volta che si muove il servo;
unsigned int tempoumidita = 0; //variabile che si incrementa di uno ogni 3 secondi;
float umidita = 0;
void setup ()
{ pinMode (1, INPUT);
pinMode (5, OUTPUT);
pinMode (2, INPUT);
pinMode (10, OUTPUT);
myservo.attach (3, 0, 180); //il servo motore analogico si trova nel pin tre analogico, minimo rotazione 0 massima 180 gradi

}

void loop(){
temperatura = analogRead(1); //leggiamo il sensore temperatura, e inseriamo il valore nella variabile temperatura ;
temperatura = (temperatura*.0,22222)-61.111; //trasformo attraverso la formula che trovo nel datasheet del sensore, i valori letti dalla sonda analogica in volt in gradi centigradi;
temperatura = floor(temperatura); //approssimo per difetto il valore che ottengo, e inserisco il valore nella stessa variabile;
if (temperatura <37) {
digitalWrite(5, HIGH); // se la temperatura è minore di 37, accendo il pin digitale lampadinapin;
}else { if (temperatura >38){
digitalWrite(5, LOW);}}//e la temperatura è maggiore di 38 spengo il pin lampadina;

tempoumidita = (tempoumidita +1);//variabile che incrementa di di uno unita ogni tre secondi (cioe ogni volta che si ripete il ciclo);
umidita = analogRead(2); //leggo l’umidita dal sensore umidita, e inserisco il valore in una variabile;
umidita = ((umidita0,1906)-40,2);// attraverso una formula che trovo nel datasheet del sensore trasformo il valore in V della sonda in valori umidita;
umidita = floor(umidita);// approssimo per difetto il valore umidita e inserisco il valore nella stessa variabile;
if (umidita< 52){
if (tempoumidita == 200){
digitalWrite(10,HIGH);}
else {(tempoumidita == 230);
tempoumidita = 0;//se sono passati dieciminuti e trenta secondi e ancora l umidita è bassa, resetto il tempo e spengo la pompa
digitalWrite(10, LOW);}}
pos = myservo.read();
temposervo = (temposervo +1); //una variabile contatore che aumenta di un unita ogni 3 secondi, cioe ad ogni ciclo;
if (temposervo == 6000){//se sono passate 5 ore, cioe 6000=(60sec
60min*5ore) diviso tre secondi
if (pos >160){
pos = 0;
myservo.write(pos);//se la posizione servo è 180 allora sposta il servo a zero gradi;
temposervo = 0;}
else {
pos = 180;
myservo.write(180); // se la posizione servo è zero allora spostalo di 180 gradi;
temposervo=0;}}
delay(3000);}//aspetta tre secondi e rifai il ciclo

-mentre un altro basato sulla funzione mills:

//un semplice programma, che legge i valori di due sensori, e se tali valori non rispettano i miei parametri accende determinati pin digitali di output. inoltre c’è un servomotore che ogni 17280 secondi gira di centoottanta gradi;
// i sensori da me usato phidgets temperatura umiditaa analogico, che si trova in robot italy, mentre è un comune servo analogico da 4,8v;
#include <Servo.h>//libreria per il controllo del servo;
Servo myservo;
#define temperaturaPin = 1; //sensore temperatura pin 1 analogico int float temperatura = 0;
#define lampadinaPin = 5; // pin digitale uscita che si attiva in caso di una determinata temperatura;
#define umiditaPin = 2; //sensore umidita pin 2 analogico;
#define pompaPin= 10; // pin digitale uscita, che si attiva in caso di una determinata umidita;
int pos = 0; // variabile posizione servo, che parte da zero gradi;
float temperatura = 0; // variabile di comodo;
long tempomillesimi = 0;// variabile che contiene il tempo espresso in millesimi di secondo;
long intervalloumidita = 600000;// dieci minuti;
long intervalloservo = 18000000; //cinque ore;
int tempoumidita = 0; //variabile tempo umidita;
unsigned int temposervo = 0; // variabile temo servo;
float umidita = 0;
int currentMills = 0;

void setup ()
{
pinMode(1, INPUT);
pinMode (5, INPUT);
pinMode (2, INPUT);
pinMode (10, OUTPUT);
myservo.attach(3, 0, 180); //il servo motore analogico si trova nel pin tre analogico, minimo rotazione 0 massima 180 gradi;

}

void loop(){

unsigned long currentMillis = millis();
temperatura = analogRead(1); //leggiamo il sensore temperatura, e inseriamo il valore nella variabile temperatura ;
temperatura = (temperatura*.0,22222)-61.111; //trasformo attraverso la formula che trovo nel datasheet del sensore, i valori letti dalla sonda analogica in volt in gradi centigradi;
temperatura = floor(temperatura); //approssimo per difetto il valore che ottengo, e inserisco il valore nella stessa variabile;
if (temperatura <37){
digitalWrite(5, HIGH);} // se la temperatura è minore di 37, accendo il pin digitale lampadinapin;
else {if (temperatura >38){
digitalWrite(5, LOW);}}//e la temperatura è maggiore di 38 spengo il pin lampadina;
umidita = analogRead(2); //leggo l’umidita dal sensore umidita, e inserisco il valore in una variabile;
umidita = (umidita*0,1906)-40,2;// attraverso una formula che trovo nel datasheet del sensore trasformo il valore in V della sonda in valori umidita;
umidita = floor(umidita);// approssimo per difetto il valore umidita e inserisco il valore nella stessa variabile;
if (umidita< 52) {
if ((currentMillis - tempoumidita)>=intervalloumidita){
digitalWrite(10, HIGH);// se l’umidita è minore di 52 e se il tempo trascorso è di 10 minuti accendo la pompa;
tempoumidita = currentMills;}//assegno alla variabile il valore del tempo attuale;
else { if ((currentMillis - tempoumidita)>=20000) {
digitalWrite(10, LOW);}}} // se l umidta è ancora sotto i 52 e il pin e la pompapin e accesa, e dalla sua accensione sono passati venti secondi spegni;
pos= myservo.read();
if ((currentMillis - temposervo) == intervalloservo) {// se il tempo trascorso fino adesso meno il tempo della variabile temposervo (che è zero all inizio, ma che poi se la condizione è esatta sara ugauale al tempo attuale) è uguale all intervallo da noi prefissato cioe 18000 allora muovi il servo;
if (pos >160){
pos = 0;
myservo.write(pos);//se la posizione servo è 180 allora sposta il servo a zero gradi;
temposervo = currentMillis;}
else {
pos = 180;
myservo.write(pos); // se la posizione servo è zero allora spostalo di 180 gradi;
temposervo = currentMillis;}}}

Lo sto testando adesso sul circuito che ho appena finito di fare per la seconda volta, visto che il primo (era la prima volta che avevo un saldatore in mano) oltre a non potersi vedere, avevo invertito la posizione dei diodi, posterei lo schema del circuito ma non mi entra come jpg.

Sto effettuando dei test per vedere se i sensori mi danno dei dati omogenei rispetto dell ambiente confrontadoli con un dati di un umidificatore e termometro ok.
Il sensore in questione è qusto:
http://www.robot-italy.com/product_info.php?cPath=15_160&products_id=994,
per adesso ho inserito la formula che è nel datasheet del sensore, ma penso che non vada bene perche è rapportato ad un 8 bit mentre arduino lavora a 10 bit giusto?

Una segnalazione al volo:

#define temperaturaPin 1;

Non si mette il ; nelle define.

Non è sintatticamnte scorretto, ma è un modo per complicarsi la vita. Codice come questo, ad esempio:

if (currentPin == temperaturaPin) {
}

non compila perché viene tradotto in:

if (currentPin == 1; ) {
}

Ti consiglio anche di rendere più leggibile il codice con CTRL-T.

Infine c'è una riga che è sbagliata:

if ((currentMillis - temposervo) == intervalloservo)

Devi usare >= come nel caso dell'umidità, altrimenti la condizione non sarà quasi mai verificata.

Ho un problema con i sensori, cioe non riesco ad settarli con òaformula che ho trovato nel datasheet: -umidita = ((sensorumidita*0,1906)-40,2) -temperatura =((sensoretemperatura*0.22222)-61.11

Non vorri che ho sbagliato a mettere delle resistenze e invece non ci andavano prima dell uscita negativa del sensorie rispettivamente: -sensore temperatura 16k -umidita 1k

Sono ancora bloccato a settare il sensore dell'umidita. Il sensore della temperatura è ok, non so perche ma la temperatura la trovo con questa fomula temperatura= ((valoresensore*0.4560)-60.11), che e la stessa formula che da la phidget nel datasheet, ma il valore 0,4560 lo trovato facendo delle proporzoni grazie ad un termometro esterno.

Il problema rimane il sensore dell umidita, che non avendo un igrometro con cui fare confronti (ce l'ho ma è uno pseudo igrometro elettronico made in china). Le resistenze prima dei sensori sono ancora li, non so se toglierle o meno. Leggendo i vari post, ho capito che la sonda lavora ad 8 bit, quindi in teoria se voglio far comprendere i valori ad arduno che lavora a 10bit basta che divida per 4 il valore 0,22222 per la temperatura e 0,1906 per l'umidita. Questo metodo pero non mi funziona assolutamente. Perchè? Inoltre non ho ancora capito se c'è qualche funzione per stampare (in un file o in un modo che mi permetta dal dal pc) i volts di output dei sensori.

Prova a dividere per 4 il valore letto dal canale analogico (cioè quello che ritorna analogRead()).