【M5Stack】M5StickCのスケッチ例Display:M5.Lcd.drawRect、M5.Lcd.fillRect、Lcd.drawCircle、M5.Lcd.fillCircle、M5.Lcd.drawTriangle、M5.Lcd.fillTriangle、M5.Lcd.drawLine、M5.Lcd.drawFastVLine、M5.Lcd.drawFastHLine、M5.Lcd.drawPixel

  • URLをコピーしました!
目次

M5StickC

前回、M5StickCのスケッチ例TFT_Print_Testで出てきたM5.Lcd.print、M5.Lcd.println、M5.Lcd.printf、M5.Lcd.drawString、M5.Lcd.drawCentreString、M5.Lcd.drawRightStringを勉強してみました。

今回は新しいスケッチ例Displayをみて、図形の描写に関して勉強していきましょう。

場所は「ファイル > スケッチ例 > M5StickC > Basic > Display」です。

それでは始めていきましょう。

プログラム全体

まずはプログラム全体を見ていきましょう。

/*
*******************************************************************************
* Copyright (c) 2021 by M5Stack
*                  Equipped with M5StickC sample source code
*                          配套  M5StickC 示例源代码
* Visit the website for more information:https://docs.m5stack.com/en/core/m5stickc
* 获取更多资料请访问:https://docs.m5stack.com/zh_CN/core/m5stickc
*
* describe: Display.
* date:2021/9/3
*******************************************************************************
*/
#include <M5StickC.h>

/* After M5StickC is started or reset
  the program in the setUp () function will be run, and this part will only be run once.
  在 M5StickC 启动或者复位后,即会开始执行setup()函数中的程序,该部分只会执行一次。 */
void setup() {
  M5.begin();
  // Lcd display
  M5.Lcd.fillScreen(WHITE);
  delay(500);
  M5.Lcd.fillScreen(RED);
  delay(500);
  M5.Lcd.fillScreen(GREEN);
  delay(500);
  M5.Lcd.fillScreen(BLUE);
  delay(500);
  M5.Lcd.fillScreen(BLACK);
  delay(500);

  // text print.  文字打印
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setCursor(0, 10);
  M5.Lcd.setTextColor(WHITE);
  M5.Lcd.setTextSize(1);
  M5.Lcd.printf("Display Test!");

  // draw graphic.  绘图🌹
  delay(1000);
  M5.Lcd.drawRect(15, 55, 50, 50, BLUE);
  delay(1000);
  M5.Lcd.fillRect(15, 55, 50, 50, BLUE);
  delay(1000);
  M5.Lcd.drawCircle(40, 80, 30, RED);
  delay(1000);
  M5.Lcd.fillCircle(40, 80, 30, RED);
  delay(1000);
}

/* After the program in setup() runs, it runs the program in loop()
The loop() function is an infinite loop in which the program runs repeatedly
在setup()函数中的程序执行完后,会接着执行loop()函数中的程序
loop()函数是一个死循环,其中的程序会不断的重复运行 */
void loop(){
  //rand draw
  M5.Lcd.fillTriangle(random(M5.Lcd.width()-1), random(M5.Lcd.height()-1), random(M5.Lcd.width()-1), random(M5.Lcd.height()-1), random(M5.Lcd.width()-1), random(M5.Lcd.height()-1), random(0xfffe));
}

次のコマンドに関してはもう既に前に勉強しているので今回解説は省きます。

  • M5.begin()
  • M5.Lcd.fillScreen(色)
  • delay(ミリ秒)
  • M5.Lcd.setCursor(X, Y)
  • M5.Lcd.setTextColor(色)
  • M5.Lcd.setTextSize(int)
  • M5.Lcd.printf(“文字列”)

ちなみにプログラムをM5StickCに書き込むとこんな感じになります。

M5.Lcd.drawRect、M5.Lcd.fillRect

M5.Lcd.drawRect、M5.Lcd.fillRectはどちらも四角形を描写するコマンドですが、M5.Lcd.drawRectは枠だけ、M5.Lcd.fillRectは中を塗りつぶした四角形です。

