problemi lm35 e servo pwm

salve ragazzi, allora ho due grandi problemi riguardo la programmazione arduino nei confronti del lm35 e servo. Praticamente sto facendo una sorta di casa domotica con relativo allarme( con visualizzazione di stato nel lcd) sensore di luminosita ,sensore di temperatura e il servo pwm che lo uso come cancello automatico della casa. il mio problema è che :
1 il valore di temperatura che visualizzo nel lcd cambia con variazioni brusche tipo da 25,29 30,-15,17 ecc…
come posso sistemarlo?
2 il servo l’ ho programmato in interrupt , e quando viene premuto il pulsante fa un giro di 90 gradi appena viena rilasciato deve tornare al suo posto ,diciamo che lo fa , ma nel stato d ’ attesa ha delle sorte di impulsi che lo fanno muovere di poco , per poi farlo tornare al proprio posto , però è fastidioso e non è quello che voglio.
mi potreste aiutare vi supplico…
VI ringrazio anche solo se leggere il topic,grazie mille in anticipo

vi posto il programma

#include <Servo.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  
const int pinCancello=3;
const int ledPericolo = 7;
const int pinPorta = 6;
const int pinAttivazione = 5;
const int pinLed = 4;
const int pinSensore = A0;

int pinTemp=A2;
int ventola=10;
int grado = 0;
int minGrad = 0;
int maxGrad = 90;
int pinServo = 9;
int prev = A3;
Servo mioServo;

void setup(){
  pinMode(A2,INPUT);
  pinMode(10,OUTPUT);
  mioServo.write( grado );
 pinMode( prev, INPUT );
 pinMode(A3,INPUT);
 pinMode(3,INPUT);
 pinMode(8,OUTPUT);
 pinMode(7,OUTPUT);
 pinMode(6,INPUT);
 pinMode(5,INPUT);
 lcd.init();
 lcd.print("");
 Serial.begin(9600);
 pinMode(pinLed,OUTPUT);
 pinMode(pinSensore,INPUT);
 mioServo.attach(9);
 attachInterrupt(0, interruptServo, RISING);
 
 }
void loop() {
  int Valore=analogRead(A2);
int temperatura = (5*Valore*100)/1024;
delay(2000);

if(temperatura > 25 )
{
  digitalWrite(10,HIGH);

}
else
{ digitalWrite(10,LOW);
}

    if (analogRead(pinSensore) < 300 ){
  digitalWrite(pinLed,HIGH);
 }
else {
digitalWrite(pinLed,LOW);
}
if (digitalRead(pinAttivazione) == LOW ){
lcd.clear();
lcd.backlight(); 
lcd.setCursor(0,0);
lcd.print("ALLARME  OFF");
lcd.setCursor(0,1);
lcd.print(temperatura);
digitalWrite(8,LOW);
digitalWrite(7,HIGH);
delay(1000);
}
if  (digitalRead(pinAttivazione) == HIGH & digitalRead(pinPorta) == LOW)
{  lcd.clear();
    lcd.backlight(); 
    lcd.setCursor(0,0);
lcd.print("ALLARME  ON");
lcd.setCursor(0,1);
lcd.print(" INTRUSI");
  digitalWrite(7,LOW);
digitalWrite(8,HIGH);
delay(1000);
}
else if (digitalRead(pinAttivazione) == HIGH & digitalRead(pinPorta) == HIGH)
{
    lcd.clear();
    lcd.backlight(); 
    lcd.setCursor(0,0);
lcd.print("ALLARME ON");
lcd.setCursor(0,1);
lcd.print(" 0 INTRUSI");
  digitalWrite(7,LOW);
digitalWrite(8,HIGH);
 delay(1000);
 }
  } 
 
void interruptServo(){  
  if ( analogRead( prev ) > 1000 ) { grado--; }
  else { grado++; } 
  if ( grado > maxGrad ) { grado = maxGrad; }
  if ( grado < minGrad ) { grado = minGrad; } 
  mioServo.write( grado );
 }

