Givaren jag använder heter LM35DZ och har bra stabil spänning ut (ca 220mV).
Om jag tar en givare och flyttar mellan A1,2 & 3 så är det bara på 3:an som det blir inkorrekt visning. Koden jag använder mig av är identisk för visningen. Bifogar den ifall att det kanske är något jag har missat i den?
Kod: Markera allt
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2); // pins som led är ansluten till
const int buttonPin = 11;      // pin som menyknapp upp är ansluten till
const int buttonPin1 = 12;     // pin som menyknapp ner är ansluten till
const int ledpin =13;           // Pin13, led
const int backpin =10;          // Pin10, styrning av bakgrundsbelysning
// Variabler
//Menyknappar
     int buttonPushCounter = 1;     // räknare för antal knapptryck
     int buttonState11 = 0;         // tillfällig knappstatus, upp
     int buttonState12 = 0;         // tillfällig knappstatus, ner
     int lastButtonState = 0;       // föregående status på knapp
//Lcd belysningstyrning
     int lcdbacklight=0;            //variabel för lcd bakgrundbel
//Tid sedan reset
     int second=0;                  //Variabel för sekunder 
     int minute=0;                  //Variabel för minuter   
     int hour=0;                    //Variabel för timmar      
     int day=0;                     //Variabel för dagar   
//Temp visning panna
    int temppin1 = 3;                // Pin som givare är ansluten till
    int tempc1 = 0;                  // temperatur variabel panna
    int samples1[8];                 // variabel för bättre precision
    int maxi1 = -100,mini1 = 100;     // start max/min temperatur panna
//Temp visning varmvatten
    int temppin2 = 2;                // Pin som givare är ansluten till
    int tempc2 = 0;                  // temperatur variabel panna
    int samples2[8];                 // variabel för bättre precision
    int maxi2 = -100,mini2 = 100;     // start max/min temperatur varmvatten
//Temp visning lufttemp
    int temppin3 = 1;                // Pin som givare är ansluten till
    int tempc3 = 0;                  // temperatur variabel panna
    int samples3[8];                 // variabel för bättre precision
    int maxi3 = -100,mini3 = 100;     // start max/min temperatur innetemp
//Fördröjning av max & min registrering    
    int maxmindelay = 0;
//Strömförbrukning
    int VRaw;                      // För att spara rå-data
    int IRaw;
    float VFinal;                  // För att spara konverterad data
    float IFinal;
    float WFinal;
//Vattennivå
    int waterlevel = 0;
    int value = 0;    // Val av ingång som skall läsas av
void setup() {
   digitalWrite(backpin, HIGH);
   pinMode(buttonPin, INPUT);     //Val av ingång
   pinMode(buttonPin1, INPUT);    //Val av ingång
   pinMode(ledpin, OUTPUT);       //Val av utgång
   pinMode(backpin, OUTPUT);      //Val av utgång
   lcd.begin(16,2);               //Text som visas vid uppstart
   lcd.print("  KABE 590 XL  ");
   lcd.setCursor(0,1);
   lcd.print("2013        V1.6");   
   delay(3000);
   lcd.clear();
   
   
 }
 
