Afficher la température

Bonjour,
Je suis en TP je n'arrive pas afficher la température quand la température est < à 3 avec un message. Aider moi s'il vous plaît. !
Merci d'avance !

Si tu veux qu'on puisse t'aider il faut nous expliquer un peu mieux : quels composants, notamment quel capteur ? quel écran/affichage ? comment c'est branché ? quel code ? ...

C'est un capteur TCN75A. Le câblage j'ai trouvé sur internet. Je dois afficher sur un capteur lcd 16x2.
J'ai déja reussi afficher la température.
Le programme :

#include <Wire.h> // librairie utilisant le protocole I2C / TWI (communication série sur 2 fils)
#include <LiquidCrystal.h> // librairie pour l'écran LCD

/* DEFINITION DES CONSTANTES */
#define tcn75address 0x48 // Adresse I2C du capteur de température
#define SERIAL_BAUDRATE 9600 // Vitesse de communication du port série

const byte RSPIN = 12; // Port numérique utilisé pour l'écran LCD
const byte RWPIN = 11; // Port numérique utilisé pour l'écran LCD
const byte EPIN = 13; // Port numérique utilisé pour l'écran LCD

const byte DB4 = 4; // Port numérique utilisé pour l'écran LCD
const byte DB5 = 5; // Port numérique utilisé pour l'écran LCD
const byte DB6 = 6; // Port numérique utilisé pour l'écran LCD
const byte DB7 = 7; // Port numérique utilisé pour l'écran LCD

/* DECLARATION DES VARIABLES GLOBALES */
LiquidCrystal lcd(RSPIN, RWPIN, EPIN, DB4, DB5, DB6, DB7); //liaison 4 bits de données


 
byte m_seconds; // Déclaration des variables du Timer, 
byte m_minutes; // notez le m_ pour définir qu'il s'agit 
byte m_hours; // d'une variable membre

float m_Temp; // Variable contenant la température.
char* m_time = (char*)malloc(13); // Stockage de la durée de fonctionnement HH:MM:SS.III

// Definition du caractere ° qui n'existe pas de base
byte degrees[8] = {
B00000,
B01000,
B10100,
B01000,
B00000,
B00000,
B00000,
B00000,
};

void setup() 
{
 lcd.begin(16,2);
 lcd.print("");

Wire.begin(); // Initialisation de la com I2C 
Wire.beginTransmission(tcn75address); // Initialisation de la mesure de température 
Wire.write(0x01); // Définition de la résolution 
Wire.write(0x60);
Wire.endTransmission(); // Fin de Commande      

Wire.beginTransmission(tcn75address); // On établi la communication
Wire.write(0x00);
Wire.endTransmission(); // Fin de Commande 

lcd.begin(16, 2); // Init de l'écran 16 colonnes et 2 lignes
lcd.clear(); // Vidage de l'écran. 
lcd.createChar(0, degrees); // initialiser le caractère ° dans le LCD

m_hours = 0; // Init des variables temporelles 
m_minutes = 0;
m_seconds = 0;

Serial.begin(SERIAL_BAUDRATE); // Initialisation de la communication série
}

/* Nom : GetTemp 
  Description : Permet d'obtenir la température.
Retour : Float => Température mesurée.
*/
float GetTemp() 
{
int tempreg = 0;
float temperature = 0;
Wire.requestFrom(tcn75address, 2);
tempreg = Wire.read(); // Récupération de l'information
tempreg = tempreg << 8; // Conversion et calcul de la valeur en °C
tempreg |= Wire.read();
tempreg = tempreg >> 4;
temperature = (float)tempreg / 16;
return temperature;
}

