刚刚在驱动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);
}
}
问题解决。