ちなみにRectは英語での四角形「Rectangle」の略のようです。

図形の形の指定方法はM5.Lcd.drawRect(左の座標, 上の座標, 幅, 高さ, 色)で、M5.Lcd.fillRectも同じ指定方法です。

ということでこんなプログラムで試してみました。

#include <M5StickC.h>

void setup() {
  M5.begin();
  M5.Lcd.fillScreen(BLACK);
  
  M5.Lcd.drawRect(10, 10, 50, 50, BLUE);
  M5.Lcd.fillRect(10, 70, 50, 50, BLUE);

}

void loop() {
}

M5.Lcd.drawCircle、M5.Lcd.fillCircle

M5.Lcd.drawCircle、M5.Lcd.fillCircleはどちらも円形を描写するコマンドですが、先ほどのM5.Lcd.drawRect、M5.Lcd.fillRectと同様、M5.Lcd.drawCircleは枠だけ、M5.Lcd.fillCircleは塗りつぶしの円形を描写します。

円の形の指定方法はM5.Lcd.drawCircle(中心のX座標, 中心のY座標, 半径, 色)で、M5.Lcd.fillCircleも同様です。

#include <M5StickC.h>

void setup() {
  M5.begin();
  M5.Lcd.fillScreen(BLACK);
  
  M5.Lcd.drawCircle(40, 40, 25, RED);
  M5.Lcd.fillCircle(40, 100, 25, RED);

}

void loop() {
}

M5.Lcd.drawTriangle、M5.Lcd.fillTriangle

M5.Lcd.drawTriangle、M5.Lcd.fillTriangleは三角形を描写するコマンドで、やはりM5.Lcd.drawTriangleは枠だけの三角形、M5.Lcd.fillTriangleは塗りつぶした三角形を描写します。

スケッチ例DisplayにはM5.Lcd.drawTriangleはありませんでしたが、ついでにということで。

三角形の指定方法はM5.Lcd.drawTriangle(X1, Y1, X2, Y2, X3, Y4, 色)で、M5.Lcd.fillTriangleも同様です。

#include <M5StickC.h>

void setup() {
  M5.begin();
  M5.Lcd.fillScreen(BLACK);
  
  M5.Lcd.drawTriangle(40, 10, 10, 60, 70, 60, GREEN);
  M5.Lcd.fillTriangle(40, 100, 10, 150, 70, 150, GREEN);

}

void loop() {
}

ここから先はスケッチ例Displayに載っていませんが、同じく図形ということで一緒に紹介しておきます。

M5.Lcd.drawLine

M5.Lcd.drawLineは線を描写するコマンドの一つで、M5.Lcd.drawLine(X1, Y1, X2, Y2, 色)で線を指定します。

#include <M5StickC.h>

void setup() {
  M5.begin();
  M5.Lcd.fillScreen(BLACK);
  
  M5.Lcd.drawLine(10, 10, 70, 150, WHITE);

}

void loop() {
}

M5.Lcd.drawFastVLine、M5.Lcd.drawFastHLine

M5.Lcd.drawFastVLine、M5.Lcd.drawFastHLineも線を描写するコマンドですが、M5.Lcd.drawFastVLineは縦(Vertical)に並行な線、M5.Lcd.drawFastHLineは横(Horizontal)に並行な線を描写します。

線の指定方法はM5.Lcd.drawFastVLine(X, Y, 長さ, 色)で、M5.Lcd.drawFastHLineも同様です。

#include <M5StickC.h>

void setup() {
  M5.begin();
  M5.Lcd.fillScreen(BLACK);
  
  M5.Lcd.drawFastVLine(10, 10, 150, YELLOW);
  M5.Lcd.drawFastHLine(10, 60, 50, YELLOW);

}

void loop() {
}

M5.Lcd.drawPixel

M5.Lcd.drawPixelは1ピクセルの色を塗るためのコマンドで、M5.Lcd.drawPixel(X, Y, 色)で指定します。

#include <M5StickC.h>

void setup() {
  M5.begin();
  M5.Lcd.fillScreen(BLACK);
  
  M5.Lcd.drawPixel(40, 60, CYAN);

}

