用arduino和OLED制作火柴人奔跑動(dòng)畫(huà)
2.為動(dòng)畫(huà)創(chuàng)建位圖
這可能是最耗時(shí)的步驟。你必須創(chuàng)建一組框架,這將適合128×32格式。您可以嘗試從任何拖鞋剪貼片中創(chuàng)建它們,您可以在網(wǎng)上找到。
所有的框架需要是黑白的!!!
我創(chuàng)造了顯示奔跑生物的幀,一共八張
3.連接
OLED | arduino |
GND | GND |
VCC | VCC |
SDA | A4 |
SCK | A5 |
OLED 顯示屏有四個(gè)引腳,分別是:
1.SDA(數(shù)據(jù)線) SCK(時(shí)鐘線) VDD(3.3V) GND
2.在UNO開(kāi)發(fā)板上I2C接口,SDA對(duì)應(yīng)D4,SCK對(duì)應(yīng)D5
3.在MEGA2560開(kāi)發(fā)板上I2C接口,SDA對(duì)應(yīng)D20, SCL對(duì)應(yīng)D21
4.創(chuàng)建位圖的代碼表示
①使用在線取模軟件
要?jiǎng)?chuàng)建位圖的代碼表示,我們將使用在線工具
你可以找到它去下面的網(wǎng)址
https://javl.github.io/image2cpp/
②執(zhí)行以下步驟:
- 在Select Image(選擇圖像)部分,逐個(gè)打開(kāi)幀文件
- 通過(guò)檢查圖像設(shè)置部分檢查上傳的Image Settings(圖像)是否正確
- 如果想要具有黑色背景,并且只點(diǎn)亮線像素,請(qǐng)檢查倒置圖像顏色,在Background選擇Black
- 在Output(輸出部分)在Code output format(代碼輸出格式)中指定"Arduino code ,single Bitmap"在Identifier/Prefix(標(biāo)識(shí)符/前綴)中提供動(dòng)畫(huà)名稱(chēng),必須要英文按Generate code(生成按鈕)保存生成的代碼。它將被粘貼到arduino編譯器
4.創(chuàng)建動(dòng)畫(huà)代碼
①首先,我們需要引用所需的頭文件
#include <Wire.h>#include <Adafruit_GFX.h>#include <Adafruit_SSD1306.h>
前一個(gè)用于 I2C 接口,其他兩個(gè)用于與 OLED 顯示器配合工作
②我們需要定義顯示屏的大小
#define SCREEN_WIDTH 128 // OLED 顯示寬度128 in pixels#define SCREEN_HEIGHT 64 // OLED 顯示高度64 in pixels
③引用函數(shù)庫(kù),里面有宣布通過(guò) OLED 顯示連接的引腳。有了這些別針,我們宣布顯示器本身
#define OLED_RESET 4Adafruit_SSD1306 display(OLED_RESET);
然后,您必須復(fù)制粘貼我們從Image2cpp 中獲得的代碼
④這是一個(gè)相當(dāng)長(zhǎng)的代碼,所以我不會(huì)粘貼在這里的全部。我只顯示一幀
static const unsigned char Frame1 [] PROGMEM = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x83, 0x80, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x03, 0x0c, 0x40, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe1, 0x0c, 0x60, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x1f, 0xff, 0x80, 0x20, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x01, 0xf9, 0xe0, 0x20, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0xcc, 0x78, 0x60, 0x00, 0x00, 0x03, 0xe7, 0x80, 0x00, 0x00, 0x64, 0x1f, 0xc0, 0x00, 0x00, 0x0e, 0xff, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x0e, 0x00, 0x00, 0x00, 0x33, 0xf0, 0x00, 0x00, 0x00, 0x30, 0xf8, 0x00, 0x00, 0x00, 0x18, 0x1f, 0xf0, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x86, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
然后,在設(shè)置功能中,我們正在初始化 OLED 顯示屏
void setup() {Serial.begin(9600);delay(500);// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)}
然后,我們有循環(huán)功能,我們重播所有10幀在50ms間隔
void loop() {// Diplay Animation// Frame1display.clearDisplay();display.drawBitmap(30,0,RUN1, 80, 32, 1);display.display();delay(50);// Frame2display.clearDisplay();display.drawBitmap(30,0,RUN2, 80, 32, 1);display.display();delay(50);// Frame3display.clearDisplay();display.drawBitmap(30,0,RUN3, 80, 32, 1);display.display();delay(50);// Frame4display.clearDisplay();display.drawBitmap(30,0,RUN4, 80, 32, 1);display.display();delay(50);// Frame5display.clearDisplay();display.drawBitmap(30,0,RUN5, 80, 32, 1);display.display();delay(50);// Frame6display.clearDisplay();display.drawBitmap(30,0,RUN6, 80, 32, 1);display.display();delay(50);// Frame7display.clearDisplay();display.drawBitmap(30,0,RUN7, 80, 32, 1);display.display();delay(50);// Frame8display.clearDisplay();display.drawBitmap(30,0,RUN8, 80, 32, 1);display.display();delay(50);// Frame9display.clearDisplay();display.drawBitmap(30,0,RUN9, 80, 32, 1);display.display();delay(50); // Frame10display.clearDisplay();display.drawBitmap(30,0,RUN10, 80, 32, 1);display.display();delay(50);
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。