编译的过程,可能会遇到以下问题:
①提示错误
#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"
调出示例程序