* AM2321的取温度间隔得大于2s,否则,i2c会不工作了 * SimpleTimer有个bug,会导致两次快速的读温度,现在读温度函数里加了保护 * Blynk有个bug,会导致无法把数据传到服务器 * 现在可以正常工作了

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers oled.cpp Source File

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_