《超圖解Arduino互動設計入門》補充資料、勘誤及目錄大綱

本文補充《超圖解Arduino互動設計入門》書籍的技術文件資料下載連結、勘誤以及目錄大綱。

《超圖解Arduino互動設計入門》書籍封面

《超圖解Arduino互動設計入門》的目標是讓高中以上,沒有電子電路基礎,對微電腦、電子DIY 及互動裝置有興趣的人士,也能輕鬆閱讀,進而順利使用Arduino 控制板完成互動應用。因此,實驗用到的電子和程式觀念,皆以手繪圖解的方式說明。

書中涉及某些較深入的概念,或者和「動手做」相關,但是在實驗過程中沒有用到的相關背景知識,都安排在各章節的「充電時間」單元(該單元的左上角有一個電池充電符號),像第三章 3-26 頁「記憶體類型說明」,讀者可以日後再閱讀。

充電時間

《超圖解 Arduino 互動設計入門》基本資料:

各大網路書店與購物商場連結:

內容勘誤

【2013/04/07 更新】

  • 9-25頁:第二段,600µs (毫秒…,正確的單位名稱是微秒
  • 13-4頁:表13-1上方的說明文字,「對照表(單位.png) Hz)」,當中的 ".png)" 是多餘的。
  • 14-12頁:內文提到的AccessPort軟體,並未收錄在書本DVD光碟,請讀者到AccessPort的官網(sudt.com)下載
  • 15-27頁:底下的程式片段:

    正確是:

  • D-13頁:4N25電路圖底下的「接TRIAC的T1腳」,正確是「接TRIAC的A1腳」。有些廠商的TRIAC元件用A1和A2來標示陽極腳位,有些則標示成T1和T2(代表Terminal 1, 終端腳1)。

【2013/04/08 更新】

  • 5-4頁,第一行「序列埠通訊視窗」,正確是「序列埠監控視窗」。
  • 14-10頁,實驗說明裡的「序列埠通訊視窗」,正確是「序列埠監控視窗」。
  • 18-10頁,RFID麵包板電路組裝圖中的蜂鳴器元件是多餘的。
  • 附錄E,"BTRobotControl.apk"(藍牙遙控機器人APP)無法送出「左轉」訊息,請參閱這篇文章,下載修正之後的APP和原始檔。

【2013/04/20 更新】

  • 10-24頁,倒數第二段最後一行,「反電動式損害電晶體」,正確是「反電動勢…」。
  • 10-31頁,第一段第一行中的「表 10-4 」,正確是「表 10-5」。

【2013/04/27 更新】

  • B-7頁:第一段倒數第二行,「參閱動手做 B-2」,正確是「動手做 B-1」。

【2013/04/30 更新】

17-34頁:書本裡的程式是正確的,但是光碟的”接接樂Firmata.fla”程式有誤(main場景的34~38行):

function receiveData(e):void  // 接收Arduino的資料
{
   var n:Number = Number(e.data);
   bian.moveX(n * 0.54);
}

請將上面的敘述改成書本17-34頁的敘述:

function readAnalog(e:ArduinoEvent):void  // 接收Arduino的資料
{
   var n:Number = Number(e.value);
   bian.moveX(n * 0.54);
}

然後,在25行的這一行敘述:

var a:Arduino = new Arduino("127.0.0.1", 5331);

後面新增底下的敘述(請參閱17-33頁說明):

a.addEventListener(ArduinoEvent.ANALOG_DATA, readAnalog);

【2013/05/13 更新】

第九章並接式LCD中,初始化LCD程式庫,設定接腳的程式有誤,9-5頁的接線圖是正確的。9-6的程式碼有誤:

錯誤的初始化LCD程式庫,設定接腳的程式。

正確的LCD資料腳位設定敘述如下:

正確的初始化LCD程式庫,設定接腳的程式。

影響的內文(頁數):9-6, 9-7, 9-12, 9-18和9-23。

【2013/05/19 更新】

  • 5-10頁,中間的圖說「封包(package)」,正確是「封包(packet)」。
  • 10-22頁,NPN型的電晶體將負載接在C腳(集極),PNP型電晶體…,應改成「NPN型的負載接在電源端;PNP型的負載接在接地端。」

