Problème afficheur 7 segments température

bonjour,

j'ai un soucis, j'aimerais afficher sur mon afficheur 7 segments avec 4 emplacements, mais je n'arrive pas à afficher ma température avec une virgule malgré que j'imprime la valeur de ma sonde de température avec une virgule.

j'utilise une Carte Arduino, deux sondes de températures DS18B20, un afficheur 4 digits TM1637, rtc et lecteur SD

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;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
//fin horloge temps réel

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

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


  Serial.println("TEST");
  Serial.println(F("Programe de test de lecture/écriture de fichier sur Carte SD, reliée à un Arduino Uno"));
  Serial.println(F("==="));
  Serial.println();

  display.setBrightness(0x0f);

  //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));*/


  }
}

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

  // put your main code here, to run repeatedly:
  Serial.print("Requesting temperatures...");
  sensor_interieur.requestTemperatures();
  double tempint = sensor_interieur.getTempCByIndex(0);

  delay (2000);

  Serial.print("température interieur ");
  Serial.print(tempint);

  delay (3000);

  sensor_exterieur.requestTemperatures();
  double tempext = sensor_exterieur.getTempCByIndex(0);

  delay (3000);
  Serial.print("température extérieur ");
  Serial.print(tempext);

  if (tempint < tempmin) {
    tempmin = tempint; //Calcul temperature mini
  }
  if (tempint > tempmax) {
    tempmax = tempint; //Calcul temperature maxi
  }

  Serial.print("température maximum ");
  Serial.print (tempmax);
  Serial.println("°C");

  Serial.print("température minimum ");
  Serial.print (tempmin);
  Serial.println("°C");

  if (tatt > now.minute ())
  {
    Serial.print ("case attente");
    delay (1000) ;
    Serial.print ("condition numéro 1 => si le T + 1 minutes est supérieur à l'heure actuelle alors attendre min: ");
    Serial.print (tmin + 2);

    // afficheur 8 segments de la lecture de la derniere température
    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(ledverte, LOW);
    digitalWrite(ledbleu, LOW);
    digitalWrite(ledtempext, LOW);
    delay (4000);
    display.showNumberDec(tempmin, false, 2, 0);
    digitalWrite(ledblanche, LOW);
    digitalWrite(ledverte, LOW);
    digitalWrite(ledbleu, HIGH);
    digitalWrite(ledtempext, LOW);
    delay (4000);
    display.showNumberDec(tempext, false, 2, 0);
    digitalWrite(ledblanche, LOW);
    digitalWrite(ledverte, LOW);
    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(); // saut de ligne

    monFichier.close();

    Serial.println();

    delay (5000);
    int tmin =  (now.minute() );
    if (tmin > 55) {
      tmin = 1; // permet de dire si le temps en minutes est supérieur à 55 qu'il est égale à 1 car sinon on va dépasser les 60.
    }
    tatt = tmin + 4; //Modifier le temps

//! Display a decimal number
//! Display the given argument as a decimal number.
//! @param num The number to be shown
//! @param leading_zero When true, leading zeros are displayed. Otherwise unnecessary digits are
//! blank. NOTE: leading zero is not supported with negative numbers.
//! @param length The number of digits to set. The user must ensure that the number to be shown
//! fits to the number of digits requested (for example, if two digits are to be displayed,
//! the number must be between 0 to 99)
//! @param pos The position of the most significant digit (0 - leftmost, 3 - rightmost)
void showNumberDec(long num, bool leading_zero = false, uint8_t length = 6, uint8_t pos = 0);

Tu devrais d'abord jouer avec cette fonction pour bien comprendre les paramètres, notamment les deux derniers.

Fais un petit code du genre :

#include <TM1637Display.h> //afficheur
#define CLK 2 // Connexion écran
#define DIO 3 // connexion écran
TM1637Display display(CLK, DIO);

void setup() {
float x = 12.34;
display.showNumberDec(x, false, 2, 0);
delay(2000);
display.showNumberDec(x, false, 2, 1);
delay(2000);
display.showNumberDec(x, false, 3, 1);
delay(2000);
etc...
}

void loop() { }

et regarde ce qui se passe.

Merci beaucoup, j'ai réussi à afficher ma température comme je le voulais, grâce au bibliothèque exemple de la librairie.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.