2x DS18B20 temperatur auf einem TFTLCD anzeigen Lassen

Hallo Leute
Bin Beginner, nach langem versuchen grieg ichs geschafft 2 DS18B20 anzeigen zu lassen.
Ich habe den Code mit einer float funktion geändert.
Nun habe ich das Problem, dass sich die Temperatur anzeige immer darüber schreibt und nur eine Temp gleichzeitig anzeigt. Diese wird Überschrieben, dass ich keine Zahlen mehr erkennen kann.
und das Celsius zeichen falsch angezeit wird.Verwende dieses Symbol um Code zu posten

#include <MCUFRIEND_kbv.h>
#include <OneWire.h>
#include <DallasTemperature.h>


// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 30 
#define ONE_WIRE_BUS 40 

#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
#define LCD_CS A3   // Chip Select goes to Analog 3
#define LCD_CD A2  // Command/Data goes to Analog 2
#define LCD_WR A1  // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0

#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

MCUFRIEND_kbv tft;


// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// Addresses of 3 DS18B20s
uint8_t Links[8] = { 0x28, 0xE2, 0x9E, 0x83, 0xB1, 0x22, 0x08, 0x98 };
uint8_t Rechts[8] = { 0x28, 0x91, 0x56, 0x62, 0xB1, 0x22, 0x08, 0x83 };


void setup(void)
{

  tft.begin();
  tft.setRotation(1);
  Serial.begin(9600);
  sensors.begin();

 
  tft.fillScreen(BLACK); // TFT_YELLOW = Blue - TFT_BLUE = YELLOW - TFT_BLACK = White    
  tft.setCursor(10, 20); //shift Cursor in Pixel (Collum, Row, Fontsize)
  tft.setTextSize(2);
  tft.println("Dallas TwoPin_DS18B20");

  tft.setCursor(20, 50); //shift Cursor in Pixel (Collum, Row, Fontsize)
  tft.print("Inhouse: ");
  tft.setCursor(20, 75); //shift Cursor in Pixel (Collum, Row, Fontsize)
 
  
  tft.setCursor(20, 100);
  tft.print("Outhouse: ");
  tft.setCursor(20, 120); //shift Cursor in Pixel (Collum, Row, Fontsize)
  
  
  
}
void loop(void)
{ 
  sensors.requestTemperatures();

  printTemperature(Links);
  printTemperature(Rechts);

  delay(1000);
}

void printTemperature(DeviceAddress deviceAddress)
{ 
 
  float Links = sensors.getTempC(deviceAddress);
  float Rechts = sensors.getTempC(deviceAddress);
 
  tft.setCursor(150, 50);
  tft.print(Links);
  tft.print((char)176);
  tft.print("C   ");

  
  tft.setCursor(150, 100);
  tft.print(Rechts);
  tft.print((char)176);
  tft.print("C   ");
}

 


IMG_93081

