-
- スプライト
- 画面のちらつき防止
+
+ スプライト表示(TFT_eSprite クラス)
+ M5.Lcd ではじまる画面描画命令は、表示されている画面に対して、直接描画するため、画面のちらつきが生じることがあります。
+TFT_eSprite クラスを用いると、画面に表示されていない仮想画面(オフスクリーン)を作成して、そこに対して描画を行っておき、さいごにまとめて仮想画面の内容をメインの画面(Lcd)に描画することができます。
+これにより、画面のちらつきが抑制できます(ダブルバッファリング)。
+ちらつき防止のほかに、なめらかに画面スクロールする目的で、実画面よりも大きい仮想画面を作成しておき、その一部の領域のみを実画面に描画するといった用途にも使われます。
+ TFT_eSprite クラスは、Lcdクラスとほぼ同様の描画関数を備えています。リスト 13 は、スプライトの効果あり/なしを確認できるサンプルプログラムです。
+
+ リスト 13 src/sprite01.ino
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+ 8
+ 9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39 | #include <M5StickCPlus.h>
+
+int USE_SPRITE = 0 ; //スプライトを使用するとき1
+
+TFT_eSprite spu = TFT_eSprite(&M5.Lcd); // Sprite object
+
+void setup() {
+ M5.begin();
+ M5.Lcd.setRotation(3);
+
+ spu.setColorDepth(8);
+ spu.createSprite(240, 135);
+
+ randomSeed(analogRead(0));
+}
+
+void loop() {
+ int r = random(100000);
+ if ( USE_SPRITE ) {
+ spu.fillSprite( CYAN );
+ spu.setCursor(30, 34, 4); spu.setTextSize(2);
+ spu.setTextColor( WHITE, BLUE );
+ spu.printf(" %d \n Sprite ", r );
+ spu.pushSprite(0, 0);
+ } else {
+ M5.Lcd.fillScreen( CYAN );
+ M5.Lcd.setCursor(30, 34, 4); M5.Lcd.setTextSize(2);
+ M5.Lcd.setTextColor( WHITE, BLUE );
+ M5.Lcd.printf(" %d \n LCD ", r);
+ }
+
+ M5.update();
+ if (M5.BtnA.wasReleased()) {
+ USE_SPRITE = 1 - USE_SPRITE ; // スプライト使用の切り替え(1なら0、0なら1)
+ M5.Beep.tone(1000 + 1000 * USE_SPRITE, 500);
+ }
+ M5.Beep.update();
+ delay(100);
+}
+
+ |
+
Wifi 接続
@@ -1075,11 +1161,11 @@
Preference
-
- 電力制御
+
+ 電力制御
-
- その他
+
+ その他
- CO2 (CCS811)
- RCS-620S (Felica)
@@ -1088,8 +1174,8 @@
- OTA
-
- 参考リンク
+
+ 参考リンク
diff --git a/src/sprite01.ino b/src/sprite01.ino
new file mode 100644
index 0000000..bcc0fb8
--- /dev/null
+++ b/src/sprite01.ino
@@ -0,0 +1,39 @@
+#include
+
+int USE_SPRITE = 0 ; //スプライトを使用するとき1
+
+TFT_eSprite spu = TFT_eSprite(&M5.Lcd); // Sprite object
+
+void setup() {
+ M5.begin();
+ M5.Lcd.setRotation(3);
+
+ spu.setColorDepth(8);
+ spu.createSprite(240, 135);
+
+ randomSeed(analogRead(0));
+}
+
+void loop() {
+ int r = random(100000);
+ if ( USE_SPRITE ) {
+ spu.fillSprite( CYAN );
+ spu.setCursor(30, 34, 4); spu.setTextSize(2);
+ spu.setTextColor( WHITE, BLUE );
+ spu.printf(" %d \n Sprite ", r );
+ spu.pushSprite(0, 0);
+ } else {
+ M5.Lcd.fillScreen( CYAN );
+ M5.Lcd.setCursor(30, 34, 4); M5.Lcd.setTextSize(2);
+ M5.Lcd.setTextColor( WHITE, BLUE );
+ M5.Lcd.printf(" %d \n LCD ", r);
+ }
+
+ M5.update();
+ if (M5.BtnA.wasReleased()) {
+ USE_SPRITE = 1 - USE_SPRITE ; // スプライト使用の切り替え(1なら0、0なら1)
+ M5.Beep.tone(1000 + 1000 * USE_SPRITE, 500);
+ }
+ M5.Beep.update();
+ delay(100);
+}
\ No newline at end of file
diff --git a/week1.rst b/week1.rst
index 7fc10a2..0e5b181 100755
--- a/week1.rst
+++ b/week1.rst
@@ -251,8 +251,8 @@
~~~~~~~~~~~~~~~~~~~~~~~~
内蔵の赤外LEDを用いて、信号を送信する例を :numref:`irsend01` に示します。
-赤外光が弱いため、かなり近づかないと(50cm程度)反応しない場合があります。
-外部の赤外LEDを用いると、距離を伸ばすことができます。
+内蔵の赤外LED光はあまり強くないため、50cm程度まで近づかないと反応しない場合があります。
+単体の赤外LEDを接続して用いると、距離を伸ばすことができます。
.. literalinclude:: src/irsend01.ino
:caption:
@@ -264,10 +264,22 @@
-スプライト
--------------------------------------
-画面のちらつき防止
+スプライト表示(TFT_eSprite クラス)
+-------------------------------------------------------------
+M5.Lcd ではじまる画面描画命令は、表示されている画面に対して、直接描画するため、画面のちらつきが生じることがあります。
+TFT_eSprite クラスを用いると、画面に表示されていない仮想画面(オフスクリーン)を作成して、そこに対して描画を行っておき、さいごにまとめて仮想画面の内容をメインの画面(Lcd)に描画することができます。
+これにより、画面のちらつきが抑制できます(ダブルバッファリング)。
+ちらつき防止のほかに、なめらかに画面スクロールする目的で、実画面よりも大きい仮想画面を作成しておき、その一部の領域のみを実画面に描画するといった用途にも使われます。
+
+TFT_eSprite クラスは、Lcdクラスとほぼ同様の描画関数を備えています。:numref:`sprite01` は、スプライトの効果あり/なしを確認できるサンプルプログラムです。
+
+.. literalinclude:: src/sprite01.ino
+ :caption:
+ :name: sprite01
+ :language: arduino
+ :linenos:
+.. :emphasize-lines: 6-7, 15,19
|