【2013/06/29 更新】

  • 8-16頁8-17頁的MAX7219矩陣LED麵包板的第7腳,接線有誤,正確是:

組裝MAX7219 LED矩陣電路麵包板

  • B-4頁補充:使用UNO板燒錄Bootloader(開機啟動程式),在插上10uF電容之前,請先上傳B-3頁說明的ISP程式。上傳ISP之後,執行燒錄之前,請從Arduino軟體的「工具→板子」選單,選擇要燒錄的bootloader版本,以B-2的範例而言,請選擇Arduino Duemilanove w/ATmega328

【2013/07/18 更新】

  • 10-9頁,timer 2 對應的腳位是數位311腳,其PWM頻率設定語法為:
    TCCR2B=TCCR2B & 0b11111000 | 0×02;
  • D-13頁,4N25的橋式整流電路正確是:

    4N25零交越檢測電路

    為了避免橋式整流器部分接錯,同時減少接線,可以採用現成的「橋式整流器」,如下:

    4N25零交越檢測電路

    橋式整流器有多種耐電壓和安培規格,選購時,至少選用400V/1A。它的外觀有圓有扁,上面有交流和+, -符號。

【2013/07/21 更新】

【2013/08/28 更新】

  • 2-3頁,第二段最後的單位”mA”,正確中譯為「毫安培」。
  • 3-18頁,表3-1,類型boolean佔用記憶體大小寫著「1位元」,實際是佔用8位元。
  • 4-20頁,倒數第三段第二行,「源流(Source Sink)」正確是「源流(Source Current)」。
  • B-12頁,圖片中的”DTS”標示,正確是”DTR”。

【2013/09/10 更新】

B-9頁,電路圖的正確接法如下:

【2013/11/07 更新】

7-6頁,中間的圖解,"abcdefg"的順序有誤,更正如下:

在Arduino的埠D輸出七段LED訊息

8-10頁,MAX7219的要點補充說明:需要搭配「共陰極」LED;在MAX7219的規格書「一般說明」(第一段文字)寫著:”common-cathode display drivers”(共陰極)驅動器。

8-35頁,「動手做8-6」的LED矩陣逐字捲動效果程式,並無法顯示文字,請在此下載更新後的diy8_6程式,程式修訂說明請參閱此留言

補充說明:使用MemoryFree.h程式庫檢查剩餘的主記憶體空間

Arduino有個MemoryFree.h程式庫,可檢查目前可用的記憶體量。下載並存入libraries資料夾之後,可在程式中透過MemoryFree.h的freeMemory()函數,傳回可用的主記憶體位元組(byte)數。如範例程式所示:

#include <MemoryFree.h>   // 引用程式庫

// 佔用14位元組的字串資料(含結尾的null字元)
char str[] = "Hello, world!";

void setup() {
   Serial.begin(9600);
}

void loop() {
   Serial.println(str);
   Serial.println(freeMemory());  // 顯示剩餘的記憶體量
   delay(1000);
}

用類似的方式,執行舊的diy8_6程式,序列監控視窗將顯示負值,代表記憶體空間不足:

剩餘的記憶體數量

在更新後的程式上測試,則得到如下的結果:

剩餘的記憶體數量

D-12D-14頁的動手做D-1單元,所採用的「零交越檢測元件」,正確的編號是H11AA1(書本內文多寫了一個1),接MOC3020M第1腳的電阻是它內部LED的限流電阻,電路圖上畫的是180Ω,但我實際在板子上焊接的是1KΩ電阻(如下圖)。其實跟外部的LED一樣用470Ω電阻或330Ω就好了,180Ω也可以。

焊接在萬用PCB板的交流電調光器

更新後的調光器電路圖:

交流電調光器電路圖

