* AM2321的取温度间隔得大于2s,否则,i2c会不工作了 * SimpleTimer有个bug,会导致两次快速的读温度,现在读温度函数里加了保护 * Blynk有个bug,会导致无法把数据传到服务器 * 现在可以正常工作了
oled.cpp
00001 #ifndef OLED_CPP_ 00002 #define OLED_CPP_ 00003 #include "mbed.h" 00004 #include "oled.h" 00005 00006 //I2C g_i2c(P0_11, P0_10);//SDA, SCL 00007 extern I2C g_i2c; 00008 //Adafruit_SSD1306_I2c adaf(g_i2c, P0_13, 0x78, 64, 128); 00009 00010 //U8GLIB_SSD1306_MICRODUINO_128X64 u8g(U8G_I2C_OPT_NONE); //设置OLED型号 00011 //-------字体设置,大、中、小 00012 #if 0 00013 #define setFont_L u8g.setFont(u8g_font_7x13) 00014 #define setFont_M u8g.setFont(u8g_font_fixed_v0r) 00015 #define setFont_S u8g.setFont(u8g_font_chikitar) 00016 #elif 0 00017 #define setFont_L adaf.setTextSize(14) 00018 #define setFont_M adaf.setTextSize(10) 00019 #define setFont_S adaf.setTextSize(6) 00020 #else 00021 #define setFont_L 00022 #define setFont_M 00023 #define setFont_S 00024 #endif 00025 00026 //温度计图案 00027 unsigned char bmp_tem[] = { 00028 0xE0,0x81,0x30,0x83,0x10,0x82,0x10,0x82,0x10,0xFA,0x10,0x82, 00029 0x10,0x82,0x10,0xFA,0x10,0x82,0xD0,0x82,0xD0,0xFA,0xD0,0x82, 00030 0xD0,0x82,0xD0,0xFA,0xD0,0x82,0xD0,0x82,0xD0,0xFA,0xD0,0x82, 00031 0xD0,0x82,0xD8,0x86,0xC4,0x88,0xF2,0x93,0xFB,0xB7,0xF9,0xA7, 00032 0xFD,0xAF,0xFD,0xAF,0xF9,0xA7,0xFA,0x97,0xF2,0x93,0xC4,0x88, 00033 0x18,0x86,0xF0,0x83 00034 }; 00035 00036 //水滴图案 00037 unsigned char bmp_hum[] = { 00038 0x00,0x00,0x01,0x00,0x00,0x01,0x00,0x80,0x03,0x08,0x80,0x03,0x18,0x80,0x07,0x1C, 00039 0xC0,0x07,0x3C,0xC0,0x07,0x3E,0xE0,0x0F,0x3E,0xE0,0x0F,0x7A,0xF0,0x1F,0x7B,0xF8, 00040 0x1F,0x72,0xF8,0x1F,0x3E,0xF8,0x3F,0x1C,0xFC,0x3F,0x00,0xFC,0x7F,0x00,0xFE,0x7F, 00041 0x00,0xFE,0x7F,0x00,0xFE,0x7F,0x00,0xFF,0xFF,0x00,0xFF,0xFF,0x00,0xFF,0xFF,0x00, 00042 0xF3,0xFF,0x00,0xF2,0x7F,0x00,0xE6,0x7F,0x00,0xC6,0x7F,0x00,0x0E,0x3F,0x00,0x3C, 00043 0x1E,0x00,0xF8,0x1F,0x00,0xE0,0x07,0x00,0x80,0x01 00044 }; 00045 00046 void oled_init(Adafruit_SSD1306_I2c &adaf) 00047 { 00048 adaf.setTextColor(1, 0); 00049 //adaf.setTextColor(0, 1); 00050 adaf.setTextSize(1); 00051 } 00052 00053 #if 0 00054 void oled(float temp, float humi, float light, float pm25, float etoh) 00055 //void oled(U8GLIB &u8g, float temp, float humi, float light, float pm25, float etoh) 00056 { 00057 //gpio_write(&g_LED, 1); 00058 u8g.firstPage(); 00059 do { 00060 u8g.setDefaultForegroundColor(); 00061 00062 u8g.drawXBMP( 4, 1, 15, 32, bmp_tem); 00063 u8g.drawXBMP( 70, 2, 24, 30, bmp_hum); 00064 00065 setFont_M; //设置字体为大 00066 u8g.setPrintPos(20, 16); //设置文字开始坐标 00067 u8g.print("`C "); 00068 setFont_L; //设置字体为大 00069 u8g.setPrintPos(20, 32); //设置文字开始坐标 00070 u8g.print(temp , 1); //温度 00071 00072 u8g.setPrintPos(100, 16); //设置文字开始坐标 00073 u8g.print("%"); 00074 setFont_L; //设置字体为大 00075 u8g.setPrintPos(100, 32); //设置文字开始坐标 00076 u8g.print(humi , 0); //湿度 00077 00078 setFont_L; //设置字体 00079 u8g.setPrintPos(4, 49); //设置文字开始坐标 00080 u8g.print(light , 0); //光照强度 00081 setFont_M; //设置字体 00082 u8g.print(" Lux"); 00083 00084 setFont_L; //设置字体 00085 u8g.setPrintPos(4, 63); //设置文字开始坐标 00086 u8g.print(pm25 , 0); //光照强度 00087 setFont_M; //设置字体 00088 u8g.print(" ug/m3"); 00089 00090 00091 setFont_L; //设置字体 00092 u8g.setPrintPos(80, 49); //设置文字开始坐标 00093 u8g.print(etoh , 0); //光照强度 00094 setFont_M; //设置字体 00095 u8g.print(" ppm"); 00096 00097 // setFont_M; //设置字体为大 00098 // u8g.setPrintPos(80, 63); //设置文字开始坐标 00099 // u8g.print(" LED:"); 00100 00101 } while( u8g.nextPage() ); 00102 //gpio_write(&g_LED, 0); 00103 } 00104 #elif 1 00105 void oled(Adafruit_SSD1306_I2c &adaf, float temp, float humi, float light, float pm25, float etoh) 00106 { 00107 adaf.clearDisplay(); 00108 00109 //adaf.drawBitmap(4, 1, bmp_tem, 15, 32, WHITE); 00110 //adaf.drawBitmap(70, 2, bmp_hum, 24, 30, WHITE); 00111 00112 //temp = 32.2; 00113 adaf.setTextCursor(0, 5); //设置文字开始坐标 00114 adaf.printf("Temp:%.1f'C", temp); 00115 00116 //light = 210.0; 00117 adaf.setTextCursor(74, 5); //设置文字开始坐标 00118 adaf.printf("%.1fLux", light); //光照强度 00119 00120 //humi = 90.6; 00121 adaf.setTextCursor(0, 30); //设置文字开始坐标 00122 adaf.printf("Humi:%.1f%%", humi); 00123 00124 //pm25 = 9.7; 00125 adaf.printf(" %.1fug/m3", pm25); //PM2.5 00126 00127 //etoh = 2.6; 00128 adaf.setTextCursor(1, 52); //设置文字开始坐标 00129 adaf.printf("%.1f ppm", etoh); //甲醛 00130 00131 adaf.drawFastVLine(69, 0, 63, WHITE); 00132 00133 adaf.display(); 00134 } 00135 #else 00136 void oled(float temp, float humi, float light, float pm25, float etoh) 00137 { 00138 static int16_t x = 0; 00139 static int16_t y = 0; 00140 adaf.clearDisplay(); 00141 //adaf.setTextColor(0, 1); 00142 adaf.setTextCursor(x, y); 00143 adaf.printf("Lux\r\n"); 00144 adaf.display(); 00145 x += 2; 00146 if (x > 128) { 00147 x = 0; 00148 y += 2; 00149 if (y > 64) { 00150 y = 0; 00151 } 00152 } 00153 } 00154 #endif 00155 #endif //OLED_CPP_
Generated on Tue Jul 12 2022 13:01:30 by 1.7.2