void loop() {
  
  
//-----------Kod för variabel "tid sedan reset"-------------  
   static unsigned long lastTick = 0; // Sätter upp en variabel som kommer ihåg sista gången det flyttades en sekund, mellan looparna
    
//----------------Kod för att menystyrning---------------
   buttonState11 = digitalRead(buttonPin);  // Läser av knapp upp status
  
 
   if (buttonState11 != lastButtonState)   // Jämnför om det är förändring mot föregående loop
   {
     
     
     
     if (buttonState11 == LOW)            // Om den är förändrad, skall räknaren öka med 1
       {
      buttonPushCounter +=1;
      lcdbacklight=0;                    // Nollar timer till bakgrundbelysning vid knapptryck
       delay(50);
       }
      
 
   }
   lastButtonState = buttonState11;            //Spara knappstatus för att kunna jämnföra vid nästa loop
   
     
   
   buttonState12 = digitalRead(buttonPin1);    // Läser av knapp ner status
 
   if (buttonState12 != lastButtonState)       // Jämnför om det är förändring mot föregående loop
     {
     
        
     if (buttonState12 == LOW)                // Om den är förändrad, skall räknaren minska med 1
     
     {
       
      buttonPushCounter-=1;
      lcdbacklight=0;                         // Nollar timer till bakgrundbelysning vid knapptryck
      delay(50); 
     }
     
            
         
         if (buttonPushCounter ==0) //Flyttar till meny 3
         
         {
            (buttonPushCounter =6);
            delay(50);
         }
            
   lastButtonState = buttonState12; //Spara knappstatus för att kunna jämnföra vid nästa loop
   
   
}
 //---------Styrning av bakgrundbelysning LCD----------       
        {       
       if (lcdbacklight < 300)
               {
                digitalWrite(backpin, HIGH); 
               }
       else if (lcdbacklight >= 300)
               {
                 digitalWrite(backpin, LOW); 
               }
        }
        
//----------Tempmätning panna---------------------        
      {
      if (maxmindelay >2)  //Väntar 2sek efter uppstart för att givarna ska stabilisera sig
          { 
          tempc1 = ( 5.0 * analogRead(temppin1) * 100.0) / 1024.0;
          
          
          if(tempc1 > maxi1) {maxi1 = tempc1;} // Sätter max temp-panna
          if(tempc1 < mini1) {mini1 = tempc1;} // Sätter min temp-panna
          }
      }
     
//----------Tempmätning varmvatten---------------------        
      {
      if (maxmindelay >2)  //Väntar 2sek efter uppstart för att givarna ska stabilisera sig
          {  
          tempc2 = ( 5.0 * analogRead(temppin2) * 100.0) / 1024.0;
          
          
          if(tempc2 > maxi2) {maxi2 = tempc2;} // Sätter max varmvatten
          if(tempc2 < mini2) {mini2 = tempc2;} // Sätter min varmvatten
          }
      } 
//----------Tempmätning lufttemp---------------------        
      {
      if (maxmindelay >2)  //Väntar 2sek efter uppstart för att givarna ska stabilisera sig
          {
          tempc3 = ( 5.0 * analogRead(temppin3) * 100.0) / 1024.0;
          
          
          if(tempc3 > maxi3) {maxi3 = tempc3;} // Sätter max lufttemp
          if(tempc3 < mini3) {mini3 = tempc3;} // Sätter min lufttemp
          }
      } 
//------Kod för att uppdatera Led för vattennivå kontinuerligt------
       
        int value = analogRead(0); // Val av ingång som skall läsas av
        if (value>340)digitalWrite(ledpin, HIGH);  //Tänder diod på pin13 om analogt värde understiger 205 eller 10liter
        if (value<340)digitalWrite(ledpin, LOW);   //Släcker diod på pin13 om analogt värde överstiger 205 eller 10liter
        
        
//------------------Kod för visning av vattennivå--------------------
        
        if (value >395)    //Verklig värde, 0L - 402
            {waterlevel = 0;}
        if (value <395)    //Verklig värde, 5L - 376
            {waterlevel = 5;}
        if (value <370)    //Verklig värde, 10L - 350
            {waterlevel = 10;}
        if (value <345)    //Verklig värde, 15L - 320
            {waterlevel = 15;}
        if (value <315)    //Verklig värde, 20L - 286
            {waterlevel = 20;}
        if (value <280)    //Verklig värde, 25L - 250
            {waterlevel = 25;}
        if (value <245)    //Verklig värde, 30L - 210
            {waterlevel = 30;}
        if (value <205)    //Verklig värde, 35L - 166
            {waterlevel = 35;}
        if (value <160)    //Verklig värde, 40L - 117
            {waterlevel = 40;}
        if (value <110)    //Verklig värde, 45L - 61
            {waterlevel = 45;}
        if (value <50)    //Verklig värde, 50L - 0
            {waterlevel = 50;}        
//-----Kod för att uppdatera "timer sedan reset" kontinuerligt--------
             
        {
            // Flyttar fran en sekund varje 1000 millisekunder
            if (millis() - lastTick >= 1000) {
              lastTick = millis();
              second++;
              lcdbacklight++;  //Öka timern till bakgrundsbelysning med en sekund
              maxmindelay++;   //Timer för fördröjning av max/min registrering temp
              }
            
            // Flyttar fram en minut var 60:e sekund
            if (second > 59) {
              minute++;
              second = 0; // reset sekunder till 0
              }
            
            // Flyttar fram en timme var 60:e minut
            if (minute > 59) {
              hour++;
              minute = 0; // reset minuter till 0
              }
            
            // Flyttar fram en dag var 24:e timme
            if (hour > 23) {
              day++;
              hour = 0; // reset timmar till 0
              }  
        }       
//---------------Meny 1 Vattennivå-------------------
         if (buttonPushCounter ==1)  
         
             {
  
                //Kod för mätning av vattennivå
    
                lcd.clear();                  //Rensar LCD från tidigare text
                lcd.print("Water level:");     // Text som visas på rad 1
                lcd.setCursor(0,1);
                lcd.print(waterlevel);          //Avläsnining av värdet från vald ingång, skalning av visning
                lcd.setCursor(4,1);
                lcd.print ("Liter");          // Textrad efter analogt värde
  
                
              }
         
//------------------Meny 2 Temperaturmätning panntemp----------------------        
         if (buttonPushCounter ==2)
         
         {
          
         lcd.clear();
         lcd.print(tempc1,DEC);
         lcd.print(" Celsius");
         lcd.setCursor(0,1); 
         lcd.print(maxi1,DEC);
         lcd.print(" Max");
         lcd.setCursor(8,1);
         lcd.print(mini1,DEC);
         lcd.print(" Min");
         tempc1 = 0;
         delay(50);
         }
//------------------Meny 3 Temperaturmätning varmvatten----------------------       
         if (buttonPushCounter ==3)
         
         {
            
         lcd.clear();
         lcd.print(tempc2,DEC);
         lcd.print(" Celsius");
         lcd.setCursor(0,1); 
         lcd.print(maxi2,DEC);
         lcd.print(" Max");
         lcd.setCursor(8,1);
         lcd.print(mini2,DEC);
         lcd.print(" Min");
         tempc2 = 0;
         delay(50);
         }
         
//------------------Meny 4 Temperaturmätning Luft----------------------       
         if (buttonPushCounter ==4)
         
         {
           
         lcd.clear();
         lcd.print(tempc3,DEC);
         lcd.print(" Celsius");
         lcd.setCursor(0,1); 
         lcd.print(maxi3,DEC);
         lcd.print(" Max");
         lcd.setCursor(8,1);
         lcd.print(mini3,DEC);
         lcd.print(" Min");
         tempc3 = 0;
         delay(50);   
         }         
//-----------------Meny 5 Strömförbrukning----------------------------         
         if (buttonPushCounter ==5)  
         {
           VRaw = analogRead(A4);    //Val av ingångar som läses av
           IRaw = analogRead(A5);
           VFinal = VRaw/12.99;      // Omvandling av rå-data
           IFinal = IRaw/7.4;
           WFinal = VFinal*IFinal;
           
           lcd.clear();
           lcd.print(VFinal);
           lcd.print("Volts ");
           lcd.print(WFinal);
           lcd.print("Watt");
           lcd.setCursor(0,1);
           lcd.print(IFinal);
           lcd.print("Ampere");
           delay(50);
    
         }
//-----------------Meny 6 tid sedan reset---------------------------- 
         if (buttonPushCounter ==6)  
         {
           lcd.clear();
           lcd.setCursor(0,0);  //Första förklarande textrad
           lcd.print("Dag");
           lcd.setCursor(4,0);
           lcd.print("Tim");
           lcd.setCursor(8,0);
           lcd.print("Min");
           lcd.setCursor(12,0);
           lcd.print("Sek");   
           lcd.setCursor(0,1);  //Andra raden med variabler
           lcd.print(day);
           lcd.setCursor(4,1);
           lcd.print(hour);
           lcd.setCursor(8,1);
           lcd.print(minute);
           lcd.setCursor(12,1);
           lcd.print(second);
          
            delay(50);
            
         }
         
//-----------Flyttar till meny 1------------
         if (buttonPushCounter ==7)   ///Flyttar till meny 1          
          {
           lcd.clear();
           (buttonPushCounter =1);
           delay(50);
          }
delay(150);
} 
				





 
 