Advertisement
Guest User

Untitled

a guest
Jan 17th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.60 KB | None | 0 0
  1. # Arduino Uno + Adafurit ST7735 TFT で連装砲くんを走らせる
  2.  
  3. ## 要件
  4.  
  5. - Arduino UNO
  6. - Adafurit ST7735またはGFXベースのTFT (今回はSainSmart 1.8 TFTを使用しました)
  7.  
  8. ## 配線
  9.  
  10. 以下のように繋いでください。
  11.  
  12. ```
  13. TFT----------+ +--- UNO
  14. VCC(+5V) |----| 5V
  15. GND |----| GND
  16. SCL(SCLK) |----| 13pin (*)
  17. SDA(MOSI) |----| 11pin (*)
  18. RS/DC |----| 7pin
  19. RES(RESET) |----| 8pin
  20. CS |----| 6pin
  21. ```
  22.  
  23. - ハードウェアSPI用(MOSI, SCLK)のピンはUNOの場合は11pin, 13pinですが他の場合はよくご確認ください。
  24. - 6pin~8pinは以下のスケッチの数値を書き換えればお好みで変更できます。
  25. - RESETはデジタル出力ピンでなくとも、ArduinoのRESETピンに繋ぐこともできます。
  26. - 他のピンはSDカード用ですので今回は使用しません。
  27.  
  28. ## スケッチ
  29.  
  30. 以下のスケッチをArduinoにアップロードしてください。
  31.  
  32. ```C
  33. #include <TFT.h>
  34. #include <SPI.h>
  35.  
  36. #define CS 6
  37. #define DC 7
  38. #define RESET 8
  39.  
  40. TFT tft = TFT(CS, DC, RESET);
  41. int frame = 0;
  42.  
  43. void setup() {
  44. tft.begin();
  45. tft.background(0,0,0);
  46. tft.stroke(255,255,255);
  47. tft.setTextSize(2);
  48. }
  49. void drawFrame(int frame, bool handsOnly) {
  50. int offsetx = 15;
  51. int offsety = -5;
  52. int deltay = 20;
  53. if (!handsOnly) {
  54. tft.text(" || ||", offsetx, offsety + deltay * 0);
  55. tft.text(" __||_||", offsetx, offsety + deltay * 1);
  56. tft.text("||.|_|_/.||", offsetx, offsety + deltay * 2);
  57. tft.text("=|@ ___ @|=", offsetx, offsety + deltay * 3);
  58. tft.text("||_/||||_||", offsetx, offsety + deltay * 4);
  59. tft.text(" |-----|", offsetx, offsety + deltay * 5);
  60. tft.text(" | |", offsetx, offsety + deltay * 6);
  61. }
  62. switch (frame % 4) {
  63. case 0:
  64. tft.text(" )", offsetx, offsety + deltay * 5);
  65. tft.text(" )", offsetx, offsety + deltay * 6);
  66. break;
  67. case 3:
  68. // fall through
  69. case 1:
  70. tft.text(" ) (", offsetx, offsety + deltay * 6);
  71. break;
  72. case 2:
  73. tft.text(" (", offsetx, offsety + deltay * 5);
  74. tft.text(" (", offsetx, offsety + deltay * 6);
  75. break;
  76. }
  77. }
  78. void loop() {
  79. tft.stroke(0, 0, 0);
  80. drawFrame(frame, true);
  81. tft.stroke(255,255,255);
  82. drawFrame(++frame, false);
  83. delay(100);
  84. }
  85. ```
  86.  
  87. 正常に書き込まれれば自動的に連装砲くんが走り始めるはずです!
  88.  
  89. なお、上記スケッチはグローバル変数`frame`に対するオーバーフローへの対処を施していません。およそ6時間(= 100ms * INT_MAX / 100)ほど連続で実行すると表示がおかしくなる場合があります。
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement