Grove Beginner Kit For Arduino(以下、Beginner Kit)検証報告の9番目です。前回の記事はこちらです。
hirocom777.hatenadiary.org
図形の表示
前回はOLED ディスプレイで文字の表示をしてみました。でも、OLED ディスプレイは図形の表示も出来るのです。って言うか、こちらの方が本命の機能です。今回は、こちらをご紹介します。ライブラリは前回インストールしたものを使用します。以下にスケッチ例をご紹介します。
#include <U8g2lib.h> U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R2, /* reset=*/U8X8_PIN_NONE); void setup() { u8g2.begin(); u8g2.setFlipMode(0); } void loop() { for (int i = 0; i <= 7; i++) { u8g2.firstPage(); do { if (i == 0) {//線を描く u8g2.drawLine(20, 5, 120, 50); } else if (i == 1) {//四角形を描く u8g2.drawFrame(50, 7, 42, 55); } else if (i == 2) {//四角形を描く(塗りつぶし) u8g2.drawBox(30, 2, 25, 50); } else if (i == 3) {//円を描く u8g2.drawCircle(50, 30, 30, U8G2_DRAW_ALL); } else if (i == 4) {//三角形を描く(塗りつぶし) u8g2.drawTriangle(20, 5, 27, 50,120, 25); } else if (i == 5) {//四角形を描く(角丸) u8g2.drawRFrame(3, 7, 110, 25, 3); } else if (i == 6) {//四角形を描く(角丸、塗りつぶし) u8g2.drawRBox(3, 7, 100, 50, 5); } else if (i == 7) {//楕円を描く u8g2.drawEllipse(20, 25, 15, 10, U8G2_DRAW_ALL); } } while (u8g2.nextPage()); delay(1000); } }
いろいろな図形がかわるがわる描画されると思います。
スケッチの解説
図形を表示するには、スケッチの先頭に#include <U8g2lib.h>を記述します。文字表示の時とは違いますが、使用するライブラリファイルは同じです。そして、このライブラリも複数のOLED ディスプレイと接続方法に対応しています。そこで、以下の記述があります。
U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R2, /* reset=*/U8X8_PIN_NONE);
ここでも選択されているOLED ディスプレイはSSD1306という型名です。Beginner KitのOLED ディスプレイSSD1315とコンパチってことですね。
お次はsetup()の中身です。
・u8g2.begin()
使用を開始する時に最初に宣言します。
・u8g2.setFlipMode()
表示を180度反転させます。かっこの中に0を指定すると無効。1を指定すると有効になります。今回は反転指定していません。
続いてloop()の中身です。
・u8g2.firstPage()とu8g2.nextPage()
ここが一番のポイントです。u8g2で図形を描画する場合は以下の手順を取ります。
u8g2.firstPage(); ← 描画開始
do {
//描画内容
} while (u8g2.nextPage()); ← 描画が終了するまでループを繰り返す
8g2.firstPage()とu8g2.nextPage()は対で上記の様に使用します。ループの中に描画内容を記述します。描画する図形は表示位置、サイズを座標で指定するのですが、座標系は以下の様になります。
この座標系で図形を描いていきます。
・u8g2.drawLine()
2点間の線を描画します。
u8g2.drawLine(座標X1,座標Y1,座標X2,座標Y2)
・u8g2.drawFrame()
左上の座標を起点に四角形を描画します。
u8g2.drawFrame(座標X,座標Y,幅,高さ)
・u8g2.drawBox()
左上の座標を起点に四角形(塗りつぶし)を描画します。
u8g2.drawFrame(座標X,座標Y,幅,高さ);
・u8g2.drawCircle()
円を描画します。
u8g2.drawCircle(中心座標X,中心座標Y,半径,描画方法);
・u8g2.drawCircle()
三角形を描画します(塗りつぶし)
u8g2.drawTriangle(座標X1,座標Y1座標X1,座標Y1,座標X2,座標Y2,座標X3,座標Y3)
・u8g2.drawRFrame()
四角形(角丸)を描画します
u8g2.drawRFrame(座標X,座標Y,幅,高さ,角半径)
・u8g2.drawRFrame()
四角形(角丸、塗りつぶし)を描画します
u8g2.drawRBox(座標X,座標Y,幅,高さ,角半径)
・u8g2.drawEllipse()
楕円を描画します
u8g2.drawEllipse(中心座標X,中心座標Y,横半径,縦半径,描画方法)
円と楕円の描画方法は以下から指定します
U8G2_DRAW_UPPER_RIGHT - 右上部分を描画
U8G2_DRAW_UPPER_LEFT - 左上部分を描画
U8G2_DRAW_LOWER_LEFT - 左下部分を描画
U8G2_DRAW_LOWER_RIGHT - 右下部分を描画
U8G2_DRAW_ALL -全円を描画
他にもあるのですが、上記を抑えておけば一通りのことはできると思います。
表示がにぎやかになった!!
いかがでしょうか。表示できる内容が増えて、楽しくなってきましたね。さて、次回は図形と一緒に文字も表示します。お楽しみに!!
hirocom777.hatenadiary.org