Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Arduino Uno + Adafurit ST7735 TFT で連装砲くんを走らせる
- ## 要件
- - 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にアップロードしてください。
- ```C
- #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時間(= 100ms * INT_MAX / 100)ほど連続で実行すると表示がおかしくなる場合があります。
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement