diff --git a/D4han.ino b/D4han.ino index 74f966a..615c8b8 100644 --- a/D4han.ino +++ b/D4han.ino @@ -1,6 +1,115 @@ +/* +******************************************************************************* +* Copyright (c) 2023 by M5Stack +* Equipped with M5Core sample source code +* 配套 M5Core 示例源代码 +* Visit for more information: https://docs.m5stack.com/en/unit/tvoc +* 获取更多资料请访问: https://docs.m5stack.com/zh_CN/unit/tvoc +* +* Describe: TVOC/eCO2. +* Date: 2021/8/26 +******************************************************************************* +Description: The screen will display TVOC and CO2. 屏幕将显示TVOC和CO2。 +Note: SGP30 needs 15 seconds to initialize calibration after power on. +*/ + +#include + +#include "Adafruit_SGP30.h" + +Adafruit_SGP30 sgp; +TFT_eSprite spu = TFT_eSprite(&M5.Lcd); // Sprite object + +long last_millis = 0; // for 15sec wait timer void setup() { + M5.begin(115200); + M5.Lcd.setRotation(3); + + spu.setColorDepth(8); + spu.createSprite(240, 135); + + + M5.Lcd.setTextSize(2); + M5.Lcd.fillScreen(TFT_BLUE); + M5.Lcd.setTextSize(2); + M5.Lcd.setTextColor(TFT_BLACK); + M5.Lcd.setCursor(5, 5); + + while (!sgp.begin()) { // Init the sensor. + M5.Lcd.println("Sensor not found"); + delay(5000); + } + // M5.Lcd.println("Initialization..."); + } void loop() { + static int i = 4; //initializing + while (i > 0) { + if (millis() - last_millis > 1000) { + last_millis = millis(); + i--; + spu.fillSprite(TFT_YELLOW); + spu.setTextColor( BLACK, YELLOW ); + spu.setCursor(30, 4, 4); spu.setTextSize(1); + spu.println("Initializing..."); + + spu.setCursor(60, 34, 4); spu.setTextSize(2); + spu.printf(" %d ", i ); + spu.pushSprite(0, 0); + delay(100); + } + } + + if (!sgp.IAQmeasure()) { // Commands the sensor to take a single eCO2/VOC + // measurement. 命令传感器进行一次eCO2/VOC测量 + Serial.println("Measurement failed"); + return; + } + + spu.fillSprite(LIGHTGREY); + spu.setCursor(93, 5, 4); spu.setTextSize(2); + spu.setTextColor( BLACK, LIGHTGREY); + spu.printf(" %d \n", sgp.TVOC); + + spu.setCursor(93, 65, 4); spu.setTextSize(2); + spu.setTextColor( BLACK, LIGHTGREY); + spu.printf(" %d \n", sgp.eCO2); + + spu.setTextColor( BLUE, LIGHTGREY); + spu.setCursor(10, 20, 4); spu.setTextSize(1); + spu.println("TVOC : "); + spu.setCursor(10, 80, 4); spu.setTextSize(1); + spu.println("eCO2 : "); + + spu.pushSprite(0, 0); // 画面に反映させる + + Serial.printf("TVOC: %d eCO2: %d\n", sgp.TVOC, sgp.eCO2); + + // eCO2が1000を超えたら音を鳴らす +if (sgp.eCO2 > 1000) { + spu.setCursor(10, 120, 4); spu.setTextSize(1); + spu.println("kankisite "); +M5.Beep.setBeep(523, 500); M5.Beep.beep(); +} + + M5.update(); + if (M5.Axp.GetBtnPress() == 2) { + M5.Axp.Write1Byte(0x32, M5.Axp.Read8bit(0x32) | 0x80); // Power Off + } + delay(500); +} + + + + + + + + + + + +void loop() { }