OLEDにArduinoで顔文字を表示させてみた! [Arduino]
前回ダウンロードしてきた LcdAssistant を使って OLED に顔文字を表示させてみたいと思います。
最初にビットマップを作成します。Windows付属のペイントツールを使って顔文字画像を作成しました。画素数は128x64ピクセルです。作った画像はモノクロビットマップで保存します。
LCDAssistant を立ち上げて、作成したビットマップを読み込みます。
読み込んだらそのままセーブします。ファイル名は nyaha.txt でも nyaha.cpp でも何でもかまいません。私はVIに読み込ませるために、nyaha.cpp で保存しました。
このテーブルをそのままArduinoのスケッチに取り込みました。
実際に動かしてみました!
おお~、あっけなく動きました。あとはどう発展させようかなぁ・・・。
σ(´ーωー`)
最初にビットマップを作成します。Windows付属のペイントツールを使って顔文字画像を作成しました。画素数は128x64ピクセルです。作った画像はモノクロビットマップで保存します。
LCDAssistant を立ち上げて、作成したビットマップを読み込みます。
読み込んだらそのままセーブします。ファイル名は nyaha.txt でも nyaha.cpp でも何でもかまいません。私はVIに読み込ませるために、nyaha.cpp で保存しました。
このテーブルをそのままArduinoのスケッチに取り込みました。
#include <Wire.h> const int OLED_ADDR = 0x3C; const int RESET_pin = 8; void WriteCommand(byte cmd) { Wire.write(0x80); Wire.write(cmd); } void resetOLED() { digitalWrite(RESET_pin, HIGH); delay(1); digitalWrite(RESET_pin, LOW); delay(2); // reset 2msec digitalWrite(RESET_pin, HIGH); } void initOLED() { Wire.beginTransmission(OLED_ADDR); WriteCommand(0xAE); // Set Display Off WriteCommand(0xD5); // display divide ratio/osc. freq. mode WriteCommand(0x00); WriteCommand(0xA8); WriteCommand(0x3F); // Multiplex ratio mode WriteCommand(0xD3); // Set Display Offset WriteCommand(0x00); WriteCommand(0x40); // Set Display Start Line WriteCommand(0x8D); // Set Display Offset WriteCommand(0x14); WriteCommand(0xA0); // Segment Remap WriteCommand(0xC8); // Set COM Output Scan Direction WriteCommand(0xDA); // Common pads hardware: alternative WriteCommand(0x12); Wire.endTransmission(); // Wire library is limited to the transmission up to 32bytes // That's why the init sequence is apart. Wire.beginTransmission(OLED_ADDR); WriteCommand(0x81); // contrast control WriteCommand(0x7F); WriteCommand(0xD9); // Set pre-charge period WriteCommand(0xF1); WriteCommand(0xDB); // VCOM deselect level mode WriteCommand(0x40); // set Vvcomh = 0.83*Vcc WriteCommand(0xA4); // Set Entire Display On/Off WriteCommand(0xA6); // Set Normal Display WriteCommand(0xAF); // Set Display On Wire.endTransmission(); } void clearScreen() { int i,j, k; for (i = 0; i < 8; ++i) { Wire.beginTransmission(OLED_ADDR); WriteCommand(0xB0 + i); WriteCommand(0x10); WriteCommand(0x00); Wire.endTransmission(); for (j = 0; j < 8; ++j) { Wire.beginTransmission(OLED_ADDR); Wire.write(0x40); for (k = 0; k < 16; ++k) { Wire.write(0x00); } Wire.endTransmission(); } } } //------------------------------------------------------------------------------ // File generated by LCD Assistant // http://en.radzio.dxp.pl/bitmap_converter/ //------------------------------------------------------------------------------ const unsigned char nyaha [] = { // ここに作成したデータをコピーします。長いので省略。悪しからず・・・。 }; void drawNyaha() { int i,j,k,n; for (i = 0; i < 8; ++i) { Wire.beginTransmission(OLED_ADDR); WriteCommand(0xB0 + i); WriteCommand(0x10); WriteCommand(0x00); Wire.endTransmission(); // Need to consider the Wire library limitation of sending data up to 32 bytes. for (j = 0; j < 8; ++j) { Wire.beginTransmission(OLED_ADDR); Wire.write(0x40); for (k = 0; k < 16; ++k) { n = i*128+j*16+k; Wire.write(nyaha[n]); } Wire.endTransmission(); } } } void setup() { pinMode(RESET_pin, OUTPUT); Wire.begin(); Serial.begin(115200); Serial.println("Reset OLED"); resetOLED(); Serial.println("\nInit OLED"); initOLED(); clearScreen(); delay(2); drawNyaha(); } void loop() { // do nothing }
実際に動かしてみました!
おお~、あっけなく動きました。あとはどう発展させようかなぁ・・・。
σ(´ーωー`)
ディアイワイモール (DIYmall) iic i2c OLEDモジュール ディスプレイ 0.96インチ 51マイクロコントローラ12864 for Arduino (ホワイト)
- 出版社/メーカー: Flyfun
- メディア: おもちゃ&ホビー
EasyWordMall SPI OLEDモジュール ディスプレイ 0.96インチ ブルー&イエロー51マイクロコントローラ12864 for Arduino
- 出版社/メーカー: Apple Trees E-commerce co., LT
- メディア: その他
DIYMALL 0.95インチOLEDディスプレイモジュール 65kカラー 三原色 SSD1331 for Arduino
- 出版社/メーカー: DIYmall
- メディア:
コメント 0