DHT.h,库中程序直接使用
二、温湿度不同LED实现显示不必要的颜色(使用WS2812B)
if(TempC >= 30leds[0] = CRGB::Red; FastLED.show(); } else if(TempC <= { leds[0] = CRGB::Green; FastLED.show(); } delay(50); if(h >= { leds[1] = CRGB::Red; FastLED.show(); } else if(h <= 85leds[1] = CRGB::Green; FastLED.show();
三、程序代码完整
#include <FastLED.h>#include <Wire.h>#include <OneWire.h>#include <DallasTemperature.h>#include <Adafruit_MLX90614.h>#include "U8glib.h"#include "DHT.h"#define ONE_WIRE_BUS 3#define button13 #define DHTPIN 2#define DHTTYPE DHT11#define NUM_LEDS LED灯珠数量#define DATA_PIN Arduino输出控制信号引脚#define LED_TYPE WS2812 LED灯带型号#define COLOR_ORDER GRB RGB红、绿、蓝LED排列顺序 uint8_t max_bright = LED亮度控制变量,可使用数值为 0 ~ 255,数值越大则光带亮度越高 CRGB leds[NUM_LEDS]; leds Adafruit_MLX90614 mlx = Adafruit_MLX90614();U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);OneWire oneWire(ONE_WIRE_BUS);DallasTemperature sensors(&oneWire);DHT dht(DHTPIN,DHTTYPE);uint8_t openState = 0;uint8_t c = 0;float TempC = 0;float h;float t;static unsigned char deng[] U8G_PROGMEM = {0x00,0x00,0x7E,0x3E,0x40,0x22,0x40,0x12,0x42,0x12,0x24,0x0A,0x28,0x12,0x10,0x12,0x10,0x22,0x28,0x22,0x28,0x22,0x44,0x16,0x42,0x0A,0x01,0x02,0x00,0x02,0x00,0x02,/*"邓",0*/};static unsigned char zhao[] U8G_PROGMEM = {0x00,0x00,0xBE,0x3F,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x29,0xBE,0x10,0x22,0x3F,0x22,0x21,0x22,0x21,0x22,0x21,0x3E,0x3F,0x00,0x00,0x12,0x11,0x22,0x22,0x21,0x22,/*"照",1*/};static unsigned char quan[] U8G_PROGMEM = {0x08,0x00,0xC8,0x3F,0x88,0x20,0x88,0x20,0xBF,0x20,0x08,0x11,0x0C,0x11,0x1C,0x11,0x2A,0x0A,0x2A,0x0A,0x09,0x04,0x08,0x04,0x08,0x0A,0x08,0x11,0x88,0x20,0x68,0x40,/*"权",2*/};void button_State()A if(digitalRead(button1){ //检测按钮是否按下 delay(20); //延迟抖动 if(digitalRead(button(1)(//判断长短键 )openState while(digitalRead(button);void draw0(void) { u8g.drawXBMP( 0,0,16,16,16,deng); u8g.drawXBMP( 16,0,16,16,zhao); u8g.drawXBMP( 32,0,16,16,16,quan); u8g.setFont(u8g_font_unifont);// u8g.drawStr( 0,45,"DengZhaoquan:");// u8g.drawStr( 0,12,"190306238"); u8g.setPrintPos u8g.print("h= "); u8g.print(h); u8g.print("%"); u8g.setPrintPos u8g.print("t = "); u8g.print(t); u8g.print(" C");// sensors.requestTemperatures();// TempC = sensors.getTempCByIndex(0); u8g.setPrintPos(0,30); u8g.print("DS18B20:"); u8g.print(TempC); u8g.print(" C"); // leds[1] = CRGB::Red; leds[0]是第一个灯珠,leds[1]第二个灯珠// FastLED.show();;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;LED色彩}void draw1(void) {// u8g.drawXBMP( 0,16,16,16,16deng);// u8g.drawXBMP( 16,16,16,16,16,16zhao);// u8g.drawXBMP( 32,16,16,16,16quan); u8g.setFont(u8g_font_unifont); u8g.drawStr( 0,45,"Numb:"); u8g.setPrintPos(42,45); u8g.print(c );}void draw2(void) {// u8g.drawXBMP( 0,0,128,64,bmp);// u8g.drawXBMP( 16,16,16,16,16,16zhao);// u8g.drawXBMP( 32,16,16,16,16quan); u8g.setFont(u8g_font_unifont);// u8g.drawStr( 0,45,"190306238:"); u8g.setPrintPos(42,45)/ u8g.print(c );}void mode_0(){ u8g.firstPage(); do draw0(); } while( u8g.nextPage() )void mode_1(){ u8g.firstPage(); do draw(); } while( u8g.nextPage() )void mode_2(){ u8g.firstPage(); do draw二、二、二、二while( u8g.nextPage() )void setup() { Serial.begin(115200); pinMode(button1,INPUT); pinMode(12,OUTPUT); digitalWrite(12,HIGH); sensors.begin(); dht.begin(); LEDS.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds,NUM_LEDS); FastLED.setBrightness(max_bright); void loop() { Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC(); Serial.print("*C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");// Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempF(); / Serial.print("*F\tObject = "); Serial.print(mlx.readObjectTempF()); Serial.println("*F"); h = dht.readHumidity(); / Read temperature as Celsius (the default) t = dht.readTemperature(); sensors.requestTemperatures(); TempC = sensors.getTempCByIndex(0); Serial.println();// delay(50); if(TempC >= 30leds[0] = CRGB::Red; FastLED.show(); } else if(TempC <= { leds[0] = CRGB::Green; FastLED.show(); } delay(50); if(h >= { leds[1] = CRGB::Red; FastLED.show(); } else if(h <= 85) { leds[1] = CRGB::Green; FastLED.show(); } button_State(); switch (openState) { case 0:// openState = 0; mode_0(); // break; case 1: mode_1(); // break; case 2: mode_2(); // break; case 3:// mode_3(); // break; default: break; } if(openState == 3) openState = 0; Serial.println(openState);}