ADP-Corvette-T1开发板兼容Arduino开发环境,完成基础的测试后,就想着点个屏幕玩玩。
通过官方的资料了解到,官方有一个扩展板:
这个上面,使用的是LCD1602A显示屏。
去网上查看了一下资料,发现这是一款老掉牙的使用牛屎封装的LCD显示屏:
另外,详细了解了一下官方的资料,看到硬件上也提供了I2C接口,查看官方资料,可以了解接口的详情:
我手头也有SSD1306 OLED,支持I2C和SPI的都有,这次刚好拿I2C版本的进行实测。
按照官方的资料和SSD1306 OLED的资料,按照如下方式连线:
实物连线如下:
然后,打开Arduino,找OLED的库,进行编程。
测试了好几个之前用过的OLED库,都无法支持这块开发板。
最终,找到了:GyverOLED,顺利使用。
在Arduino,搜索安装即可:
我把演示的代码,做了中文版本的注释,详细如下:
#include <GyverOLED.h>
GyverOLED<SSD1306_128x64, OLED_BUFFER> oled;
const uint8_t bitmap_32x32[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xE0, 0xF0, 0x70, 0x70, 0x30, 0x30, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF0, 0x70, 0x30, 0x30, 0x20, 0x00, 0x00,
0x00, 0x30, 0x78, 0xFC, 0x7F, 0x3F, 0x0F, 0x0F, 0x1F, 0x3C, 0x78, 0xF0, 0xE0, 0xC0, 0x80, 0x80, 0x80, 0x40, 0xE0, 0xF0, 0xF8, 0xFC, 0xFF, 0x7F, 0x33, 0x13, 0x1E, 0x1C, 0x1C, 0x0E, 0x07, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF9, 0xF7, 0xEF, 0x5F, 0x3F, 0x7F, 0xFE, 0xFD, 0xFB, 0xF1, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x1E, 0x33, 0x33, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x1F, 0x0E, 0x04, 0x00, 0x00, 0x00, 0x00,
};
void setup() {
Serial.begin(9600);
randomSeed(analogRead(A0));
oled.init();
oled.clear();
oled.update();
oled.home();
oled.print("Hello!");
oled.update();
delay(2000);
oled.setCursor(5, 1);
oled.setScale(2);
oled.print("Hello!");
oled.update();
delay(2000);
oled.setCursorXY(15, 30);
oled.setScale(3);
oled.invertText(true);
oled.print("Hello!");
oled.update();
delay(2000);
oled.clear();
oled.home();
oled.setScale(1);
oled.invertText(false);
oled.autoPrintln(true);
oled.print(F("Happy Rain on a Spring Night. (Du Fu) Good rain knows its time right; It will fall when comes spring. With wind it steals in night; Mute, it moistens each thing."));
oled.update();
delay(2000);
oled.home();
oled.textMode(BUF_ADD);
oled.home();
oled.setScale(3);
oled.print("OK!");
oled.update();
delay(2000);
oled.clear();
oled.dot(0, 0);
oled.dot(0, 1, 1);
oled.line(5, 5, 10, 10);
oled.fastLineH(0, 5, 10);
oled.fastLineV(0, 5, 10);
oled.rect(20, 20, 30, 25);
oled.rect(5, 35, 35, 60, OLED_STROKE);
oled.roundRect(50, 5, 80, 25, OLED_STROKE);
oled.circle(60, 45, 15, OLED_STROKE);
oled.circle(60, 45, 5, OLED_FILL);
oled.drawBitmap(90, 16, bitmap_32x32, 32, 32, BITMAP_NORMAL, BUF_ADD);
oled.update();
delay(3000);
}
void loop() {
int x = random(0,128-32);
int y = random(0,64-32);
oled.clear();
oled.drawBitmap(x, y, bitmap_32x32, 32, 32, BITMAP_NORMAL, BUF_ADD);
oled.update();
delay(1000);
}
上述代码中的注释,非常详细,所以我也就不用再单独解释了。
实际跑起来,效果非常的不错,而且使用硬件I2C,刷新速度也有保障。