# Arduino 2.4" TFT 遊戲機使用手冊 (For幹部)
> 看完這份手冊應該可以幫助大家對社課要教的東西更有概念,還有一些想法的碎碎念XD,感謝耐心看完啦
> (電腦排版)

## 1. 認識遊戲機
#### 概述
這台遊戲機使用Arduino Nano,而Nano的MCU為Atmega328P,運算速度為16MHz,2K ram。
所以這些資訊表示甚麼阿?
因為只有2K,對於顯示RGB的螢幕有些吃力,所以只能運算簡單的遊戲像是"貪吃蛇"或著是"打磚塊"等經典遊戲或著是"俄羅斯方塊"相對靜態的遊戲。
#### 功能
具備"電阻式觸控螢幕",一個XY軸搖桿,6顆按鍵(4大2小),一顆接到PWM的LED以及蜂鳴器。
#### 電源
翻到遊戲機背面你會發現有2顆電池,稱14500電池,14500是指他的外型大小。
每顆電池平均電壓為3.7V,可充電(拆下充電,另附充電器),充飽時電壓會來到4.2V,電路中串聯兩顆,所以電壓來到7.4V。
但Arduino吃5V電,所以會接到Nano上的VIN,並進行降壓分出5V和3.3V的電,供給電路內部使用。
#### 螢幕
螢幕使用2.4"的TFT,具電阻式觸控螢幕,並使用ILI9341晶片,並走SPI通訊。
#### 程式
程式目前找到一些範例了,我貼在正下方給你們參考。
- [TicTacToe](https://create.arduino.cc/projecthub/nickthegreek82/arduino-touch-tic-tac-toe-game-792816?ref=search&ref_id=TFTLCD&offset=1)
- [Arduino Teris](https://vilaca.eu/handheld-arduino-color-console/)
- [Break Out](https://www.youtube.com/watch?v=Oh9vgomyuOI&list=PLvOT6zBnJyYFf5SGjcZTBgnoXs6GPDeW_&index=4&t=456s&ab_channel=BytesNBits)
### 1.1 照片




### 1.2 電路圖
> 因為幾乎都是模組化的電路,所以電路相對簡單,差在中間使用一個Level Shifter而已XD
>

| ==Arduino== | TFT | Touch | Buttons | IMU | Buzzer | LED | Joystick |
|:----------- | --- | ----- |:--------:| --- |:------:|:---:| ---------- |
| D0 (RX) | | | | | | | |
| D1 (TX) | | | | | | | |
| D2 | | | X | | | | |
| ~D3 | | | Y | | | | |
| D4 | | | B | | | | |
| ~D5 | | | | | | + | |
| ~D6 | | | | | + | | |
| D7 | | T_CS | | | | | |
| D8 | RST | | | | | | |
| ~D9 | D/C | | | | | | |
| D10 (SS) | CS | | | | | | |
| ~D11 (MOSI) | SDI | DIN | | | | | |
| D12 (MISO) | SDO | DO | | | | | |
| ~D13 (SCK) | SCK | T_CLK | | | | | |
| A0 | | | A | | | | |
| A1 | | | SELECT | | | | |
| A2 | | | START | | | | |
| A3 | | | JOYSTICK | | | | |
| A4 (SDA) | | | | SDA | | | |
| A5 (SCL) | | | | SCL | | | |
| A6 | | | | | | | Vertical |
| A7 | | | | | | | Horizontal |
### 1.3 範例Code : [點我看一系列影片](https://www.youtube.com/playlist?list=PLvOT6zBnJyYFf5SGjcZTBgnoXs6GPDeW_)
> 這個系列講的相當不錯,除了我不會用到讀取SD卡以外其他都有
### 1.4 BOM表以及採買網址 : [來點我吧](https://docs.google.com/spreadsheets/d/1QH5kyLyDfYiKUglzCkDhLEFuEfrw4b1Xm_54XuRzqkE/edit#gid=0)
### 1.5 延伸想法
- 使用I2C或Serial實現裝置連線對戰
- 取個好聽點的名字
- 寫更好玩的遊戲
---
## 2. 關於課程
### 2.1 課程概述
這次的專案因為是遊戲機的性質,且整個電路不太可能請一個剛接觸的人焊,所以使用PCB的情況下,實作方面偏少,只有焊接部分而已。
下圖呈現出此課程各方面的占比。
```mermaid
pie
title Arduino TFT Gmae Console
"焊接" : 15
"程式(C++)" : 60
"電子零件" : 10
"Arduino知識" : 10
```
**但是,又不太希望我們到最後會偏向很資訊的地方,一來怕大家覺得無聊,二來許多不是電機系的人也會來上**
更希望這課程可以延伸到許多地方使用(Ex. 一日電機營),所以需要抓出一個中間值,並列出我心目中的目標 :
- 課程吸引人且好玩,有意願連續上,不中斷
- 成果為主要導向,會動就好,不用太多技術細節
- 課程可以延伸出到日後的自我學習
- 同儕間會互相分享,增加日後人氣 (Ex.哇,這甚麼酷東西,哪裡做的?)
- 可以結合課堂上的知識 (Ex.用它做出建男叫我們做的小遊戲,或是OOP教的)
**(有其他想法歡迎直接修改)**
### 2.2 課程大綱,順序
(按時間順序)
> [DEMO] -> 那一堂的成果
1. 焊接初嘗試 3hr 「林」
- 課程介紹
- DIP焊接練習&介紹
- SMD焊接練習&介紹
- **[DEMO]** : 小小焊接專案製作(50$以下焊接套件露天)
2. 動手製作遊戲機吧! 3hr 「邱」
- 遊戲機組裝簡介
- 組裝遊戲機
- SMD元件焊接
- 螢幕及周邊測試 (給他們跑我們寫好的程式)
- **[DEMO]** : 完成組裝遊戲機
3. 遊戲機教學I 3hr
- 觸控螢幕使用I
- 螢幕使用教學
- 基礎Arduino (DigitalWrie, Read..., Tone)
- 觸控螢幕,Button,Buzzer,LED
- 螢幕動畫
- **[DEMO]** : 遊戲機整合操作 (成功讀取搖桿,按鈕並顯示)
4. 遊戲機教學II 3hr
- 觸控螢幕使用II
- 進階Arduino (PROGMEM, I2C, IMU, Serial)
- PlatformIO (VScode)
- **[DEMO]** : 遊戲機整合操作 (成功讀取搖桿,按鈕並顯示)
- (待修)
5. 遊戲開發I 3hr
- 手把手寫程式
- 基礎遊戲演算法教學
- C++ OOP概念
- **[DEMO]** : 動手寫個OOXX
- [TicTacToe](https://create.arduino.cc/projecthub/nickthegreek82/arduino-touch-tic-tac-toe-game-792816?ref=search&ref_id=TFTLCD&offset=1)
6. 遊戲開發II 3hr
- 手把手寫程式
- 用Serial實現兩位玩家連線對戰
- **[DEMO]** : 遊戲PONG, Breakout
7. 遊戲開發III 3hr
- 自我操作寫程式
### 2.3 時數與時間安排
參考之前的,一堂課為3小時,18:30 ~ 21:30,但有意減少至2 ~ 2.5小時,程式容易讓人睡覺 Orz
### 2.4 先備知識
最好是有if-else, for-loop, switch-case簡單的概念啦,會用到的程式大概就大一上計概必修教的,學過python也OK。
所以應該會要求基礎C/C++ or Python, 不然到時候很多電機的再聽也覺得無聊。
給推薦資源 : SoloLeran, W3School 給非電機自學
(給中文資源,怕非專業英文)
### 2.5 課程方式與人力
(待討論)
### 2.6 可以學到甚麼 ?
- 焊接(SMD,DIP)
- 基礎Arduino (Digital, Analog)
- C++語法
- 遊戲的寫法(架構和發想)
- 基礎遊戲演算法(以OOXX為例)
- 簡單的C++ OOP概念
- Platform IO使用方式
- Arduino通訊協定
- TFT LCD螢幕使用方式 (觸控,顯示,控制)
### 2.7 備料相關問題
>- [x] 表示已解決方案
- [ ] PCB焊SMD元件容易焊壞,如何估計損壞成本 ? (自己焊?)
----
## 3. 宣傳和形象
> 雖然好像不關我的事XD,但網路上有許多宣傳做的不錯,產品包裝蠻喜歡的
### 3.1 專案形象包裝
1. 也許可以設計一個包裝盒,不要用夾鏈袋裝
2. PCB的配色要符合社團的主顏色
3. 設計打開包裝的零件擺放和順序
4. 精美的GIF動畫
5. 如何後續延伸學習的
> 精美GIF動畫範例 (雖然我的沒有他的這麼有質感QQ
> FB宣傳時用類似這種GIF (?
>

> 或這種
>

## 4. SnapShot

## 5. 遊戲機特色及用途
- Arduino Nano : ATMEGA328P 16Mhz
- 2.4" 全彩觸控液晶螢幕
- 7個使用者定義動作按鍵
- 1顆PWM接腳LED
- 兩軸蘑菇頭搖桿
- 蜂鳴器(許多經典遊戲)
- 三軸陀螺儀(MPU6050)
- 2600 mAh 可充式電池
- UART、I2C接腳,擴充更多模組
- 透明壓克力背蓋
用途:
- 復古遊戲機
- 計算機
- GUI介面控制周邊裝置
- 適合學習入門Arduino
- 練習程式的地方
### 6. 他可以做到的事
- 簡易鋼琴
- 彈珠遊戲(陀螺儀)
- HangMan
- Wordle
- Breakout
- Pacman
- 計算機
- 繪圖機(畫Function)
- Chess
- Teris
- Pong
- Snake
- TicTacToe
...
...
...
###### tags: `創客社`