arduino nano 2 tempraturen op 16x2 lcd

Hallo

Ik heb een arduino nano met daar aan 2 lm35 temp sensors en een 16x2 lcd gesloten.

Maar nu heb ik het programmatie er in gezet maar nu leest hij beide sensors wel maar geeft hij dubbel de temperatuur aan dan als in de 1 sensor programma er in heb . Dus nu staat er temp 1 = 44 c en temp 2 = 46 c . Maar als in de 1 sensor programma er in set is de temperatuur 22 graden van sensor 1 . Hoe kan het dat in dubbel de waarde heb hij leest de sensors wel apart . Als ik de sensors warm maak kun je wel zien dat er maar 1 van de 2 warmer word

dit is mijn programmatej

#include <LiquidCrystal.h>
int reading1 = 0;
int sensorPin1 = A0;
int reading2 = 1;
int sensorPin2 = A1;
int relay1 = 13;
int relay2 = 10;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
pinMode(relay1,OUTPUT);
pinMode(relay2,OUTPUT);
}

void loop() {
reading1 = analogRead(sensorPin1);
int celsius = reading1;
lcd.setCursor(0, 0);
lcd.print("Temperature1 ");
lcd.setCursor(13,0);
lcd.print(celsius, DEC);
lcd.print((char)223);
lcd.print("c");

reading2 = analogRead(sensorPin2);
int celsius0 = reading2;
lcd.setCursor(0, 01);
lcd.print("Temperature2 ");
lcd.setCursor(13,1);
lcd.print(celsius0, DEC);
lcd.print((char)223);
lcd.print("c");

if (celsius >23){
digitalWrite(13,HIGH);
digitalWrite(10,LOW);
} else {
digitalWrite(13,LOW);
digitalWrite(10,HIGH);
}
delay(500);
lcd.clear();

Geen idee of het hier aan zou liggen maar misschien moet je van de eerste "celsius" "celsius1" maken
althans zo is het bij mij en dan werkt het wel.
En iets anders wat me opvalt is lcd.setCursor(0, 01); moet dat niet lcd.setCursor(0, 1); zijn ?

Ik ben ook pas een beginner maar dat viel me op

Kijk eens op :Arduino Playground - LM35HigherResolution

Volgens dat is de berekening voor de temperatuur :
temp = (5.0 * analogRead(tempPin) * 100.0) / 1024;
of
temp = analogRead(tempPin);
temp = temp * 0.48828125;
Dat kan de factor +/- 2 verklaren

Hoi Bubbe,
Pas deze regel eens aan lcd.setCursor(0, 01); naar
lcd.setCursor(0, 1);
mogelijk zit het daar in.

grt. Vic

Wat ik ook doe hij geeft steeds dubbel zoveel graden aan

Het is gelukt

Met deze code

#include <LiquidCrystal.h>

int temp1 = 0;
int sensorPin1 = A0;
int temp2 = 1;
int sensorPin2 = A1;
int relay1 = 13;
int relay2 = 10;
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
Serial.begin(9600);
pinMode(relay1,OUTPUT);
pinMode(relay2,OUTPUT);
}

void loop() {
temp1 = analogRead(sensorPin1);
temp1 = temp1 * 0.48828125;
int celsius1 = temp1;
lcd.setCursor(0,0);
lcd.print("binnentemp ");
lcd.setCursor(12,0);
lcd.print(celsius1, DEC );
lcd.print((char)223);
lcd.print("c");

temp2 = analogRead(sensorPin2);
temp2 = temp2 * 0.48828125;
int celsius0 = temp2;
lcd.setCursor(0,1);
lcd.print("buitentemp ");
lcd.setCursor(12,1);
lcd.print(celsius0, DEC );
lcd.print((char)223);
lcd.print("c");

if (celsius1 >23){
digitalWrite(13,HIGH);
digitalWrite(10,LOW);
} else {
digitalWrite(13,LOW);
digitalWrite(10,HIGH);
}
delay(500);
lcd.clear();
}

