|

楼主 |
发表于 2019-8-22 10:48:42
|
显示全部楼层
本帖最后由 wei27311 于 2019-8-22 11:19 编辑
- #include <dht11.h> //DHT11库
- #include "U8g2lib.h" //u8g2lib库
- #define DHT11PIN 2 //定义DHT11输入脚
- U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); //适合0.96寸iic oled屏 SCL A5 SDA A4
- dht11 DHT11; //实例DHT11对象
- //画出左边湿度模拟仪表
- void draw(int value) {
- int cx = 30; //圆心x
- int cy = 32; //圆心y
- int cr = 30; //圆半径
- float angle = value*2.8; //DHT11 湿度量程20-95% 95%时角度为270度 (270/95)≈2.8
- float rad = angle/180*PI; //角度转换为弧度
- float lx = cx+(cr-5)*cos(rad); //计算指针目标x
- float ly = cy+(cr-5)*sin(rad); //计算指针目标y
- u8g2.drawCircle(cx,cy,cr,U8G2_DRAW_LOWER_RIGHT); //画右下1/4圆弧
- u8g2.drawCircle(cx,cy,cr,U8G2_DRAW_LOWER_LEFT); //画左下1/4圆弧
- u8g2.drawCircle(cx,cy,cr,U8G2_DRAW_UPPER_LEFT); //画左上1/4圆弧
- u8g2.drawDisc(cx,cy,3,U8G2_DRAW_ALL);//中心小圆
- //画刻度
- for(float i=0;i<=80;i+=20){
- float v = i*2.8;
- float rad = v/180*PI;
- u8g2.drawLine(cx+(cr-5)*cos(rad),cy+(cr-5)*sin(rad),cx+cr*cos(rad),cy+cr*sin(rad));
- }
- u8g2.drawLine(cx+(cr-5)*cos(4.72),cy+(cr-5)*sin(4.72),cx+cr*cos(4.72),cy+cr*sin(4.72));//由于刻度循环间隔不能画出最大值刻度 所以单独画95刻度
- u8g2.drawLine(cx,cy,lx,ly);//画出指针
- u8g2.setFont(u8g2_font_courR10_tn);//设置字体
- u8g2.setCursor(cx+10, cy-10);//字体显示位置
- u8g2.print(value);//显示湿度
- }
- //画出右边温度模拟仪表
- void draw2(int value) {
- int cx = 95;
- int cy = 32;
- int cr = 30;
- float angle = value*5.4;
- float rad = angle/180*PI;
- float lx = cx+(cr-5)*cos(rad);
- float ly = cy+(cr-5)*sin(rad);
- u8g2.drawCircle(cx,cy,cr,U8G2_DRAW_LOWER_RIGHT);
- u8g2.drawCircle(cx,cy,cr,U8G2_DRAW_LOWER_LEFT);
- u8g2.drawCircle(cx,cy,cr,U8G2_DRAW_UPPER_LEFT);
- u8g2.drawDisc(cx,cy,3,U8G2_DRAW_ALL);//中心小圆
- //画刻度
- for(float i=0;i<=50;i+=10){
- float v = i*5.4;
- float rad = v/180*PI;
- u8g2.drawLine(cx+(cr-5)*cos(rad),cy+(cr-5)*sin(rad),cx+cr*cos(rad),cy+cr*sin(rad));
- }
- u8g2.drawLine(cx,cy,lx,ly);//指针
- u8g2.setFont(u8g2_font_courR10_tn);
- u8g2.setCursor(cx+10, cy-10);
- u8g2.print(value);
- }
- void setup(void) {
- u8g2.begin();
- pinMode(DHT11PIN,OUTPUT);
- }
- void loop(void) {
- int chk = DHT11.read(DHT11PIN); //将读取到的值赋给chk
- int tem=(float)DHT11.temperature; //将温度值赋值给tem
- int hum=(float)DHT11.humidity;
- u8g2.clearBuffer();// clear the internal memory
- draw(hum);
- draw2(tem);
- u8g2.sendBuffer();
- }
复制代码
模拟航空仪表 在小oled中读数最直观 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|