Programme qui permet d'afficher la température en temps réel, grâce au capteur MCP9808 sur un microcontrôleur DISCO-F746NG. Le projet à été réalisé durant les cours d'interfaçage , en licence pro MECSE à l'IUT de Cachan.

Dependencies:   TS_DISCO_F746NG mbed LCD_DISCO_F746NG BSP_DISCO_F746NG MCP9808 BUTTON_GROUP

Committer:
Lio93
Date:
Tue Jun 04 14:36:02 2019 +0000
Revision:
13:eb0af974f19a
Parent:
12:e2bb579c4455
final

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:35af280527cf 1 //---------------------------------------------------------------
MikamiUitOpen 0:35af280527cf 2 // Demo program of Button class and ButtonGroup class
MikamiUitOpen 0:35af280527cf 3 //
MikamiUitOpen 12:e2bb579c4455 4 // 2016/02/22, Copyright (c) 2016 MIKAMI, Naoki
MikamiUitOpen 0:35af280527cf 5 //---------------------------------------------------------------
MikamiUitOpen 0:35af280527cf 6
MikamiUitOpen 0:35af280527cf 7 #include "button_group.hpp"
Lio93 13:eb0af974f19a 8 #include "MCP9808.h"
MikamiUitOpen 0:35af280527cf 9
MikamiUitOpen 0:35af280527cf 10 using namespace Mikami;
MikamiUitOpen 0:35af280527cf 11
MikamiUitOpen 0:35af280527cf 12 TS_DISCO_F746NG ts_;
MikamiUitOpen 0:35af280527cf 13 LCD_DISCO_F746NG lcd_;
Lio93 13:eb0af974f19a 14 Serial pc(USBTX, USBRX); // tx, rx
Lio93 13:eb0af974f19a 15 MCP9808 capteur(D14, D15); //: i2c(sda, scl)
MikamiUitOpen 0:35af280527cf 16
MikamiUitOpen 0:35af280527cf 17 int main()
Lio93 13:eb0af974f19a 18 { // ---------------------------------------INITIALISATION DES VARIABLES---------------------------------------------------
Lio93 13:eb0af974f19a 19 float temperature, kelvin, fahrenheit;
MikamiUitOpen 0:35af280527cf 20 const int Y0 = 5;
MikamiUitOpen 4:201e97957618 21 const int X1 = 30;
MikamiUitOpen 4:201e97957618 22 const int Y1 = 100;
Lio93 13:eb0af974f19a 23 int mode = 0;
MikamiUitOpen 0:35af280527cf 24
Lio93 13:eb0af974f19a 25 const uint32_t BACK_COLOR = 0xFF006A6C; // fond blue
MikamiUitOpen 6:2736b38c1d73 26 lcd_.Clear(BACK_COLOR);
MikamiUitOpen 0:35af280527cf 27
Lio93 13:eb0af974f19a 28 const int NUMBER_BUTTONS = 3; // nb de bouton
Lio93 13:eb0af974f19a 29 const string STR[NUMBER_BUTTONS] = {"KELVIN", "CELSIUS", "FAHRENHEIT"};
Lio93 13:eb0af974f19a 30 ButtonGroup bGroup(lcd_, ts_, 10, Y0, 100, 40,
Lio93 13:eb0af974f19a 31 LCD_COLOR_BLUE, BACK_COLOR, NUMBER_BUTTONS, STR, 5, 5, 3); // 100 taille de la case
MikamiUitOpen 12:e2bb579c4455 32
MikamiUitOpen 12:e2bb579c4455 33 DigitalOut dOut(D7);
MikamiUitOpen 6:2736b38c1d73 34 int num;
Lio93 13:eb0af974f19a 35 //--------------------------------------------------------------------------------------------------------------------------
MikamiUitOpen 0:35af280527cf 36 while (true)
MikamiUitOpen 0:35af280527cf 37 {
Lio93 13:eb0af974f19a 38 temperature =capteur.readTemp(); // reception de la valeur de la temperature
Lio93 13:eb0af974f19a 39 fahrenheit = (temperature*9/5) + 32; // convertion
Lio93 13:eb0af974f19a 40 kelvin = temperature +273.15; // convertion
Lio93 13:eb0af974f19a 41
Lio93 13:eb0af974f19a 42 lcd_.DisplayStringAt(30, 200, (uint8_t *)"Medzo Owono Lionel", LEFT_MODE);
Lio93 13:eb0af974f19a 43 lcd_.DisplayStringAt(30, 230, (uint8_t *)"Capteur de temperature", LEFT_MODE);
Lio93 13:eb0af974f19a 44
MikamiUitOpen 12:e2bb579c4455 45 dOut = 1;
Lio93 13:eb0af974f19a 46 bool touched = bGroup.GetTouchedNumber(num, LCD_COLOR_DARKBLUE); // bouton actionné change de couleur
MikamiUitOpen 12:e2bb579c4455 47 dOut = 0;
Lio93 13:eb0af974f19a 48 char str[20];
MikamiUitOpen 12:e2bb579c4455 49 if (touched)
MikamiUitOpen 0:35af280527cf 50 {
Lio93 13:eb0af974f19a 51
MikamiUitOpen 0:35af280527cf 52 lcd_.SetFont(&Font16);
MikamiUitOpen 0:35af280527cf 53 lcd_.SetTextColor(LCD_COLOR_WHITE);
MikamiUitOpen 0:35af280527cf 54
Lio93 13:eb0af974f19a 55 if (num==0) // choix du mode 1pour ensuite aller au switch case coorespondant
Lio93 13:eb0af974f19a 56 {
Lio93 13:eb0af974f19a 57 mode = 1;
Lio93 13:eb0af974f19a 58 lcd_.DisplayStringAt(X1, Y1, (uint8_t *)" ", CENTER_MODE); c
Lio93 13:eb0af974f19a 59
Lio93 13:eb0af974f19a 60 }
Lio93 13:eb0af974f19a 61 else if (num==1) // choix du mode 2 pour ensuite aller au switch case coorespondant
Lio93 13:eb0af974f19a 62 {
Lio93 13:eb0af974f19a 63 mode = 2;
Lio93 13:eb0af974f19a 64 lcd_.DisplayStringAt(X1, Y1, (uint8_t *)" ", CENTER_MODE);// effacer l'ecriture précedente
Lio93 13:eb0af974f19a 65 }
Lio93 13:eb0af974f19a 66 else if (num==2) // choix du mode 3 pour ensuite aller au switch case coorespondant
Lio93 13:eb0af974f19a 67 {
Lio93 13:eb0af974f19a 68 mode = 3;
Lio93 13:eb0af974f19a 69 lcd_.DisplayStringAt(X1, Y1, (uint8_t *)" ", CENTER_MODE);// effacer l'ecriture précedente
Lio93 13:eb0af974f19a 70 }
Lio93 13:eb0af974f19a 71
Lio93 13:eb0af974f19a 72
MikamiUitOpen 0:35af280527cf 73 }
MikamiUitOpen 0:35af280527cf 74
Lio93 13:eb0af974f19a 75 switch (mode){ // choix du mode, avec affichage en continue
Lio93 13:eb0af974f19a 76 case 1:
Lio93 13:eb0af974f19a 77
Lio93 13:eb0af974f19a 78
Lio93 13:eb0af974f19a 79 sprintf(str, "%.2f K", kelvin);
Lio93 13:eb0af974f19a 80 lcd_.DisplayStringAt(X1, Y1, (uint8_t *)str, CENTER_MODE);
Lio93 13:eb0af974f19a 81 break;
Lio93 13:eb0af974f19a 82
Lio93 13:eb0af974f19a 83 case 2:
Lio93 13:eb0af974f19a 84
Lio93 13:eb0af974f19a 85
Lio93 13:eb0af974f19a 86 sprintf(str, "%.2f C", temperature);
Lio93 13:eb0af974f19a 87 lcd_.DisplayStringAt(X1, Y1, (uint8_t *)str, CENTER_MODE);
Lio93 13:eb0af974f19a 88 break;
Lio93 13:eb0af974f19a 89
Lio93 13:eb0af974f19a 90 case 3:
Lio93 13:eb0af974f19a 91
Lio93 13:eb0af974f19a 92
Lio93 13:eb0af974f19a 93 sprintf(str, "%.2f F",fahrenheit );
Lio93 13:eb0af974f19a 94 lcd_.DisplayStringAt(X1, Y1, (uint8_t *)str, CENTER_MODE);
Lio93 13:eb0af974f19a 95 break;
Lio93 13:eb0af974f19a 96 }
MikamiUitOpen 12:e2bb579c4455 97 wait(0.01f);
MikamiUitOpen 0:35af280527cf 98 }
MikamiUitOpen 0:35af280527cf 99 }
MikamiUitOpen 12:e2bb579c4455 100