/* Nom : GetTime
Description : Permet d'obtenir le délai depuis lequel l'arduino fonctionne.
Retour : char* => Chaine de caractère contenant le délai au format HH:MM:SS.III
*/
char* GetTime() 
{
// Note c'est possible de détecter le passage à zéro de milli. Suffit d'avoir noté que sa valeur est inf. à des valeurs stockées.
// Déclaration des variables locales
const byte ASCII_NUM = 48;
unsigned long v_delay; // Nombre de millisecondes. Notez que les variables locales sont préfixés v_
byte v_seconds; // Nombre de secondes calculées
byte v_minutes; // Nombre de minutes calculées
byte v_hours; // Nombre d'heures calculées
unsigned int v_days; // Nombre de jours calculés
unsigned int v_millis;

// Allons chercher l'info en milliseconde, puis calculons les variables
v_delay = millis(); 
v_millis = v_delay % 1000; // Test de remise à zéro
v_seconds = (v_delay / 1000) % 60;
v_minutes = ((v_delay / 1000) / 60) % 60;
v_hours = (((v_delay / 1000) / 60) / 60) % 60;
v_days = (((v_delay / 1000) / 60) / 60) / 24;  // Si vous voulez rajouter le nombre de jours.

// Formatage du délai
m_time[0] = ASCII_NUM + v_hours / 10;
m_time[1] = ASCII_NUM + v_hours % 10;
m_time[2] = ':';
m_time[3] = ASCII_NUM + v_minutes / 10;
m_time[4] = ASCII_NUM + v_minutes % 10;
m_time[5] = ':';
m_time[6] = ASCII_NUM + v_seconds / 10;
m_time[7] = ASCII_NUM + v_seconds % 10;
m_time[8] = '.';
m_time[9] = ASCII_NUM + v_millis / 100;
m_time[10] = ASCII_NUM + (v_millis % 100) / 10;
m_time[11] = ASCII_NUM + v_millis % 10;
m_time[12] = '\0';
return m_time;
}

void loop() 
{ 
      lcd.setCursor(0, 0);
      lcd.print("Temperature :");
      lcd.setCursor(0, 1); // Positionnement à la seconde ligne
m_Temp = GetTemp(); // Acquisition de la température
lcd.print(m_Temp); lcd.write(byte(0)); lcd.print("C"); // Affichage de la température.   
delay(500); // On renouvelera l'opération dans 500 ms.
}
1 Like

C'est une première : demander de l'aide pendant un TP.

Moi j'appelle cela de la fraude.

Il va vraiment falloir mettre des brouilleurs dans les lycées.

68tjs : Un TP, à moins qu'il ne soit noté, n'est pas un examen, c'est une mise en pratique de la théorie apprise en cours (Travaux Pratiques)...
Il n'a pas dit "je suis en plein exam"... M'enfin, c'est bizarre quand même, normalement pendant un TP il y a le prof pour aider dans ce genre de cas/problèmes...

Ayildiz : je ne sais pas encore qu'est-ce-qui ne va pas dans ton code + montage puisque visiblement t'arrives à afficher la température, il te manque quoi ? qu'est-ce qui ne marche pas ?

bonjour,
pourquoi se prendre la tête lorsqu'il y a une lib pour ce composent?

Il dit qu'il est en TP. Cela m'étonnerait qu'un TP ne soit pas noté.
C'est comme un devoir surveillé : il a un sujet avec les consignes du professeur:
Extrait :

byte m_seconds; // Déclaration des variables du Timer,
byte m_minutes; // notez le m_ pour définir qu'il s'agit
byte m_hours; // d'une variable membre

Il n'a pas aller sur internet le professeur lui a donné tout ce qu'il lui faut il peut faire son TP ..............à condition d'avoir travaillé avant.

De toute façon à l'heure qu'il est le TP est fini.

"De mon temps" (ca fait vieux de dire ca, et pourtant...) les TP n'étaient pas notés, mais t'as certainement raison 68tjs... de toutes façons on ne lui a pas fait le boulot à sa place... :stuck_out_tongue:

De mon temps à moi (c'est encore plus vieux :grin: ) TOUT était noté, pour pas grand chose puisqu'il n'y avait pas de contrôle continu mais seulement les minis examens couperets des contrôles trimestriels.

Dans le lycée ou j'étais on n'avait pas intérêt à tricher en contrôle trimestriel.
Se faire prendre à tricher en contrôle trimestriel c'était l'assurance de l'exclusion définitive en moins de 48 h, même à 3 mois du bac.
Des règles comme celle là sont très formatrices.

Quand on voit les comportements actuels si cette règle était appliquée les lycées seraient vidés.

68tjs:
Quand on voit les comportements actuels si cette règle était appliquée les lycées seraient vidés.

ouaip, niveler par le bas, qu'elle bonne idée ! (c'est ironique bien sur)