刚刚在驱动ssd1306的0.96的oled屏幕时出现了,程序预料之外的内容(Adafruit的logo)如下:
分析问题应该是缓存没有清除(以前的程序有显示Adafruit的Logo的代码),但当时有在显示后调用清除缓存函数,导致一直不知道问题出在哪里,问题代码如下:
void setup() { Serial.begin(115200); //WiFi.disconnect(); //断开可能存在的连接 /*int WiFiClass::begin(char* ssid, const char *passphrase) * ssid: wifi名称 * passphrase:wifi密码 *定义于WiFi.cpp */ //WiFi.begin(ssid,passphrase); for(int i=0 ;i<4;i++) { MySSD1306ShowString(31,0,"WiFi connecting."); delay(500); MySSD1306ShowString(31,0,"WiFi connecting.."); delay(500); MySSD1306ShowString(31,0,"WiFi connecting..."); delay(500); display.clearDisplay(); } }
最后经过不断调试代码发现问题出在 display.clearDisplay()函数的位置,display.clearDisplay()清除缓存应在每次显示之前被执行。修改代码如下将display.clearDisplay()放在了MySSD1306ShowString()函数中。
void MySSD1306ShowString(int x,int y,const char* str){ if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADRESS)) { Serial.println(F("SSD1306 allocation failed")); for(;;); // Don't proceed, loop forever } display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(0,0); //显示起点 if((x>127)||(y>55)) //字体大小选择为1时 宽度为6 高度为8 { display.println("enter Pixel err!"); display.display(); //显示 } display.println(str); display.display(); //显示 } const char* ssid = "TP-LINK_FF9B"; //WiFi名称 const char* passphrase = "asd31415926"; //WiFi密码 void setup() { Serial.begin(115200); //WiFi.disconnect(); //断开可能存在的连接 /*int WiFiClass::begin(char* ssid, const char *passphrase) * ssid: wifi名称 * passphrase:wifi密码 *定义于WiFi.cpp */ //WiFi.begin(ssid,passphrase); for(int i=0 ;i<4;i++) { MySSD1306ShowString(31,0,"WiFi connecting."); delay(500); MySSD1306ShowString(31,0,"WiFi connecting.."); delay(500); MySSD1306ShowString(31,0,"WiFi connecting..."); delay(500); } }
问题解决。