編譯的過程,可能會遇到以下問題:
①提示錯誤

#error("Height incorrect, please fix Adafruit_SSD1306.h!");
錯誤信息意思是指:
高度不正確,請修正Adafruit_SSD1306.h!
進入Arduino安裝文件夾的libraries文件夾的Adfruit_SSD1306-master 找到Adafruit_SSD1306.h

打開此文件,找到第70行左右

默認是定義 SSD1306_128_32 ,由於我們使用的是128*64的OLED,所以,把原來的#define SSD1306_128_32,前面加上//
把#define SSD_128_64 前面的//去掉
最后就如上面圖例一樣
②模塊的IIC 地址問題
模塊的地址修改在這個位置,示例程序的61行

這個模塊地址我用的是這個,但每個模塊可能不一樣,具體請咨詢購買的商家,又或者可以參考下面的,IIC地址搜索程序。
IIC地址搜索程序
接線:
GND--GND(地線)
3.3V/5V--VCC(電源線,5V or 3.3v 電源不同顯示效果有點差別,)
A4--SDA(I2C 數據線)
A5--SCL(I2C 時鍾線)
代碼:
//File Name:ScanI2CAddress.ino
#include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); Serial.println("\nI2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for (address = 1; address < 127; address++ ) { // The i2c_scanner uses the return value of // the Write.endTransmisstion to see if // a device did acknowledge to the address. Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address < 16) Serial.print("0"); Serial.print(address, HEX); Serial.println(" !"); nDevices++; } else if (error == 4) { Serial.print("Unknow error at address 0x"); if (address < 16) Serial.print("0"); Serial.println(address, HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); // wait 5 seconds for next scan }
查看方法:
打開串口查看器,波特率9600.
查看到的0x**即為接口通訊地址.
用uno的要注意,SDA接A4端口和SCL接A5端口是接的AREF區域的接口,不要誤會認為是接4和5號這兩個IO口,這是錯誤的連接,應該是直接接板上analog in區域的A4和A5口,不要接錯了。不過部分國產Uno開發板(!貌似還是有bug)或其它型號的開發板上直接就有標着有SDA、SCL的兩個口,直接對標號連接即可。
為什么使用I2C接口?因為省IO口啊,只需要4條線。
接線圖

在上代碼之前,先下載兩個庫分別是
Adafruit SSD1306 Library:
https://github.com/adafruit/Adafruit_SSD1306
Adafruit GFX Library:
https://github.com/adafruit/Adafruit-GFX-Library
下載后把解壓的文件放在 Arduino 安裝目錄里的 "libraries"
調出示例程序