資料文件與視訊影片下載

  • 最新版本的Arduino開發工具軟體,請到Arduino官方網站下載。
  • 第五章提到的ASCII字碼對照表,請參閱維基百科的ASCII條目
  • Arduino創始人在TED大會的演說 (Massimo Banzi: How Arduino is open-sourcing

  • 導演Rodrigo Calvo和Raul Alejos拍攝了一部紀錄片Arduino: The Documentary(有英文和西班牙文字幕),由Arduino的創始者訴說Arduino的誕生過程,還有運用Arduino製作出開放軟/硬體原始碼的3D印表機"MakerBot"的創辦人Zach Smith,和其他互動設計師的訪談紀錄,以及在工廠大量生產Arduino微電腦的片段。

電子零組件的技術資料下載

原本計畫收錄在書本光碟鋰的技術資料文件,為避免涉及著作權問題,在此提供連結(皆為PDF格式)。

第三章「Arduino互動程式設計入門」,ATMEL公司的"Efficient C Coding for AVR"(直譯為:AVR 晶片的高效 C 程式設計)技術文件

第六章「類比信號處理」,運算放大器(OP-Amp)技術文件:LM358LM741

第七章「LED七段顯示器」,8位元位移暫存器(shift register)74HC595

第八章「LED矩陣與SPI介面控制」,SPI介面的8個七段顯示器,或者一個8×8 LED矩陣顯示器驅動ICMAX7219

第九章「LCD顯示器+溫濕度感測器+超音波感測器」:

第十章「變頻控制LED燈光和馬達」

第十二章「紅外線遙控與縮時攝影控制器」,紅外線遙控訊號接收元件TSOP4838

第十三章「製作光電子琴與MIDI電子鼓」,TCRT5000紅外線反射型感測器

附錄C,光耦合元件PC817

附錄D,TRIAC元件BTA12-600B

《超圖解Arduino互動設計入門》目錄

第一章 認識Arduino

  • Arduino 微電腦板
  • Arduino 的相關軟體
  • Arduino 開發環境安裝
  • 上傳「LED 閃爍」範例程式

第二章 認識電子零件與工具

  • 電壓、電流與接地
  • 微電腦板的電源供應器
  • 電阻
  • 電容
  • 二極體
  • 發光二極體(LED)
  • 看懂電路圖
  • 電子工作必備的量測工具:萬用電錶
  • 用麵包板組裝實驗電路

第三章 Arduino 互動程式設計入門

  • Arduino 程式設計基礎
  • 動手做 3-1 寫一個 LED 閃爍控制程式
  • 用「變數」來管理程式碼
  • 認識數字系統
  • 不變的「常數」

第四章 開關電路與LED跑馬燈效果

  • 認識開關
  • 讀取數位輸入值
  • 改變程式流程的if條件式
  • 動手做 4-1 用麵包板組裝開關電路
  • 動手做 4-2 跑馬燈範例程式一
  • 撰寫迴圈程式
  • 動手 做4-3 跑馬燈範例程式二:使用for迴圈
  • 認識陣列
  • 動手做 4-4 跑馬燈範例程式三:使用陣列變數
  • 使用埠口操作指令與位移運算子製作跑馬燈程式
  • 動手做 4-5 跑馬燈範例程式四:使用位移運算子

第五章 序列埠通信

  • 並列與序列通訊簡介
  • 處理文字訊息:認識字元與字串資料類型
  • 從Arduino傳遞序列訊息給電腦
  • 動手做 5-1 從序列埠監控視窗觀察變數值
  • 從 Arduino 接收序列埠資料
  • 動手做 5-2 從序列埠控制LED開關
  • switch…case 控制結構

第六章 類比信號處理

  • 讀取類比值
  • 動手做 6-1 從序列埠讀取「類比輸入」值
  • 認識光敏電阻與分壓電路
  • 動手做 6-2 使用光敏電阻製作小夜燈
  • 壓力感測器與彎曲感測器
  • 電容式麥克風元件與運算放大器
  • 動手做 6-3 自製麥克風聲音放大器(拍手控制開關)
  • 動手做 6-4 拍手控制開關改良版

第七章 LED七段顯示器

  • 七段顯示器
  • 動手做 7-1 連接 LED 七段顯示器與Arduino板
  • 使用積體電路簡化電路
  • 動手做 7-2 序列連接七段顯示器

第八章 LED矩陣與SPI介面控制

  • 建立自訂函數
  • 動手做 8-1 建立自訂函數
  • 認識變數的有效範圍
  • LED矩陣簡介
  • 認識SPI介面與MAX7219
  • 動手做 8-2 組裝LED矩陣電路
  • 顯示單一矩陣圖像
  • 動手做 8-3 在矩陣LED上顯示音符圖像
  • 動手做 8-4 在序列埠監控視窗輸出矩形排列的星號
  • LED矩陣動畫與多維陣列程式設計
  • 動手做 8-5 在矩陣 LED 上顯示動態圖像
  • LED 矩陣跑馬燈
  • 動手做 8-6 LED矩陣逐字捲動效果程式
  • 將常數保存在「程式記憶體」裡

第九章 LCD顯示器+溫濕度感測器+超音波感測器

  • 認識文字型 LCD 顯示模組
  • 動手做 9-1 在 LCD 顯示器上顯示一段文字
  • 動手做 9-2 在 LCD 上顯示自訂字元符號
  • 動手做 9-3 串列連接 LCD 顯示模組
  • 數位溫濕度感測器
  • 動手做 9-4 製作數位溫濕度顯示器
  • 認識超音波
  • 動手做 9-5 使用超音波感測器製作數位量尺

第十章 變頻控制LED燈光和馬達

  • 調節電壓變化
  • 類比輸出(PWM)指令和預設頻率
  • 動手做 10-1 調光器
  • 動手做 10-2 隨機數字與燭光效果
  • 動手做 10-3 透過序列埠調整燈光亮度
  • 動手做 10-4 使用atoi()轉換字串成數值
  • 認識直流馬達
  • 齒輪箱 / 滑輪組和動力模型玩具
  • 認識電晶體元件
  • 動手做 10-5 電晶體馬達控制與調速器
  • 控制馬達正反轉的H橋式馬達控制電路
  • 動手做 10-6 自動迴避障礙物的自走車

第十一章 使用Wii搖桿控制機械手臂

  • 認識伺服馬達
  • 動手做 11-1 自製機械手臂
  • 認識Wii左手把的通訊介面:I2C
  • 動手做 11-2 透過I2C介面串連兩個Arduino板
  • 動手做 11-3 在I2C介面上傳送整數資料
  • 動手做 11-4 讀取Wii左手把的搖桿、按鈕與加速度計值
  • 動手做 11-5 使用Wii左手把控制機械手臂
  • 改造伺服馬達成連續360°旋轉

第十二章 紅外線遙控與縮時攝影控制器

  • 認識紅外線
  • 動手做 12-1 偵測人體移動
  • 紅外線遙控
  • 動手做 12-2 使用IRremote程式庫解析紅外線遙控值
  • 動手做 12-3 使用紅外線遙控器控制伺服馬達
  • 動手做 12-4 從Arduino發射紅外線遙控電器
  • 運用紅外線遙控照相機
  • 動手做 12-5 遙控照相機拍攝縮時影片

第十三章 製作光電子琴與MIDI電子鼓

  • 發音體和聲音
  • 使用tone()函數發出聲音
  • 動手做 13-1 演奏一段瑪莉歐旋律
  • 使用#define巨集指令替換資料
  • 認識反射型與遮光型光電開關
  • 動手做13-2 光電子琴製作
  • 認識MIDI
  • MIDI訊息格式
  • 動手做 13-3 透過 Arduino 演奏 MIDI 音樂
  • 動手做 13-4 透過「虛擬 MIDI」介面演奏音樂
  • 動手做 13-5 製作 MIDI 電子鼓

第十四章 手機藍牙遙控機器人製作

  • 電波、頻段和無線傳輸簡介
  • 認識藍牙(Bluetooth)
  • 動手做 14-1 使用軟體序列埠程式連接Arduino與藍牙模組
  • 動手做 14-2 用Android手機藍牙遙控機器人

第十五章 網路與HTML網頁基礎+嵌入式網站伺服器製作

  • 認識網路與IP位址
  • 網域名稱、URL網址和傳輸協定
  • 動手做 15-1 認識網頁與HTML
  • 網路的連線標準與封包
  • 認識HTTP協定
  • 連接乙太(Ethernet)網路卡
  • 建立Arduino微型網站伺服器
  • 動手做 15-2 建立微型網站伺服器

第十六章 網路家電控制

  • 使用Webduino程式庫建立微型網站
  • 自訂錯誤訊息網頁與超連結設定
  • 動手做 16-1 監控遠端的溫濕度值
  • 傳遞資料給網站伺服器
  • 動手做 16-2 建立網頁表單
  • 認識傳遞資料的 GET / POST 方法和查詢字串
  • 動手做 16-3 建立接收 POST 表單資料的自訂命令
  • 動手做 16-4 從瀏覽器控制遠端的燈光開關
  • 控制家電開關
  • 動手做 16-5 使用繼電器控制家電開關

第十七章 Arduino +Flash整合互動應用

  • Arduino + Flash = 多元互動媒體
  • 動手做 17-1 測試Arduino與Flash連線
  • 動手做 17-2 「接電子零件」互動遊戲
  • 認識Arduino的String(字串)程式庫
  • 動手做 17-3 Flash燈光開關和調光器
  • 使用Firmata在Flash和Arduino之間傳遞資料

第十八章 RFID無線識別裝置與問答遊戲製作

  • 認識條碼與RFID
  • RFID 模組介紹與標籤讀取實驗
  • 動手做 18-1 讀取RFID標籤
  • 儲存與比對RFID編碼
  • 動手做 18-2 使用RFID控制開關
  • 動手做 18-3 使用RFID進行Flash問答遊戲

附錄A 認識焊接工具:焊錫、電烙鐵及焊接助手

  • 焊接工具
  • 動手做 A-1 基礎焊接練習
  • 動手做 A-2 焊接鱷魚夾
  • 印刷電路板及萬用板
  • 動手做 A-3 焊接電路板
  • 動手做 A-4 活用USB電源供應器

附錄B 燒錄ATmega微處理器的開機啟動程式(boot loader)

  • 動手做 B-1 使用Arduino控制板燒錄ATmega328韌體
  • 動手做 B-2 用麵包板組裝Arduino微電腦實驗板

附錄C 改造 3C 小玩意的控制鈕

  • 認識光電耦合元件

附錄D 中斷處理與交流電調光器製作

  • 輪詢 VS 中斷
  • 調整交流電的輸出功率
  • 動手做 D-1 交流電調光器電路

附錄E 使用App Inventor開發Android App

  • 準備App Inventer開發環境
  • 建立第一個App Inventor專案:聲音播放程式
  • 藍牙遙控機器人App的程式碼說明
Posts created 483

264 thoughts on “《超圖解Arduino互動設計入門》補充資料、勘誤及目錄大綱

  1. 請教老師:
    我實做diy17_1時,
    1.flash出現以下訊息
    ** Auduino **連線到127.0.0.1:5331…
    ** Auduino **建立連線
    a~
    a~
    2. SerProxy顯示如書中17-11頁

    那是表示連線成功,為何可變電阻傳輸的數值,變成亂數?

    謝謝老師。

    1. 請先透過Arduino的序列埠監控視窗,觀察Arduino傳出的序列值(連線速率請調整成57600bps),如果同樣也是顯示亂數的話,代表可變電阻沒有接好。

      另外,也請參閱這一篇留言,處理Windows 8.1/10的問題。

      thanks,
      jeffrey

  2. 老師您好,請問我想自行焊接與燒錄程式作程自製arduino在PCB洞洞板上,那麼驅動Atmega328p-pu的5V電源用什麼方式比較適當?(例如:和調USB線…等)要焊在哪個腳位?

    1. hi jacky:

      ATmega328的主電源接腳是7和8,詳細的接線請參閱B-7頁說明,5V電源我主要使用三種方案:
      1. 焊接一個USB插座(或A-14頁的排針),連接手機的USB電源供應器。
      2. 使用4個1.2V充電電池,如14-19頁所示。
      3. 連接5V行動電源。

      have fun!
      jeffrey

  3. 老師您好,我買的是這款(http://goods.ruten.com.tw/item/show?21435056729868)的晶片但不知道為什麼,用B-8的方式上傳會出現已下錯誤:

    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xff

    是不是我bootloder沒燒好,還是晶片買錯?我直接把他插在市售arduino板上(也就是把原有的晶片拆下換上這片)也是出現以上錯誤訊息,而且上傳時只有RX燈閃一下而已。如果用B-10方法接電腦會無法辨識裝置更不用說上傳。線在13腳的燈有閃(是不是代表bootloder燒錄成功)但程是就是無法上傳,望請老師解答,感激不盡:)

    1. hi jacky:

      應該是bootloader燒錄有問題,請問在燒錄之前,控制板類型你有改成”Arduino Duemilanove”(Arduino軟體功能表的「工具→板子→Arduino Duemilanove」)嗎?

      補充說明:自製的Arduino板,控制板類型也相當於”Arduino Duemilanove”。

      thanks,
      jeffrey

  4. 請教老師:

    我用了8個光敏電阻來感測
    但A0-A5不夠用
    1.我把2個光敏電阻的信號線同時連接A1.結果只感應到其中1個.無法2個信號都收到.?
    2.光敏電阻的信號可以用digital的腳嗎?

    謝謝老師!

    1. 請改用其他Arduino控制板,例如,Arduino MEGA 2560具備16個類比輸入腳。或者,加裝類比轉換IC,像是MCP3008(具備8個類比輸入)。

      thanks,
      jeffrey

  5. __asm__ volatile(“sbi %0,%1\n\t” ::”I” (_SFR_IO_ADDR(PORTC)), “I” (PORTB0) );

    請問上面這一行程式是甚麼意思咧
    謝謝您

    1. __asm__代表執行組合語言,_SFR_IO_ADDR(PORTC)是AVR處理器的組合語言指令,請自行查詢它的作用。

      thanks,
      jeffrey

  6. 老師您好

    想請教一下 , 當我在編譯 diy16_02 時
    會出現 ” ‘homePage’ was not declared in this scope ” 的錯誤碼

    以及很多類似以下類型的錯誤碼
    ” C:\Users\user\Documents\Arduino\libraries\Webduino/WebServer.h:198:21: error: ‘prog_uchar’ does not name a type
    void writeP(const prog_uchar *data, size_t length);”

    因為都使用書籍提供資料 , 並沒有自己編寫的部分
    想請問老師這該如何除錯呢?

    先謝謝老師指教(鞠躬)

    1. 從錯誤訊息看來,是因為homePage變數沒有定義,請先編譯diy16_3_1.ino測試看看。

      thanks,
      jeffrey

  7. 16_02可以正常編譯了 , 謝謝老師!!!

    ================================================
    另外嘗試過程中還有幾個小問題想請教老師
    Q1
    16-10 頁中的 “<a href=”http://swf.com.tw/”>筆者的網站</a>” 超連結網頁程式碼放進內文中時會出現以下錯誤碼:
    sketch_dec25a:38:3: error: invalid operands of types ‘const char [129]’ and ‘const char [29]’ to binary ‘operator/’
    “”;
    ^
    exit status 1
    invalid operands of types ‘const char [129]’ and ‘const char [29]’ to binary ‘operator/’
    問題 : 是否需要再加入什麼程式庫在才能使用 指令呢? 還是說我加入的方式錯誤呢?

    Q2
    嘗試將 動手做6-2 小夜燈的程式寫入其他面板時情況如下 :
    >>接Arduino NANO面板 序列阜視窗 完全沒有Ana訊號
    >>接Arduino MICRO面板 序列阜視窗 有ANA訊號 , 但是LED燈沒反應(有接12針腳)
    問題 : 是否在將程式搬到其他較小塊面板時需要做什麼調整呢?

    Q3
    若希望 “家裡以外” 的網域連回到家裡的 Arduino面板server 做一些參數設定 , 想請問老師在程式碼中要怎麼設定呢?
    (因為我看書上都是以 192.168…. 作為網址範例 , 但實際真正在用會從家裡外面做家裡的狀況的觀測跟控制)

    以上幾個問題再麻煩老師有空時幫後進解惑 , 先謝謝老師!
    (若問題篇幅太大會有礙版面 , 再請老師提供其他比較FAQ的管道跟頁面 , 感恩 :)) )

    1. 1. 假設要把超連結文字加入16-4頁上方的首頁homePage,程式如下:

      P(homePage) = 
          "<!doctype html>"
          "<html><head><meta charset=\"utf-8\" />"
          "<title>Arduino微網站</title>"
          "</head><body>"
          "<p>這是微網站的首頁。</p>"
          "<a href=\"http://swf.com.tw\">筆者的網站</a>"
          "</body></html>";
      

      2. 這兩個板子都跟UNO板採同一系列處理器,也是5V供電,只是多了兩個類比輸入腳;LED接在第13腳,請嘗試接其他類比腳試試看,記得程式碼也要改。

      3. 請參閱這一篇回應,以及15-10頁說明。

      thanks,
      jeffrey

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top