Problème de programmes DS18B30, 7 segments, RTC et SD

bonjour,

je possède une Carte Arduino UNO, deux sondes de températures DS18B20, un afficheur 7 segments 4 digits, une RTC et un lecteur de carte SD pour imprimer mes données.

Mon objectif est avec la sonde numéro 1, de mesurer la température en direct, son max et son min et de l'afficher sur mon afficheurs 7 segments. Je voudrais allumer des diodes pour me repérer (l'idée est d'une bleu pour le min, une rouge pour le max et une verte pour T en direct)

la seconde sonde permet de mesurer la température extérieur, de l'afficher sur l'afficheur en 4ème intensions

En secondaire grâce à la RTC je veux enregistrer dans un fichiers exce mes données des deux températures, mais pas afficher le min et le max, toutes les X minutes en définissant le temps.

mon problème est que la seconde sonde extérieur sature et m'affiche 85 degrés ( elles sont à une distance d'1 metre ) au bout de qq secondes.

mais mon programme fait déjà 76% de la mémoire flash de l'arduino et cela crée peut être des bugs.

comment diminuer mon programme pour que la mémoire flash redescende et que mon programme ne bug moins.
voici le code:

#include <TM1637Display.h> //afficheur
#include <SD.h> //carte SD
#include <OneWire.h>
#include <DallasTemperature.h> // température
//horloge temps réel
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc;


#define SONDE1 A0
#define SONDEEXT A5 // Sonde exterieur 
#define CLK 2 // Connexion écran
#define DIO 3 // connexion écran
#define sdCardPinChipSelect   10     //pin de la carte SD  
File monFichier;

const char* nomDuFichier            = "donnees.csv";
const long delaiIntervalleDeMesures = 3000;
const int ledbleu = 9; // Définition de la broche numéro 2.
const int ledverte = 8; // Définition de la broche numéro 2.
const int ledblanche = 7; // Définition de la broche numéro 2.
const int ledtempext = 6; // Définition de la broche numéro 2.


float tempmin = 100;   //Temperature min
float tempmax = 0;     //Temperature max
int tmin; // essai de prises toutes les 10 min
int tatt;

// Create degree celsius symbol
const uint8_t celsius[] = {
  SEG_A | SEG_B | SEG_F | SEG_G,  // Degree symbol
  SEG_A | SEG_D | SEG_E | SEG_F   // C
};

OneWire oneWire_in(SONDE1);
OneWire oneWire_out(SONDEEXT);

DallasTemperature sensor_interieur(&oneWire_in);
DallasTemperature sensor_exterieur(&oneWire_out);
//voies de l'afficheurs
TM1637Display display(CLK, DIO);


void setup() {

  pinMode(ledbleu, OUTPUT);
  pinMode(ledverte, OUTPUT);
  pinMode(ledblanche, OUTPUT);
  pinMode(ledtempext, OUTPUT);

  Serial.begin(9600);
  delay(4000);

  display.setBrightness(0x0f);

  sensor_interieur.begin();
  sensor_exterieur.begin();

  //test si la carte SD marche
  Serial.println(F("Étape 1 : Initialisation de la carte SD :"));
  if (!SD.begin(sdCardPinChipSelect)) {
    Serial.println(F("Échec de l'initialization !"));
    while (1);    // Boucle infinie (stoppage du programme)
  }
  Serial.println(F("Initialisation terminée."));
  Serial.println();
  //programme qui vérifie heure et permet la mise à jour si soucis//
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");

    // Comment out below lines once you set the date & time.
    // Following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    /*rtc.adjust(DateTime(2022, 2, 1, 16, 15, 0));*/

  }



  // On initialise la connexion série
  Serial.begin(9600);
  delay(4000);
}

void loop() {

  // lecture de l'heure

  DateTime now = rtc.now();
  Serial.println("Current Date & Time: ");
  Serial.print(now.year(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.day(), DEC);
  Serial.print(" (");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();


  sensor_interieur.requestTemperatures();
  double tempint = sensor_interieur.getTempCByIndex(0);

  delay (2000);

  Serial.print("tinterieur ");
  Serial.print(tempint);

  delay (3000);

  sensor_exterieur.requestTemperatures();
  double tempext = sensor_exterieur.getTempCByIndex(0);
  delay (3000);
  Serial.print("textérieur ");
  Serial.print(tempext);
  if (tempint < tempmin) {
    tempmin = tempint; //Calcul temperature mini
  }
  if (tempint > tempmax) {
    tempmax = tempint; //Calcul temperature maxi
  }
  Serial.print("tmaximum ");
  Serial.print (tempmax);
  Serial.print("tminimum ");
  Serial.print (tempmin);
  if (tatt > now.minute ())
  {
    Serial.print ("case attente");
    delay (1000);

    // afficheur 8 segments
    int temperature = tempint;
    display.showNumberDec(temperature, false, 2, 0);
    display.setSegments(celsius, 2, 2);
    digitalWrite(ledblanche, LOW);
    digitalWrite(ledverte, HIGH);
    digitalWrite(ledbleu, LOW);
    digitalWrite(ledtempext, LOW);
    delay (4000);
    display.showNumberDec(tempmax, false, 2, 0);
    digitalWrite(ledblanche, HIGH);
    digitalWrite(ledbleu, LOW);
    delay (4000);
    display.showNumberDec(tempmin, false, 2, 0);
    digitalWrite(ledblanche, LOW);
    digitalWrite(ledbleu, HIGH);
    delay (4000);
    display.showNumberDec(tempext, false, 2, 0);
    digitalWrite(ledbleu, LOW);
    digitalWrite(ledtempext, HIGH);
  }


  else
  {
    Serial.print ("case impression");
    monFichier = SD.open(nomDuFichier, FILE_WRITE);
    monFichier.print(tempint), monFichier.print(";");
    monFichier.print(tempext), monFichier.print(";");
    monFichier.print(now.month ()), monFichier.print(";");
    monFichier.print(now.day ()), monFichier.print(";");
    monFichier.print(now.hour ()), monFichier.print(";");
    monFichier.print(now.minute() ), monFichier.print(";");
    monFichier.println();
    monFichier.close();
    Serial.println();
    delay (5000);
    int tmin =  (now.minute() );
    if (tmin > 55) {
      tmin = 1; //
    }

Bonjour,

Si ton programme utilise 76% de la mémoire flash ça ne pose aucun problème, la taille de la flash utilisée n'augmentera pas durant l'utilisation du programme (contrairement à la RAM dont la taille utilisée peut augmenter et causer des problèmes).

Bonjour,

merci de votre réponse

ce qui me paraît bizarre, c'est que dès que je dépasse le stade de 75% et que l'erreur apparait, mon second capteur de température se met en défaut.

Tu veux les réponses ici
ou
ici Erreur deuxième sonde température DS18B20 - #15 ?

vu que j'ai eu la réponse pour mon afficheur, j'ai refais un message pour réduire les donnés dans l'arduino

Oui, Pour ton afficheur j’ai vu mais c’est encore un autre topic…..
Tu as deux to pics pour ton pb de sonde. Je réponds sur lequel ? Tu vas suivre les deux ? Pas pratique

je supprime les autres gardons celui-ci

Non, il n'y a aucune réponse sur ce fil.
On clos et tu poursuis sur le premier ouvert, puisque la question fait suite au sujet traité dans l'autre fil de discussion.
Erreur deuxième sonde température DS18B20 - #14 by EGT59pre

A post was merged into an existing topic: Erreur deuxième sonde température DS18B20