void loop() {
}

色の指定

「M5.Lcd.fillScreen」の紹介をした際にこちらの色に関しては既に登録されているので、名称を指定すればそれぞれの色が使えますというお話をしました。

// New color definitions use for all my libraries
#define TFT_BLACK       0x0000      /*   0,   0,   0 */
#define TFT_NAVY        0x000F      /*   0,   0, 128 */
#define TFT_DARKGREEN   0x03E0      /*   0, 128,   0 */
#define TFT_DARKCYAN    0x03EF      /*   0, 128, 128 */
#define TFT_MAROON      0x7800      /* 128,   0,   0 */
#define TFT_PURPLE      0x780F      /* 128,   0, 128 */
#define TFT_OLIVE       0x7BE0      /* 128, 128,   0 */
#define TFT_LIGHTGREY   0xC618      /* 192, 192, 192 */
#define TFT_DARKGREY    0x7BEF      /* 128, 128, 128 */
#define TFT_BLUE        0x001F      /*   0,   0, 255 */
#define TFT_GREEN       0x07E0      /*   0, 255,   0 */
#define TFT_CYAN        0x07FF      /*   0, 255, 255 */
#define TFT_RED         0xF800      /* 255,   0,   0 */
#define TFT_MAGENTA     0xF81F      /* 255,   0, 255 */
#define TFT_YELLOW      0xFFE0      /* 255, 255,   0 */
#define TFT_WHITE       0xFFFF      /* 255, 255, 255 */
#define TFT_ORANGE      0xFDA0      /* 255, 180,   0 */
#define TFT_GREENYELLOW 0xB7E0      /* 180, 255,   0 */
#define TFT_PINK        0xFC9F

ただ今回、また調べてみたところ、どうやら「TFT_」とつけなくても色を使えるようでした。

ということでこんなプログラムを組んで、全色表示してみました。

#include <M5StickC.h>

void setup() {
  M5.begin();
  M5.Lcd.fillScreen(BLACK);
  
  M5.Lcd.drawFastHLine(10, 10 , 60, BLACK);
  M5.Lcd.drawFastHLine(10, 15, 60, NAVY);
  M5.Lcd.drawFastHLine(10, 20, 60, DARKGREEN);
  M5.Lcd.drawFastHLine(10, 25, 60, DARKCYAN);
  M5.Lcd.drawFastHLine(10, 35, 60, MAROON);
  M5.Lcd.drawFastHLine(10, 40, 60, PURPLE);
  M5.Lcd.drawFastHLine(10, 45, 60, OLIVE);
  M5.Lcd.drawFastHLine(10, 50, 60, LIGHTGREY);
  M5.Lcd.drawFastHLine(10, 55, 60, DARKGREY);
  M5.Lcd.drawFastHLine(10, 60, 60, BLUE);
  M5.Lcd.drawFastHLine(10, 65, 60, GREEN);
  M5.Lcd.drawFastHLine(10, 70, 60, CYAN);
  M5.Lcd.drawFastHLine(10, 75, 60, RED);
  M5.Lcd.drawFastHLine(10, 80, 60, MAGENTA);
  M5.Lcd.drawFastHLine(10, 85, 60, YELLOW);
  M5.Lcd.drawFastHLine(10, 90, 60, WHITE);
  M5.Lcd.drawFastHLine(10, 95, 60, ORANGE);
  M5.Lcd.drawFastHLine(10, 100, 60, GREENYELLOW);
  M5.Lcd.drawFastHLine(10, 105, 60, PINK);

}

void loop() {
}

ちょっと細くてみづらいのはご勘弁ください。

何にせよ色を名称で指定ができるのは数値を指定するよりも楽だと思います。

これでM5StickC上に図形を表示できるようになりました。

次回はそろそろセンサ関係も使っていきたいので、まずは内蔵の加速度センサ、ジャイロスコープ、温度センサの使い方を勉強してみましょう。

ではでは今回はこんな感じで。

¥2,816 (2021/07/05 10:12時点 | Amazon調べ)
よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次