lm35 is 10mV /celsius.
en dus zoals vadeveni al verteld:
zul je een omrekening moeten maken
1024=5 volt = 500 graden
dus 500/1024 is die 0.488
en als dus 44 graden maal 0.488 doet dan krijg je precies de verwachting.

Nu nog ook uitlezen via bluetooth er bij maar dat moet ik maar even kijken hoe je 2 programma's samen voegt

je hebt 3+1 delen in een programma
boven de setup voor declaraties en libs.
de setup voor allerlei settings zoals output etc.
loop voor je programma
en onder de loop de functies.
in de loop zet je dus de beide delen die nu in de loop staan en een verwijzing in de loop.

Snap er nog niet veel van . Ben nieuw met andruino dus nog maar leren dan maar

Ik zou zeggen:

Pak twee van de voorbeeld sketches die je kunt combineren.
ie sketches zijn namelijk meestal niet zo groot en hebben er mooi wat uitleg bij staan.
Probeer die dan eens te combineren.

Let daarbij op de verschillende delen van de sketch die allemaal worden aangeduid met het woord void en dan een naam.

Shooter gaf aan dat er 3 van die delen zijn, maar tot nog toe heb jij in de sketches die je hebt laten zien telkens maar 2 van die delen getoond, namelijk void setup () en void loop(), en dat is wat je ook minimaal nodig hebt om een sketch te maken (anders zal je m ook niet kunnen compileren).
Wel heb je nog boven void setup () nog wat declaraties en includes staan.

Je moet dus de delen met dezelfde naam gaan samenvoegen.
Daarbij moet je dan uiteraard ook controleren of er bijvoorbeeld geen verschillende namen worden gegeven aan dezelfde pinnen en of er niet toevallig pinnen en/of namen dubbel gebruikt worden voor verschillende zaken.

Ben weer even bezig geweest met de 2 tempratuur meters .
Heb een andere lcd er achter met een ic dus inplaats van 13 draden naar het lcd heb ik nu maar 4 draden

En dit is de code die ik gebruikt heb er voor

/**

  • Pin Connections:
  • SCL = A5
  • SDA = A4
  • VCC = 5V
  • GND = GND
    */

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

int temp1 = 0;
int sensorPin1 = A0;
int temp2 = 1;
int sensorPin2 = A1;
int relay1 = 13;
int relay2 = 10;
// initialize the library with the numbers of the interface pins
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7); // 0x27 is the I2C bus address for an unmodified module

void setup()
{
lcd.setBacklightPin(3,POSITIVE);
lcd.setBacklight(LOW); // NOTE: You can turn the backlight off by setting it to LOW instead of HIGH
lcd.begin(16, 2);
lcd.clear();
pinMode(relay1,OUTPUT);
pinMode(relay2,OUTPUT);
}
void loop() {
temp1 = analogRead(sensorPin1);
temp1 = temp1 * 0.48828125;
int celsius1 = temp1;
lcd.setCursor(0,0);
lcd.print("binnentemp ");
lcd.setCursor(12,0);
lcd.print(celsius1, DEC );
lcd.print((char)223);
lcd.print("c");

temp2 = analogRead(sensorPin2);
temp2 = temp2 * 0.48828125;
int celsius0 = temp2;
lcd.setCursor(0,1);
lcd.print("buitentemp ");
lcd.setCursor(12,1);
lcd.print(celsius0, DEC );
lcd.print((char)223);
lcd.print("c");

if (celsius1 >23){
digitalWrite(13,HIGH);
digitalWrite(10,LOW);
} else {
digitalWrite(13,LOW);
digitalWrite(10,HIGH);
}
delay(500);
lcd.clear();
}

als je omrekent wordt het getal een float en dat pak je niet goed op, op scherm kun je het een float laten en printen met %2.1f of het dus celsius wordt dan een float.
dus float celsius2!!!! = temp2 * 0.48828125;