Skip to content

Instantly share code, notes, and snippets.

@retorillo
Last active August 21, 2017 05:58
Show Gist options
  • Save retorillo/7160e746f19213cefa98a07e9139966b to your computer and use it in GitHub Desktop.
Save retorillo/7160e746f19213cefa98a07e9139966b to your computer and use it in GitHub Desktop.
Arduino Uno + Adafurit ST7735 TFT で連装砲くんを走らせる

Arduino Uno + Adafurit ST7735 TFT で連装砲くんを走らせる

Video

要件

  • 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])ほど連続で実行すると表示がおかしくなる場合があります。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment