剛剛在驅動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);
}
}
問題解決。
