Measuring air flow, relative humidity & temperature, then showing results at TFT

Dependencies:   FT800_2 HYT mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "FT_Platform.h"
00003 #include "HYT.h"
00004 #include "Display.h"
00005 
00006 HYT         SENSOR(PD6, PD7); // sda, scl [efm32hg_stk3400]
00007 FT800       TFT(PE10, PE11, PE12, PE13, PA1, PB11); // mosi, miso, sck, ss, int, pd [efm32hg_stk3400]
00008 AnalogIn    ADC(PD4); // [efm32hg_stk3400]
00009 
00010 Display     disp(&TFT);
00011 
00012 uint8_t     humidity;
00013 float       flow;
00014 int8_t      temperature;
00015 
00016 #define HUMIDITY_CORRECTION         15
00017 #define TEMPERATURE_CORRECTION      -1
00018 
00019 /*************************************************************************************************************************/
00020 float calculateFlow(uint16_t resultADC)
00021 {
00022     uint16_t flowVoltage;
00023     if ((resultADC / 1000) - 32 >= 0) {
00024         flowVoltage = (resultADC / 1000) - 32;
00025     } else {
00026         flowVoltage = 0;
00027     }
00028       
00029     float voltageToSpeed[31] = { 0, 0, 0, 0.1, 0.1, 0.1, 0.2, 0.2, 0.3, 0.3,
00030                                  0.4, 0.5, 0.6, 0.7, 0.8, 1.0, 1.2, 1.5, 2.0, 2.3, 2.8, 3.2, 3.9,
00031                                  4.5, 5.1, 5.8, 6.5, 7.4, 8.2, 9.1, 10
00032                                };
00033     float flowSpeed = voltageToSpeed[flowVoltage];
00034 
00035     return flowSpeed;
00036 }
00037 
00038 /*************************************************************************************************************************/
00039 uint8_t calculateHumidity(uint8_t humidityFromHYT)
00040 {
00041     uint8_t humidityFinal;
00042     if (humidityFromHYT + 15 >= 100) {
00043         humidityFinal = 100;
00044     } else {
00045         humidityFinal = humidityFromHYT + HUMIDITY_CORRECTION;
00046     }
00047 
00048     return humidityFinal;
00049 }
00050 
00051 /*************************************************************************************************************************/
00052 int8_t calculateTemperature(int8_t temperatureFromHYT)
00053 {
00054     return temperatureFromHYT + TEMPERATURE_CORRECTION;
00055 }
00056 
00057 /**************************************************************************************************************************/
00058 int main()
00059 {
00060     disp.Calibration();
00061 
00062     disp.LoadImagesAndFonts();
00063     disp.HandleAllBitmaps();
00064 
00065     disp.showHumidity = 1;
00066     disp.showFlow = 1;
00067     disp.showTemperature = 1;
00068 
00069     // first point
00070     SENSOR.MRCommand();
00071     wait_ms(100);
00072     SENSOR.DFCommand();
00073     
00074     while (1) {
00075         SENSOR.MRCommand();
00076 
00077         humidity = calculateHumidity((uint8_t) SENSOR.humidity);
00078         flow = calculateFlow(ADC.read_u16());
00079         temperature = calculateTemperature((int8_t) SENSOR.temperature);
00080 
00081         disp.UpdateDataToDraw(humidity, temperature, flow);
00082         disp.MainScreen();
00083 
00084         disp.GetTouch();
00085 
00086         SENSOR.DFCommand();
00087     }
00088 }