Version1

Dependencies:   BSP_DISCO_F746NG DHT22

view.cpp

Committer:
antoinnneee
Date:
2020-06-22
Revision:
0:d60753bdf6d7

File content as of revision 0:d60753bdf6d7:

#include "view.h"
#include "stm32746g_discovery_lcd.h"
#include "mbed.h"
#include "button.h"
#include "gauge.h"
#include <DHT22/DHT22.h>
#include <list>
#include "pouce.h"
#include "PouceRouge.h"



View::View(int width, int height, uint32_t bgColor)
    : m_width(width), m_height(height), m_bgColor(bgColor)
{
    Button *butDefault = new Button(110, 200, 60);
    butDefault->setText("update");
    m_buttonList.push_back(butDefault);
    
    temperatureGauge = new Gauge;
    temperatureGauge->setText("Temperature");
    
    humidityGauge = new Gauge(150, 50);
    humidityGauge->setLimit(0, 100);
    humidityGauge->setColorType(1);
    humidityGauge->setText("Humidity");
    
    dht = new DHT22(D1);
    draw();
    drawImage(250, 40, 0);
}

void View::drawImage(int offsetX, int offsetY, int type)
{
    
    int x = 0;
    int y = 0;
    uint32_t* dataPtr = nullptr;
    int h = 0;
    int w = 0;
    if (type)
    {
        dataPtr = (uint32_t*)Pouce.data;
        w = Pouce.width;
        h = Pouce.height;
    }
    else
    {
        dataPtr = (uint32_t*)PouceRouge.data;
        w = PouceRouge.width;
        h = PouceRouge.height;
    }
    while(y < h)
    {
        while(x < w)
        {
            uint32_t color = *dataPtr;
            if (!color)
                color = 0xffffffff;
            BSP_LCD_DrawPixel(x + offsetX, y + offsetY, color);
            dataPtr++;
            x++;
        }
        x = 0;
        y++;
    }
}

void delay(int value)
{
    int delCnt = 0;
    while (delCnt < value)
    {
        delCnt ++;
        thread_sleep_for(1);
    }

}
static int testFunc(){
    return 5;
}

void View::setGaugeValue(float(DHT22::*funcGauge)(), Gauge* targetGauge)
{
    targetGauge->setValue((int)(dht->*funcGauge)());
}


void View::contain(int x, int y)
{
        int idBut = 0;
        for (Button *it : m_buttonList) {
        if (it->contain(x,y)) {
            if (idBut == 0)
            {
                updateGauge();
            }
            
        }
        idBut++;
    }
}

void View::updateGauge()
{
    setGaugeValue(&DHT22::getTemperature, temperatureGauge);
    setGaugeValue(&DHT22::getHumidity, humidityGauge);  
    int type = (dht->getHumidity() > 50) ? 1 : 0;
    if (m_lastType != type)
    {
        m_lastType = type;
        drawImage(250, 40, type);
    }
}

void View::draw()
{
    BSP_LCD_Clear(m_bgColor);
    for (Button *it : m_buttonList) {
        it->draw();
    }
    temperatureGauge->draw();
    humidityGauge->draw();
}