temperature max sur DS18S20

Bonjour ,
Sur mon programme je n’arrive pas à créer l’affichage de la temperaturemax , est ce un probleme de variable ?
Merci

#include <OneWire.h>
#include <UTFT.h>
#include <UTouch.h>
#include <Wire.h>
#include “RTClib.h”
// Declare which fonts we will be using
extern uint8_t BigFont;

// Uncomment the next two lines for the Arduino 2009/UNO
//UTFT myGLCD(ITDB24D,19,18,17,16);
//UTouch myTouch(15,10,14,9,8);

// Uncomment the next two lines for the Arduino Mega
UTFT myGLCD(ITDB32S, 38,39,40,41);
UTouch myTouch(6,5,4,3,2);

int DS18S20_Pin = 7; //Entre DS18S20 pin 7
float temperaturemax=10;

//Temperature chip i/o
OneWire ds(DS18S20_Pin); // on digital pin 7

void setup()
{
Serial.begin(9600);
myGLCD.InitLCD();
myGLCD.clrScr();
myTouch.InitTouch();
myTouch.setPrecision(PREC_MEDIUM);
myGLCD.setFont(BigFont);
myGLCD.setBackColor(0, 0, 0);

}

void loop()
{
float temperature = getTemp();
Serial.println(temperature);
myGLCD.setColor(255,255,255);
myGLCD.printNumF(temperature,1,0,120);

// Test temperature max
if (temperature>temperaturemax)
{
temperaturemax=temperature;
}
else
{
myGLCD.print(“TEST”, 35, 15);
}
myGLCD.printNumF(temperaturemax,1,0,150);

delay(100); //just here to slow down the output so it is easier to read

}

float getTemp(){
//returns the temperature from one DS18S20 in DEG Celsius

byte data[12];
byte addr[8];

if ( !ds.search(addr)) {
//no more sensors on chain, reset search
ds.reset_search();
return -1000;
}

if ( OneWire::crc8( addr, 7) != addr[7]) {
Serial.println(“CRC is not valid!”);
return -1000;
}

if ( addr[0] != 0x10 && addr[0] != 0x28) {
Serial.print(“Device is not recognized”);
return -1000;
}

ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on at the end

byte present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad

for (int i = 0; i < 9; i++) { // we need 9 bytes
data = ds.read();

  • }*

  • ds.reset_search();*

  • byte MSB = data[1];*

  • byte LSB = data[0];*

  • float tempRead = ((MSB << 8) | LSB); //using two’s compliment*

  • float TemperatureSum = tempRead / 16;*

  • return TemperatureSum;*

}

Va falloir être plus précis sur le problème parce que j'ai rien compris ...

bonjour,
mets déjà ton code entre balise code, ca sera plus lisible.

float temperaturemax=10;

la température est de combien lors de tes essais?
si inférieur à 10, ca doit retourner 10 tout le temps.
mets un serial print pour voir sur la console ce que ca donne cette valeur.

as tu testé un code simple avant ca pour vérifier que la sonde DS retourne bien quelque chose et vérifier tes branchements?

skywalker81:
Bonjour ,
Sur mon programme je n'arrive pas à créer l'affichage de la temperaturemax , est ce un probleme de variable ?
Merci

bonjour
pas claire l'explication du probleme :grin:
attention neanmoins à une chose, quasi tous les programmes que l'on trouve le sont pour des DS18B20 et pas des DS18S20.

Merci pour les premières réponses..
L’affichage de la température s'affiche bien , par contre c'est le calcul de temperaturemax qui fonctionne pas ; j'ai toujours la valeur 10 qui j'ai mise par défaut ..

float temperature = getTemp();
Serial.println(temperature);
myGLCD.setColor(255,255,255);
myGLCD.printNumF(temperature,1,0,120);

// Test temperature max
if (temperature>temperaturemax)
{
temperaturemax=temperature;
}
else
{
myGLCD.print("TEST", 35, 15);
}
myGLCD.printNumF(temperaturemax,1,0,150);

Quelle est la température que te retourne getTemp() ?

la temperature de la sonde " float temperature = getTemp();" ça s'affiche bien.. mon soucis c'est pour conserver la valeur maximale que je veux stocker dans la variable "temperaturemax"

Ok... mais ça t'affiche quoi ? et ou (écran LCD ou terminal série) ?

ça affiche la temperature sur le terminal serie et LCD mais la temperaturemax reste tjs à "10"

Tu as 10 sur le terminal série ?

infobarquee:
bonjour,
mets déjà ton code entre balise code, ca sera plus lisible.

float temperaturemax=10;

