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
main.cpp@13:eb0af974f19a, 2019-06-04 (annotated)
- Committer:
- Lio93
- Date:
- Tue Jun 04 14:36:02 2019 +0000
- Revision:
- 13:eb0af974f19a
- Parent:
- 12:e2bb579c4455
final
Who changed what in which revision?
User | Revision | Line number | New 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 |