You code will be easier to read if you give a name to each pin you use, in order, and then use those names instead of constants:

#include <Servo.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);  

const int pinCancello=3;
const int pinLed = 4;
const int pinAttivazione = 5;
const int pinPorta = 6;
const int ledPericolo = 7;
// No name for Pin 8?
const int pinServo = 9;
const int ventola = 10;

const int pinSensore = A0;
const int pinTemp = A2;
const int prev = A3;

int grado = 0;
int minGrad = 0;
int maxGrad = 90;


Servo mioServo;

void setup() {
  mioServo.write( grado );

  pinMode(pinCancello,INPUT);
  pinMode(pinLed,OUTPUT);
  pinMode(pinAttivazione,INPUT);
  pinMode(pinPorta,INPUT);
  pinMode(ledPericolo,OUTPUT);
  pinMode(8,OUTPUT);   // ???
  mioServo.attach(pinServo);
  pinMode(ventola,OUTPUT);

  pinMode(pinSensore,INPUT);  // A0
  pinMode(pinTemp,INPUT);  // A2
  pinMode(prev, INPUT);   // A3

  lcd.init();
  lcd.print("");
  Serial.begin(9600);

  attachInterrupt(0, interruptServo, RISING);
}


void loop() {
  int Valore = analogRead(pinTemp);
  int temperatura = (5*Valore*100)/1024;
  delay(2000);

  if(temperatura > 25 ) {
    digitalWrite(ventola,HIGH);
  }
  else { 
    digitalWrite(ventola,LOW);
  }

  if (analogRead(pinSensore) < 300 ) {
    digitalWrite(pinLed,HIGH);
  }
  else {
    digitalWrite(pinLed,LOW);
  }

  if (digitalRead(pinAttivazione) == LOW ){
    lcd.clear();
    lcd.backlight(); 
    lcd.setCursor(0,0);
    lcd.print("ALLARME  OFF");
    lcd.setCursor(0,1);
    lcd.print(temperatura);
    digitalWrite(8,LOW);
    digitalWrite(ledPericolo,HIGH);
    delay(1000);
  }
  if  (digitalRead(pinAttivazione) == HIGH & digitalRead(pinPorta) == LOW)
  {  
    lcd.clear();
    lcd.backlight(); 
    lcd.setCursor(0,0);
    lcd.print("ALLARME  ON");
    lcd.setCursor(0,1);
    lcd.print(" INTRUSI");
    digitalWrite(ledPericolo,LOW);
    digitalWrite(8,HIGH);
    delay(1000);
  }
  else if (digitalRead(pinAttivazione) == HIGH & digitalRead(pinPorta) == HIGH)
  {
    lcd.clear();
    lcd.backlight(); 
    lcd.setCursor(0,0);
    lcd.print("ALLARME ON");
    lcd.setCursor(0,1);
    lcd.print(" 0 INTRUSI");
    digitalWrite(ledPericolo,LOW);
    digitalWrite(8,HIGH);
    delay(1000);
  }
}


void interruptServo(){  
  if ( analogRead( prev ) > 1000 ) { 
    grado--; 
  }
  else { 
    grado++; 
  }

  if ( grado > maxGrad ) { 
    grado = maxGrad; 
  }
  if ( grado < minGrad ) { 
    grado = minGrad; 
  }

  mioServo.write( grado );
}

Per il sensore di temperatura ti consiglio di controllare i collegamenti… Ti allego la foto tratta da abc.

Immagine.png

@Saponetta, ti invitiamo a presentarti qui: http://forum.arduino.cc/index.php?topic=113640.0 e a leggere il regolamento: http://forum.arduino.cc/index.php?topic=149082.0 - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: http://forum.arduino.cc/index.php?topic=146152.0 - qui le pinout delle varie schede by xxxPighi: http://forum.arduino.cc/index.php?topic=151646.0 - qui una serie di link utili: http://forum.arduino.cc/index.php?topic=126861.0