Wie kann ich den float Temp anzeige zurückstellen`?
In welche richtung muss ich suchen?

Danke für eure hilfe...

Mfg

Was passiert denn, wenn du tft.setTextColor() verwendest?

void printTemperature(DeviceAddress deviceAddress)
{ 
 
  float Links = sensors.getTempC(deviceAddress);
  float Rechts = sensors.getTempC(deviceAddress);
 
  tft.setTextColor(WHITE,BLACK);
  tft.setCursor(150, 50);
  tft.print(Links);
  tft.print((char)176);
  tft.print("C   ");

  
  tft.setCursor(150, 100);
  tft.print(Rechts);
  tft.print((char)176);
  tft.print("C   ");
}

???

Du füllst beide Variablen mir einem Wert.
Das ist ein Logikfehler.

Darüber hinaus verwendest Du lokal und global die selben Variablennamen für unterschiedliche Dinge.

Das muss erstmal aufgelöst werden.

Das funktioniert mal.. Danke

Kanst du mir was dazu sagen, das auf beiden Tempanzeigen jeweils beide Temperaturen abwechselnd angezeigt werden?

Warum liest Du nicht, was Dir geantwortet wird?
Zu faul?

Bin fast blutiger Anfänger. Suche code, versuche Code abschnitte für mich passend zusammen zustellen.. :laughing:

#define ONE_WIRE_BUS 30 
#define ONE_WIRE_BUS 40 

Ich wollte es probieren 2 DS18B20 über 2 Bus Schnitt Stellen einzubinden.

 float Links = sensors.getTempC(deviceAddress);
  float Rechts = sensors.getTempC(deviceAddress);

Das hier was nicht stimmt ist mir auch aufgefallen. Weiss nicht wo ich ansetzten soll!

Hallo!!! was läuft mit dir..?
Darf ich noch über dein geschriebenes Nachdenken, um vieleicht zu verstehen was du mir sagen willst?

Wie kann ich das lösen? Kannst du mir Stichwörter sagen, wonach ich suchen soll um das zu lernen?

#include <MCUFRIEND_kbv.h>
#include <OneWire.h>
#include <DallasTemperature.h>


// Data wire is plugged into port 2 on the Arduino
constexpr byte ONE_WIRE_BUS {40};

constexpr byte LCD_RESET {A4}; // Can alternately just connect to Arduino's reset pin
constexpr byte LCD_CS {A3};   // Chip Select goes to Analog 3
constexpr byte LCD_CD {A2};  // Command/Data goes to Analog 2
constexpr byte LCD_WR {A1};  // LCD Write goes to Analog 1
constexpr byte LCD_RD {A0}; // LCD Read goes to Analog 0

constexpr uint16_t BLACK   {0x0000};
constexpr uint16_t BLUE    {0x001F};
constexpr uint16_t RED     {0xF800};
constexpr uint16_t GREEN   {0x07E0};
constexpr uint16_t CYAN    {0x07FF};
constexpr uint16_t MAGENTA {0xF81F};
constexpr uint16_t YELLOW  {0xFFE0};
constexpr uint16_t WHITE   {0xFFFF};

MCUFRIEND_kbv tft;

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// Addresses of 3 DS18B20s
constexpr byte sensorNums {2};
constexpr uint8_t sensor[sensorNums][8] =
{
  { 0x28, 0xE2, 0x9E, 0x83, 0xB1, 0x22, 0x08, 0x98 },
  { 0x28, 0x91, 0x56, 0x62, 0xB1, 0x22, 0x08, 0x83 }
};

float temperatur[sensorNums];

constexpr uint32_t intervall {1000};
uint32_t lastRequest;

void setup(void)

{
  Serial.begin(9600);
  Serial.println(F("Start..."));
  tft.begin();
  tft.setRotation(1);
  sensors.begin();
  tft.fillScreen(BLACK); // TFT_YELLOW = Blue - TFT_BLUE = YELLOW - TFT_BLACK = White
  tft.setCursor(10, 20); //shift Cursor in Pixel (Collum, Row, Fontsize)
  tft.setTextSize(2);
  tft.println("Dallas TwoPin_DS18B20");
  tft.setCursor(20, 50); //shift Cursor in Pixel (Collum, Row, Fontsize)
  tft.print("Inhouse: ");
  tft.setCursor(20, 75); //shift Cursor in Pixel (Collum, Row, Fontsize)
  tft.setCursor(20, 100);
  tft.print("Outhouse: ");
  tft.setCursor(20, 120); //shift Cursor in Pixel (Collum, Row, Fontsize)
}

void loop(void)
{
  if (millis() - lastRequest > intervall)
  {
    lastRequest = millis();
    printTemperature();
    sensors.requestTemperatures();
  }
}
//
void printTemperature()
{
  for (byte b = 0; b < sensorNums; b++)
  { temperatur[b] = sensors.getTempC(sensor[b]); }
  tft.fillScreen(0);
  tft.setCursor(150, 50);
  tft.print(temperatur[0]);
  tft.print((char)176);
  tft.print("C   ");
  tft.setCursor(150, 100);
  tft.print(temperatur[1]);
  tft.print((char)176);
  tft.print("C   ");
}

Ich danke dir für deine Schnelle Antwort.
Danke, für deine Arbeit. Ich wollte eigentlich nicht, dass du den Code direkt umschreibst. Danke..

Suche die Unterschiede.
Versuche daraus zu lernen.
Wenn Du Fragen hast frag.
(Beachte: beide Sensoren gehören an einen PIN. Das ist ein BUS!)

Danke....

@my_xy_projekt hat es ja schon fertig programmiert...

Wohl korrekter als meine Ausführungen ...Nur wurde in der print Funktion das Setzen der Farbe vergessen.

War vorher auch nicht da :wink:
Wird da nicht ein default genommen?

Wenn die nicht gesetzt wird, gibt es Pixelsalat bei sich ändernden Werten.

Ich fülle vor dem neu beschreiben mit 0, die lib kennt wohl kein clear(). Bin davon ausgegangen, das die Voreinstellung für den Text background BLACK und forground WHITE ist.
Aber gut, das kann der TO ja noch nachholen :slight_smile:

gelöscht , Andere waren schneller ....

Das ist sprachlich, sagen wir mal vorsichtig...: unpassend

@my_xy_projekt
Soweit werden beide Temperaturen angezeigt und auch nicht überschrieben. jetzt geht es darum das ganze auch zu verstehen und weiter um zu setzten.

Ok, Dann frag was Du wissen willst.
Die wichtigste Entscheidung war, dass ich beide Sensoren jeweils in einem Array betreibe.
Sowohl was die Adressierung angeht, als auch die Auswertung.
Vom Prinzip her könnte man sogar wieder links und rechts verwenden, wenn man der Elemntnummer des Array (0 oder 1) jeweils einen variablennamen zuordnet.
Diese Schreibweise verkürzt den Code und vermeidet Codeduplikate.

Ansonsten ist das eigentlich genau dein Code. Nur das Sprachniveau etwas angehoben :wink: