Error al unir dos codigos.

Hola soy muy inexperto en el tema de programación arduino y buscando en internet y en un cd que tenia conseguí dos codigos para poder con uno regular la temperatura (es decir un termostato con lcd basado en el sensor lm 35) y con el otro encender y apagar alternativamente un motor. Todo esto con el fin de construir una pequeña incubadora... despues de un buen rato tratando de unir los dos codigos logre que me lo aceptara el programa arduino y que "funcione" con un error. Este error es que la pantalla parpadea al mismo ritmo que lo haría el motor. Y si modifico los tiempos del motor la pantalla ni siquiera prende.. Que tendría que modificar? aquí dejo los dos códigos originales y el que yo arme.
El que quiero usar para el motor.

//A blinking led
//turn on the LED for half a second,then off for half a second,reaptedly
/************************************************/
int ledPin = 9;//the number of the LED pin
/************************************************/
void setup()
{
  pinMode(ledPin,OUTPUT);//initialize the digital pin as an output
}
/************************************************/
//the loop routine runs over and over again forever
void loop()
{
  digitalWrite(ledPin,HIGH);//turn the LED on 
  delay(1000);               //wait for half a second
  digitalWrite(ledPin,LOW); //turn the LED off
  delay(1000);               //wait for half a second
}
/*************************************************/
El de el termostato.
[code]////////////////////////////////////////////

// ARDUINO TERMOSTATO CON RELÈ, DISPLAY E LM35

// Autore Fancello Salvatore

// Per maggiori info: http://www.progettiarduino.com 

/////////////////////////////////////////////

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  

int reading = 0;
int sensorPin = A0;
int relay =7;
void setup() {
  
  lcd.begin(16, 2);
  pinMode(relay,OUTPUT);
}
 
void loop() {
  reading = analogRead(sensorPin);
  int celsius = reading/2;
  lcd.setCursor(0, 0);
  lcd.print("Temperatura: "); 
  lcd.setCursor(0,1);
  lcd.print(celsius, DEC);
  lcd.print((char)223);
  lcd.print("C");
  if (celsius >28) {
    digitalWrite(7,HIGH);
     lcd.print("    ON");
  } else {
    digitalWrite(7,LOW);
    lcd.print("   OFF");
  }
  delay(500);
  lcd.clear();
}

Y el que yo hice.

////////////////////////////////////////////

// ARDUINO TERMOSTATO CON RELÈ, DISPLAY E LM35

// Autore Fancello Salvatore

// Per maggiori info: http://www.progettiarduino.com 

/////////////////////////////////////////////

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  

int reading = 0;
int sensorPin = A0;
int relay =7;
int motor = 9; 
void setup() {
  
  lcd.begin(16, 2);
  pinMode(relay,OUTPUT);
  pinMode(motor,OUTPUT);
  
}
 
void loop() {
  reading = analogRead(sensorPin);
  int celsius = reading/2;
  lcd.setCursor(0, 0);
  lcd.print("Temperatura: "); 
  lcd.setCursor(0,1);
  lcd.print(celsius, DEC);
  lcd.print((char)223);
  lcd.print("C");
  if (celsius <38) {
    digitalWrite(7,HIGH);
     lcd.print("    O");
  } else {
    digitalWrite(7,LOW);
    lcd.print("   OFF");
    delay(500);
 
 }
  lcd.clear();
  digitalWrite(motor,HIGH);//turn the LED on 
  delay(500);               //wait for half a second
  digitalWrite(motor,LOW);
  delay(500); //turn the LED off

}

Desde ya muchas gracias!![/code]

A ver que tal asi

////////////////////////////////////////////
// ARDUINO TERMOSTATO CON RELÈ, DISPLAY E LM35
// Autore Fancello Salvatore
// Per maggiori info: http://www.progettiarduino.com 
/////////////////////////////////////////////

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  

#define RETARDO 500  // mismo tiempo que delay


int reading;
const byte sensorPin = A0;
const byte relay     = 7;
const byte motor     = 9; 
unsigned long start;

void setup() {
  
  lcd.begin(16, 2);
  pinMode(relay,OUTPUT);
  pinMode(motor,OUTPUT);
  
}
 
void loop() {
  float celciusAnt = 0;

  reading = analogRead(sensorPin);
  celsiusAnt = celsius;
  float celsius = (500.0*reading/1023.0);
  
  if (abs(celsius - celsiusAnt) > 0.1) { // cuando hay un cambio en 0.1 muestro
      lcd.setCursor(0, 0);
      lcd.print("Temperatura: "); 
      lcd.setCursor(0,1);
      lcd.print(celsius, DEC);
      lcd.print((char)223);
      lcd.print("C");
  }
  if (celsius < 37.5) {  // la diferencia de 0.5 es para que el relay no se vuelva loco en el umbral
      digitalWrite(relay,HIGH);
      lcd.print("    O");
  } else if (celsius > 38.0) {
             digitalWrite(relay,LOW);
             lcd.print("   OFF");
            //delay(500);  sustituir delay()
  }
  lcd.clear();

  switch (estado) {
    case 0: digitalWrite(motor, HIGH);//turn the LED on
            estado = 1;
            break; 
    case 1: if (millis()> start) {
                digitalWrite(motor, LOW);
                start = millis()+RETARDO;              
                estado = 2;
            }
            break;     
    case 2: if (millis()>start) {
                estado = 0;
            }
            break; 
  }
}

muchas gracias! Pero me dio un monton de errores al tratar de cargar el codigo...
This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
sketch_may08c.ino: In function 'void loop()':
sketch_may08c:31: error: 'celsiusAnt' was not declared in this scope
sketch_may08c:31: error: 'celsius' was not declared in this scope
sketch_may08c:52: error: 'estado' was not declared in this scope

Aclaro ademas que el valor de 500 microsegundos para el motor fue como ejemplo pero en realidad va a trabajar mas o menos un minuto cada 4 horas... modificando el valor de bajo y de alto podia modificar el tiempo de encendido del motor. en este codigo me da la impresion de que no es posible modificar el tiempo de encebdido y apagado por separado o lo entendi mal?

Bueno mi amigo, te modifiqué el programa, y ahora lo que tienes que hacer se llama leer un poco, ponerle un poco de tu tiempo y ajustar el tiempo de 500 mseg a 4 horas.

Solo multiplica horas por minutos por milisegundos.

Por otro lado los errores son variables que no estan o que puse mal en el loop, defínelas como globales y asunto terminado.

Y como puedo hacer para definir esas variables como globales? Tras buscar durante horas en internet el como hacer eso lo que logre fue una confusión nada mas... Pido disculpas y aunque si leí varias veces el código como antes eh dicho soy inexperto en la programación. En cuanto al tiempo si se como modificarlo. Mi duda era si se podia modificar la duracion del off y el on del temporizador por separado.

Tras leer leer y leer mas encontre que para declarar una variable como global hay que ponerla antes de la función setup. Pero lo intente y sigue dándome el mismo resultado, que celsiusAnt y estado no estan declarados en ese ámbito.

Si las defines como globales no repitas la definición en el loop.
Dos veces definidas te dará error y mantendrá la del loop.

Muchas gracias por todo surbyte! al fin logre que se compilara el codigo pero siguen los problemas... :frowning: la pantalla es casi ileglible, los numeros cambian con tal velocidad que es muy dificil leer la temperatura y el led que puse para simular el relay parpadea a una frecuencia elevadisima cuando esta en estado encendido. El apagado parece funcionar bien. Y en cuanto al motor puse otro led para simularlo y cambiando el valor de RETARDO solo es posible regular el tiempo de encendido. Podrias por favor revisar el codigo y decirme que estoy haciendo mal o que modificar? de nuevo GRACIAS!!

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  

#define RETARDO 500  // mismo tiempo que delay


