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