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);
}