int reading;
int estado;
float celsiusAnt;
const byte sensorPin = A0;
const byte relay     = 7;
const byte motor     = 9; 
unsigned long start;

void setup() {
  
  lcd.begin(16, 2);
  pinMode(relay,OUTPUT);
  pinMode(motor,OUTPUT);
  
}
 
void loop() {
  float celciusAnt = 0;

  reading = analogRead(sensorPin);
  
  float celsius = (500.0*reading/1023.0);
  
  if (abs(celsius - celsiusAnt) > 0.1) { // cuando hay un cambio en 0.1 muestro
      lcd.setCursor(0, 0);
      lcd.print("Temperatura: "); 
      lcd.setCursor(0,1);
      lcd.print(celsius, DEC);
      lcd.print((char)223);
      lcd.print("C");
  }
  if (celsius <22.5) {  // la diferencia de 0.5 es para que el relay no se vuelva loco en el umbral
      digitalWrite(relay,HIGH);
      lcd.print("    O");
  } else if (celsius > 23.0) {
             digitalWrite(relay,LOW);
             lcd.print("   OFF");
            //delay(500);  sustituir delay()
  }
  lcd.clear();

  switch (estado) {
    case 0: digitalWrite(motor, HIGH);//turn the LED on
            estado = 1;
            break; 
    case 1: if (millis()> start) {
                digitalWrite(motor, LOW);
                start = millis()+RETARDO;              
                estado = 2;
            }
            break;     
    case 2: if (millis()>start) {
                estado = 0;
            }
            break; 
  }
}

Si borras cosas por desconocimiento ocurren cosas como las que describes.

Primero te dije que definas las variables como globales.
Tanto celsius como celsiusAnt de modo que no tiene sentido ver en el loop

 float celciusAnt = 0;
 float celsius = (500.0*reading/1023.0);

y ademas borraste

celsiusAnt = celsius;

que es lo que permite que
if (abs(celsius - celsiusAnt) > 0.1) esto solo muestre valores cuando haya cambios superiores a 0.1 que es muy posible que sea seguido pero no tanto como cuando no esta y siempre vale 0.

Ahora veamos con estos cambios

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);  

#define RETARDO 500  // mismo tiempo que delay


int reading;
int estado;
float celsius        = 0.0;
float celsiusAnt     = 0.0;
const byte sensorPin = A0;
const byte relay     = 7;
const byte motor     = 9; 
unsigned long start;

void setup() {
  
  lcd.begin(16, 2);
  pinMode(relay,OUTPUT);
  pinMode(motor,OUTPUT);
  
}
 
void loop() {
  reading = analogRead(sensorPin);
  celsiusAnt = celsius;
  celsius = (500.0*reading/1023.0);
  
  if (abs(celsius - celsiusAnt) > 0.1) { // cuando hay un cambio en 0.1 muestro
      lcd.setCursor(0, 0);
      lcd.print("Temperatura: "); 
      lcd.setCursor(0,1);
      lcd.print(celsius, DEC);
      lcd.print((char)223);
      lcd.print("C");
  }

  if (celsius <22.5) {  // la diferencia de 0.5 es para que el relay no se vuelva loco en el umbral
      digitalWrite(relay,HIGH);
      lcd.print("    O");
  } else if (celsius > 23.0) {
             digitalWrite(relay,LOW);
             lcd.print("   OFF");
            //delay(500);  sustituir delay()
  }

  switch (estado) {
    case 0: digitalWrite(motor, HIGH);//turn the LED on
            estado = 1;
            break; 
    case 1: if (millis()> start) {
                digitalWrite(motor, LOW);
                start = millis()+RETARDO;              
                estado = 2;
            }
            break;     
    case 2: if (millis()>start) {
                estado = 0;
            }
            break; 
  }
}

Cuando comandas el RELAY no se que presentas y donde lo haces, eso esta descontrolado en cuanto a presentación. Revisa ese " 0N" y ese " OFF"
Te valta un

lcd.setCursor(13, 1);