- Arduino UNO
- Adafurit ST7735またはGFXベースのTFT (今回はSainSmart 1.8 TFTを使用しました)
以下のように繋いでください。
TFT----------+ +--- UNO
VCC(+5V) |----| 5V
GND |----| GND
SCL(SCLK) |----| 13pin (*)
SDA(MOSI) |----| 11pin (*)
RS/DC |----| 7pin
RES(RESET) |----| 8pin
CS |----| 6pin
- ハードウェアSPI用(MOSI, SCLK)のピンはUNOの場合は11pin, 13pinですが他の場合はよくご確認ください。
- 6pin~8pinは以下のスケッチの数値を書き換えればお好みで変更できます。
- RESETはデジタル出力ピンでなくとも、ArduinoのRESETピンに繋ぐこともできます。
- 他のピンはSDカード用ですので今回は使用しません。
以下のスケッチをArduinoにアップロードしてください。
#include <TFT.h>
#include <SPI.h>
#define CS 6
#define DC 7
#define RESET 8
TFT tft = TFT(CS, DC, RESET);
int frame = 0;
void setup() {
tft.begin();
tft.background(0,0,0);
tft.stroke(255,255,255);
tft.setTextSize(2);
}
void drawFrame(int frame, bool handsOnly) {
int offsetx = 15;
int offsety = -5;
int deltay = 20;
if (!handsOnly) {
tft.text(" || ||", offsetx, offsety + deltay * 0);
tft.text(" __||_||", offsetx, offsety + deltay * 1);
tft.text("||.|_|_/.||", offsetx, offsety + deltay * 2);
tft.text("=|@ ___ @|=", offsetx, offsety + deltay * 3);
tft.text("||_/||||_||", offsetx, offsety + deltay * 4);
tft.text(" |-----|", offsetx, offsety + deltay * 5);
tft.text(" | |", offsetx, offsety + deltay * 6);
}
switch (frame % 4) {
case 0:
tft.text(" )", offsetx, offsety + deltay * 5);
tft.text(" )", offsetx, offsety + deltay * 6);
break;
case 3:
// fall through
case 1:
tft.text(" ) (", offsetx, offsety + deltay * 6);
break;
case 2:
tft.text(" (", offsetx, offsety + deltay * 5);
tft.text(" (", offsetx, offsety + deltay * 6);
break;
}
}
void loop() {
tft.stroke(0, 0, 0);
drawFrame(frame, true);
tft.stroke(255,255,255);
drawFrame(++frame, false);
delay(100);
}
正常に書き込まれれば自動的に連装砲くんが走り始めるはずです!
なお、上記スケッチはグローバル変数frame
に対するオーバーフローへの対処を施して
いません。およそ6時間(= INT_MAX / 100[ms])ほど連続で実行すると表示がおかしくなる場合があります。