
Version1
Dependencies: BSP_DISCO_F746NG DHT22
view.cpp@0:d60753bdf6d7, 2020-06-22 (annotated)
- Committer:
- antoinnneee
- Date:
- Mon Jun 22 15:16:28 2020 +0000
- Revision:
- 0:d60753bdf6d7
FirstCommit;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
antoinnneee | 0:d60753bdf6d7 | 1 | #include "view.h" |
antoinnneee | 0:d60753bdf6d7 | 2 | #include "stm32746g_discovery_lcd.h" |
antoinnneee | 0:d60753bdf6d7 | 3 | #include "mbed.h" |
antoinnneee | 0:d60753bdf6d7 | 4 | #include "button.h" |
antoinnneee | 0:d60753bdf6d7 | 5 | #include "gauge.h" |
antoinnneee | 0:d60753bdf6d7 | 6 | #include <DHT22/DHT22.h> |
antoinnneee | 0:d60753bdf6d7 | 7 | #include <list> |
antoinnneee | 0:d60753bdf6d7 | 8 | #include "pouce.h" |
antoinnneee | 0:d60753bdf6d7 | 9 | #include "PouceRouge.h" |
antoinnneee | 0:d60753bdf6d7 | 10 | |
antoinnneee | 0:d60753bdf6d7 | 11 | |
antoinnneee | 0:d60753bdf6d7 | 12 | |
antoinnneee | 0:d60753bdf6d7 | 13 | View::View(int width, int height, uint32_t bgColor) |
antoinnneee | 0:d60753bdf6d7 | 14 | : m_width(width), m_height(height), m_bgColor(bgColor) |
antoinnneee | 0:d60753bdf6d7 | 15 | { |
antoinnneee | 0:d60753bdf6d7 | 16 | Button *butDefault = new Button(110, 200, 60); |
antoinnneee | 0:d60753bdf6d7 | 17 | butDefault->setText("update"); |
antoinnneee | 0:d60753bdf6d7 | 18 | m_buttonList.push_back(butDefault); |
antoinnneee | 0:d60753bdf6d7 | 19 | |
antoinnneee | 0:d60753bdf6d7 | 20 | temperatureGauge = new Gauge; |
antoinnneee | 0:d60753bdf6d7 | 21 | temperatureGauge->setText("Temperature"); |
antoinnneee | 0:d60753bdf6d7 | 22 | |
antoinnneee | 0:d60753bdf6d7 | 23 | humidityGauge = new Gauge(150, 50); |
antoinnneee | 0:d60753bdf6d7 | 24 | humidityGauge->setLimit(0, 100); |
antoinnneee | 0:d60753bdf6d7 | 25 | humidityGauge->setColorType(1); |
antoinnneee | 0:d60753bdf6d7 | 26 | humidityGauge->setText("Humidity"); |
antoinnneee | 0:d60753bdf6d7 | 27 | |
antoinnneee | 0:d60753bdf6d7 | 28 | dht = new DHT22(D1); |
antoinnneee | 0:d60753bdf6d7 | 29 | draw(); |
antoinnneee | 0:d60753bdf6d7 | 30 | drawImage(250, 40, 0); |
antoinnneee | 0:d60753bdf6d7 | 31 | } |
antoinnneee | 0:d60753bdf6d7 | 32 | |
antoinnneee | 0:d60753bdf6d7 | 33 | void View::drawImage(int offsetX, int offsetY, int type) |
antoinnneee | 0:d60753bdf6d7 | 34 | { |
antoinnneee | 0:d60753bdf6d7 | 35 | |
antoinnneee | 0:d60753bdf6d7 | 36 | int x = 0; |
antoinnneee | 0:d60753bdf6d7 | 37 | int y = 0; |
antoinnneee | 0:d60753bdf6d7 | 38 | uint32_t* dataPtr = nullptr; |
antoinnneee | 0:d60753bdf6d7 | 39 | int h = 0; |
antoinnneee | 0:d60753bdf6d7 | 40 | int w = 0; |
antoinnneee | 0:d60753bdf6d7 | 41 | if (type) |
antoinnneee | 0:d60753bdf6d7 | 42 | { |
antoinnneee | 0:d60753bdf6d7 | 43 | dataPtr = (uint32_t*)Pouce.data; |
antoinnneee | 0:d60753bdf6d7 | 44 | w = Pouce.width; |
antoinnneee | 0:d60753bdf6d7 | 45 | h = Pouce.height; |
antoinnneee | 0:d60753bdf6d7 | 46 | } |
antoinnneee | 0:d60753bdf6d7 | 47 | else |
antoinnneee | 0:d60753bdf6d7 | 48 | { |
antoinnneee | 0:d60753bdf6d7 | 49 | dataPtr = (uint32_t*)PouceRouge.data; |
antoinnneee | 0:d60753bdf6d7 | 50 | w = PouceRouge.width; |
antoinnneee | 0:d60753bdf6d7 | 51 | h = PouceRouge.height; |
antoinnneee | 0:d60753bdf6d7 | 52 | } |
antoinnneee | 0:d60753bdf6d7 | 53 | while(y < h) |
antoinnneee | 0:d60753bdf6d7 | 54 | { |
antoinnneee | 0:d60753bdf6d7 | 55 | while(x < w) |
antoinnneee | 0:d60753bdf6d7 | 56 | { |
antoinnneee | 0:d60753bdf6d7 | 57 | uint32_t color = *dataPtr; |
antoinnneee | 0:d60753bdf6d7 | 58 | if (!color) |
antoinnneee | 0:d60753bdf6d7 | 59 | color = 0xffffffff; |
antoinnneee | 0:d60753bdf6d7 | 60 | BSP_LCD_DrawPixel(x + offsetX, y + offsetY, color); |
antoinnneee | 0:d60753bdf6d7 | 61 | dataPtr++; |
antoinnneee | 0:d60753bdf6d7 | 62 | x++; |
antoinnneee | 0:d60753bdf6d7 | 63 | } |
antoinnneee | 0:d60753bdf6d7 | 64 | x = 0; |
antoinnneee | 0:d60753bdf6d7 | 65 | y++; |
antoinnneee | 0:d60753bdf6d7 | 66 | } |
antoinnneee | 0:d60753bdf6d7 | 67 | } |
antoinnneee | 0:d60753bdf6d7 | 68 | |
antoinnneee | 0:d60753bdf6d7 | 69 | void delay(int value) |
antoinnneee | 0:d60753bdf6d7 | 70 | { |
antoinnneee | 0:d60753bdf6d7 | 71 | int delCnt = 0; |
antoinnneee | 0:d60753bdf6d7 | 72 | while (delCnt < value) |
antoinnneee | 0:d60753bdf6d7 | 73 | { |
antoinnneee | 0:d60753bdf6d7 | 74 | delCnt ++; |
antoinnneee | 0:d60753bdf6d7 | 75 | thread_sleep_for(1); |
antoinnneee | 0:d60753bdf6d7 | 76 | } |
antoinnneee | 0:d60753bdf6d7 | 77 | |
antoinnneee | 0:d60753bdf6d7 | 78 | } |
antoinnneee | 0:d60753bdf6d7 | 79 | static int testFunc(){ |
antoinnneee | 0:d60753bdf6d7 | 80 | return 5; |
antoinnneee | 0:d60753bdf6d7 | 81 | } |
antoinnneee | 0:d60753bdf6d7 | 82 | |
antoinnneee | 0:d60753bdf6d7 | 83 | void View::setGaugeValue(float(DHT22::*funcGauge)(), Gauge* targetGauge) |
antoinnneee | 0:d60753bdf6d7 | 84 | { |
antoinnneee | 0:d60753bdf6d7 | 85 | targetGauge->setValue((int)(dht->*funcGauge)()); |
antoinnneee | 0:d60753bdf6d7 | 86 | } |
antoinnneee | 0:d60753bdf6d7 | 87 | |
antoinnneee | 0:d60753bdf6d7 | 88 | |
antoinnneee | 0:d60753bdf6d7 | 89 | void View::contain(int x, int y) |
antoinnneee | 0:d60753bdf6d7 | 90 | { |
antoinnneee | 0:d60753bdf6d7 | 91 | int idBut = 0; |
antoinnneee | 0:d60753bdf6d7 | 92 | for (Button *it : m_buttonList) { |
antoinnneee | 0:d60753bdf6d7 | 93 | if (it->contain(x,y)) { |
antoinnneee | 0:d60753bdf6d7 | 94 | if (idBut == 0) |
antoinnneee | 0:d60753bdf6d7 | 95 | { |
antoinnneee | 0:d60753bdf6d7 | 96 | updateGauge(); |
antoinnneee | 0:d60753bdf6d7 | 97 | } |
antoinnneee | 0:d60753bdf6d7 | 98 | |
antoinnneee | 0:d60753bdf6d7 | 99 | } |
antoinnneee | 0:d60753bdf6d7 | 100 | idBut++; |
antoinnneee | 0:d60753bdf6d7 | 101 | } |
antoinnneee | 0:d60753bdf6d7 | 102 | } |
antoinnneee | 0:d60753bdf6d7 | 103 | |
antoinnneee | 0:d60753bdf6d7 | 104 | void View::updateGauge() |
antoinnneee | 0:d60753bdf6d7 | 105 | { |
antoinnneee | 0:d60753bdf6d7 | 106 | setGaugeValue(&DHT22::getTemperature, temperatureGauge); |
antoinnneee | 0:d60753bdf6d7 | 107 | setGaugeValue(&DHT22::getHumidity, humidityGauge); |
antoinnneee | 0:d60753bdf6d7 | 108 | int type = (dht->getHumidity() > 50) ? 1 : 0; |
antoinnneee | 0:d60753bdf6d7 | 109 | if (m_lastType != type) |
antoinnneee | 0:d60753bdf6d7 | 110 | { |
antoinnneee | 0:d60753bdf6d7 | 111 | m_lastType = type; |
antoinnneee | 0:d60753bdf6d7 | 112 | drawImage(250, 40, type); |
antoinnneee | 0:d60753bdf6d7 | 113 | } |
antoinnneee | 0:d60753bdf6d7 | 114 | } |
antoinnneee | 0:d60753bdf6d7 | 115 | |
antoinnneee | 0:d60753bdf6d7 | 116 | void View::draw() |
antoinnneee | 0:d60753bdf6d7 | 117 | { |
antoinnneee | 0:d60753bdf6d7 | 118 | BSP_LCD_Clear(m_bgColor); |
antoinnneee | 0:d60753bdf6d7 | 119 | for (Button *it : m_buttonList) { |
antoinnneee | 0:d60753bdf6d7 | 120 | it->draw(); |
antoinnneee | 0:d60753bdf6d7 | 121 | } |
antoinnneee | 0:d60753bdf6d7 | 122 | temperatureGauge->draw(); |
antoinnneee | 0:d60753bdf6d7 | 123 | humidityGauge->draw(); |
antoinnneee | 0:d60753bdf6d7 | 124 | } |