la température est de combien lors de tes essais?
si inférieur à 10, ca doit retourner 10 tout le temps.
mets un serial print pour voir sur la console ce que ca donne cette valeur.

as tu testé un code simple avant ca pour vérifier que la sonde DS retourne bien quelque chose et vérifier tes branchements?

+1 quelle temperature est affichée dans le serial?
copie colle ce que tu obtiens dans la console

si la temperature est inférieure à 10, tu auras toujours 10 pour temperaturemax.

modifie comme ca par exemple

 // Test temperature max
float temperature = getTemp();
Serial.println(temperature);
Serial.println(temperaturemax);
 if (temperature>temperaturemax)
{
  temperaturemax=temperature;
  }
  else
  {
temperaturemax= temperaturemax;
  myGLCD.print("TEST", 35, 15);
}
myGLCD.printNumF(temperaturemax,1,0,150);

C'est un problème au niveau du test, ma temperature est de 20 la valeur initiale de temperaturemax 10 ;
cette fonction

if (temperature>=temperaturemax)
{
temperaturemax=temperature;
}
else
{
myGLCD.print("TEST", 35, 15);
temperaturemax=temperaturemax;
}

elle ne fonctionne pas temperature(20) supérieure à temperaturemax (10) et j'ai pourtant "TEST" qui s'affiche ???

20 c'est la température que tu as sur ton terminal série ? Tu n'as pas de décimales ?

si j'ai "20.05"

Sur ton LCD tu as uniquement TEST ou tu as aussi le 10 correspondant à la température max qui s'affiche ?

j'ai "TEST"
temperature "20.5"
temperaturemax"10.0"

Essaie le code ci-dessous et fais un copier-coller du terminal série stp.

#include <OneWire.h>
#include <UTFT.h>
#include <UTouch.h>
#include <Wire.h>
#include "RTClib.h"

// Declare which fonts we will be using
extern uint8_t BigFont[];

// Uncomment the next two lines for the Arduino Mega
UTFT        myGLCD(ITDB32S, 38,39,40,41);   
UTouch      myTouch(6,5,4,3,2);

int DS18S20_Pin = 7; //Entre DS18S20 pin 7
float temperaturemax = 10;

//Temperature chip i/o
OneWire ds(DS18S20_Pin);  // on digital pin 7

void setup() {
	Serial.begin(9600);
	myGLCD.InitLCD();
	myGLCD.clrScr();
	myTouch.InitTouch();
	myTouch.setPrecision(PREC_MEDIUM);
	myGLCD.setFont(BigFont);
	myGLCD.setBackColor(0, 0, 0);
}

void loop() {
	float temperature = getTemp();
	Serial.print("temperature : ");
	Serial.println(temperature);
	Serial.print("temperature max : ");
	Serial.println(temperaturemax);
	myGLCD.setColor(255,255,255);
	myGLCD.printNumF(temperature,1,0,120);

	// Test temperature max
	if (temperature > temperaturemax) {
		temperaturemax = temperature;
	} else {
		myGLCD.print("TEST", 35, 15);
	}
	myGLCD.printNumF(temperaturemax,1,0,150);
 
	delay(5000); //just here to slow down the output so it is easier to read
}


float getTemp(){
  //returns the temperature from one DS18S20 in DEG Celsius

  byte data[12];
  byte addr[8];

  if ( !ds.search(addr)) {
      //no more sensors on chain, reset search
      ds.reset_search();
      return -1000;
  }

  if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.println("CRC is not valid!");
      return -1000;
  }

  if ( addr[0] != 0x10 && addr[0] != 0x28) {
      Serial.print("Device is not recognized");
      return -1000;
  }

  ds.reset();
  ds.select(addr);
  ds.write(0x44,1); // start conversion, with parasite power on at the end

  byte present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE); // Read Scratchpad

 
  for (int i = 0; i < 9; i++) { // we need 9 bytes
    data = ds.read();
  }
 
  ds.reset_search();
 
  byte MSB = data[1];
  byte LSB = data[0];

  float tempRead = ((MSB << 8) | LSB); //using two's compliment
  float TemperatureSum = tempRead / 16;
 
  return TemperatureSum;
 
}

Ben la ça fonctionne !!! c'est quoi que tu as modifié ? juste l'affichage avant le test ?
par contre je ne savais pas chaque fois que tu lance le moniteur serie ça fait un reset sur les valeurs

Je n'ai rien modifié, j'ai juste affiché dans le moniteur série la température et la température max.

Alors je ne comprend pas d'ou venais le problème , en tout cas ça fonctionne tres bien , je vais faire idem pour la temperature mini..
Merci encore et bon we