《超圖解Arduino 互動設計入門》第三版內容更新說明

《超圖解Arduino 互動設計入門》第三版封面

作者:趙英傑
出版社:旗標科技股份有限公司
出版日期:2016.12.24
頁數:656頁,雙色印刷。
定價:NT$680

本書已授權Arduino原廠發行多國語言版本。

自第一版推出三年多,感謝眾多讀者和老師的支持與推薦。Aduino原廠(arduino.org)執行長Federico Musto先生,在上海的某間書店翻閱到本書後,大為讚賞,到台灣與筆者聯繫,讓本書有機會推廣到國際舞台,2017年第一季英文版將率先問市。

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

第三版插圖更新

本書DIY實驗單元的控制板,採用主流的Arduino UNO。書中所有插圖都是筆者採用Adobe Flash軟體手繪完成(註:Flash在2015年末更名為Animate CC),零組件也全都改用手繪插圖取代照片。

底下是第二版裡的可變電阻照片:

可變電阻照片

第三版的可變電阻手繪插畫:

可變電阻手繪插畫

第三版的Arduino Uno控制板依據arduino.org生產的版本繪製,並修正插孔和編號之間的視差,圖說字體也換成更易讀的樣式。

第三版的Arduino Uno控制板

這是第二版書籍的Arduino Uno控制板插圖:

第二版書籍的Arduino Uno控制板插圖

除了控制板和零組件,第三版裡的許多Arduino IDE軟體開發工具,以及「序列埠監控視窗」截圖,也改用手繪方式呈現,讓圖像更清晰銳利。這是第二版採用的IDE及「序列埠監控視窗」螢幕截圖:

Arduino IDE截圖

Arduino IDE截圖

序列埠監控視窗截圖

這是第三版的手繪介面:

Arduino IDE手繪插圖

 

Arduino IDE手繪插圖

 

序列埠監控視窗手繪插圖

第三版內容更新

第二版第17和18章中的Flash互動單元主題,在第三版以PDF格式收錄在光碟,當作附錄G和H。第三版重新改寫17和18章,加入觸控按鍵以及門禁系統應用等主題。這兩個章節的內容改编自筆者網站的下列文章:

第三版書籍第10章的「動手做10-4:使用atoi()轉換字串成數字」單元,補充「序列接收字元」的說明,取自筆者網站的「Arduino序列埠通訊程式Serial.read()讀取到 ÿ 字元的補充說明」這篇貼文。

第14章的藍牙控制單元,明確採用HC-05和HC-06模組,並依筆者網站的下列貼文改寫:

第7章新增一個「串聯兩個74HC575」單元,改寫自筆者網站的「串入並出的IC 74HC595補充說明:串聯多個74HC595 的Arduino程式示範」。

第1章的Arduino控制板簡介,參考「Arduino傳奇故事:開發秘辛」這篇貼文改寫。

延伸閱讀

Posts created 467

183 thoughts on “《超圖解Arduino 互動設計入門》第三版內容更新說明

  1. 赵老师您好,我是大陆读者,偶然的机会看到这个网站,果断通过台湾代购购买了《图解lot》《图解auduino》第三版,非常喜欢您的作品!请问您网站介绍的程序实例不是arduino IDE平台界面,用的是什么平台界面哪?感觉很好。谢谢

    1. 非常感谢!我常用的是从arduino.cc下载的IDE,在Windows 10上运行。

      thanks,
      jeffrey

  2. 赵老师又要出第3版了,太厉害了,第二版(简体版)还在手中品味,物联网的那本(繁体版)最近刚从淘宝上买到,大陆书店没有销售!
    我心中有个一直有个疑惑,向赵老师请教下:
    芯片引脚输出高电平时,最大输出电流参数是怎么得来的?为什么会有这个最大电流限制?输出高电平依我的理解相当于有一个5V的电源正极直接引出吗?极端点如果我把它直接接地不行吗?或者说将它直接接一个LED或者电机不行吗?

    还请赵老师解释下,谢谢,期盼赵老师的回复

    1. 非常感谢!

      假设微控制器是把水力转变成机械动力的水车,若衔接在水车的负载太大,可能会造成水车的传动轴、齿轮断裂;同样地,微控制器通过电能运作,依照逻辑演算结果输出信号。

      如果微控制器要达成高功率信号输出,就像把晶体管9013替换成TIP120一样,芯片的体积和发热量都会增加。你也可以想像成微控制器的体积太小,无法容纳大水管,只能通过小水管传递信息,所以它的驱动能力也有限。

      thanks,
      jeffrey

  3. 赵老师您好,本书3版,第4-3页,开关的打开和关闭图,发光二级管的状态区别表示是不是更好?

    1. 嗯,不过,假如拿掉LED旁边的两个箭号,那个符号就变成一般的二极管而不是LED了。

      thanks,
      jeffrey

  4. 第5-11页,“偶数(EVen):当资料位元有奇数个1时,同位检查位元将被设定成0,补成偶数。”,应该是设定成1吧?

    1. 要凑成偶数个1,所以你是对的,需要设定成1,感谢纠错!

      thanks,
      jeffrey

  5. 赵老师您好,本书6-9页光敏电阻程序中有一处印刷错误:if (ans >=700){……},变量ans 应该是val。 另外,val = analogRread(A0)…… digitalWrite(13,HIGH)…… 既然定义了变量Cds = A0; LED = 13; 上述函数变量A0和13是否由Cds和LED替换为好?

  6. 纠错:7-15页 “将74HC595的三个接脚都设定成输出”,应为: “将Arduino的三个接脚都设定成输出”。
    “最后再把「输出致能」设置为高电位……” ,应为 “最后再把「暂存器时脉」设置为高电位……”

    1. 非常感谢!我会将句子改成:「将Arduino连接74HC595的三个接脚都设定成输出:」

      thanks,
      jeffrey

  7. 老师您好,9-19页的程序中,用74HC595,库文件用LiquidCrystal_SR3W.h (三线),按照头文件的说明接线,结果16×2LCD只显示前8行,后半屏是空的,请老师指教为盼。

  8. 感谢老师指引,您的推荐使我知道了LCD驱动,不仅可并行、I2C串行、寄存器移位串行(FMalpartida的库),还可以SPI串行。74HC595 SPI程序测试后,现象依旧,估计可能是LCD 问题,待买新的后再做测试。

  9. 老師你好我想請問,如何把藍芽接收的數值給ARDUINO裡面設定的變數a呢

  10. 老师您好,上次我提问的1602LCD显示一半的问题,果然是LCD出问题,今天买到新的后,已验证,再次感谢老师指导!

  11. 我有個程式不知道怎摸打 我是個高中生
    我們再找有沒有隱藏密碼的密碼
    比如說 98 41 86 52 764 53
    隱藏密碼為4.5
    實體密碼順序為123
    只要密碼裡成立就可以開鎖

    1. 可以用迴圈從輸入密碼的第一個字開始讀取、比對,如果找到目標字元,就先把它存入一個陣列。
      先把比對目標存入一個陣列,例如:{‘4’, ‘5’}
      並且宣告一個空白的陣列
      從第一個字元開始讀取密碼,若比對到目標值,則將它存入空白陣列,再往下比對第2個字元…
      比對完畢後,再確認空白陣列的值和目標密碼是否一致(確認順序)\

      或者,不用建立空白陣列,而是宣告一個預設值為0的整數。
      只要遇到比對正確的字元,就將整數值加1,
      若後面沒有遇到其他比對值,就不累加整數,
      因為是從頭開始比對,所以順序不用再確認。
      假設目標密碼是兩個字元,
      整數值也應該是2。

      大概就這樣吧~

      thanks,
      jeffrey

  12. 老師你好 !
    我剛試著第二版的範例檔案名為diy16_3_1.ino在編輯器中執行Verify見出現以下error請解答謝謝!

    Arduino: 1.8.1 (Windows 7), Board: “Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)”

    In file included from C:\backup\arduino\sample\ch16\diy16_3_1\diy16_3_1.ino:6:0:
    :
    :

    exit status 1
    ‘htmlHead’ was not declared in this scope

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

  13. 老師您好 !

    我依照您的指示用了arduino 1.6.13版並更新了第二版書中的範例diy16_3_1.ino中所需要的程式庫而編譯亦完成,但仍然出現一句問題….

    WARNING: Category ‘Language’ in library ArduinoStreaming is not valid. Setting to ‘Uncategorized’

    這句是什麼問題 ? 請老師指教謝謝 ! 另外想請教編輯器版本是不是不可用比1.613新的版本 ? 怎選擇合適的編
    輯器版本 ?

    1. 那個警告訊息的意思是「Streaming程式庫的語言分類是無效的,設定成’未分類’」,你可以忽這個訊息。

      Arduino 1.6.2版本之後內建一個程式庫管理員(Library Manager),因應這項更新,程式庫資料夾裡面多了一個描述程式庫的檔案 library.properties。例如,Mifare RFID-RC522模組的MFRC522程式庫資料夾,就包含library.properties,其內容如下:

      name=MFRC522
      version=1.1.8
      author=GithubCommunity
      maintainer=miguelbalboa
      sentence=Arduino RFID Library for MFRC522 (SPI)
      paragraph=Read/Write a RFID Card or Tag using the ISO/IEC 14443A/MIFARE interface.
      category=Communication
      url=https://github.com/miguelbalboa/rfid
      architectures=avr,STM32F1,teensy
      

      關於library.properties的詳細說明,請參閱葉難翻譯的Arduino IDE 1.5:程式庫規格書

      至於IDE版本,我自己並沒有習慣立即更新到最新版,因為新版本的程式編譯器採用的語法版本可能和現有的程式不完全相容,所以我的電腦安裝了兩個版本,一個是用手動安裝(下載ZIP格式直接解縮使用)的新版本,另一個則是測試後沒發現問題的舊安裝版本(目前採用的是1.6.13)。

      thanks,
      jeffrey

  14. 老師您好!

    那個steaming程式庫我copy了隨書附送光碟內的這個程式庫就没有再出現這個警告了,我覺得上載程式到arduino前没有奇怪的警告字眼出現會比較好.

  15. 趙老師您好,請問英文版也會在台灣發行嗎?希望在台灣也能買得到。另外,由於您的書真的鉅細彌遺、深入淺出,我們學校的國二、國三,人手皆一本作為指定教材,目前上課最大的問題是,做投影片時需要一直拿手機拍書的圖片,如果能提供投影片或式圖片檔等教學資源,就更方便了。最後還是要感謝您出了這本書,讓學生更容易上手了!

    1. 感謝彭老師的支持,本書第二版有提供教師簡報檔,第三版的簡報檔會在開學前編輯完成。至於英文版,將來可以在arduino.org網站購買,但是通路和銷售端的詳細情況我也不是很清楚。

      我會把老師的e-mail轉交給本書的編輯黃晰暐先生,請黃兄提供老師教學資源網站的網址和帳號,謝謝您!

      thanks,
      jeffrey

  16. 老師您好!
    由於不同函式庫裡面還會再#include其他的函式庫,因此在有些範例裡使用的函式,無法在它#include的函式庫裡找到。

    請問有沒有辦法根據範例裡使用的函式尋找其所在的.cpp與.h檔案。

    1. 請問是哪一個範例執行有問題?

      C語言的前置處理程序具備條件判斷式,以底下的敘述為例,若已再其他程式中定義SAMPLE,則引用A.h,否則引用B.h:

      #ifdef SAMPLE
      #include "A.h"
      #else
      #include "B.h"
      #endif
      

      thanks,
      jeffrey

    2. 老師您好
      我使用WiFiClient這個範例,裡面只有#include ,但我在這個函示庫.h與.cpp內均無找到
      localIP()、status()這兩個函式,但範例沒有問題,想請問該如何尋找這兩個函式的所在位置?
      謝謝!

  17. 趙老師,

    你好!
    我是第二版的讀者, 照書做實驗 , 獲益良多!

    有一問題想請教老師:
    書裏, page 10-34, 自走車以 ” byte dir = 0; // 記錄行車狀態, 0 代表 ‘前進’ , 1 代表 ‘右轉’ ”
    我是新手, 不了解為何程式中 dir 毋須設定 : 0 代表 ‘前進’ , 1 代表 ‘右轉’ ;
    但程式卻知道 0 代表 ‘前進’ , 1 代表 ‘右轉’;
    可否請老師進一步說明, 謝謝!

    1. 自走車的狀態碼是由我們(程式設計人員)自行決定的,當dir為0時,執行處理前進的程式碼;當dir為1時,執行右轉的程式。0和1本身沒有意義,你也可以改成2和3或其他數字,但是條件判斷式也要跟著修改。

      thanks,
      jeffrey

  18. 趙老師,我有一個問題。

    我想要問在「超圖解Arduino互動設計」當中的diy15_3的程式,我拿宿舍的網路線插上Arduino板,電源插筆電的USB,在序列埠視窗上顯示 : My IP address: 192.168.1.113。再來利用diy15_2的程式碼,但是將192.168.1.113 做ping的反應卻沒有回應。
    然後用Arduino的WebServer的範例檔案,在序列監控埠視窗顯示 “server is at 255.255.255.255” 或者有時候會變成 “server is at 0.0.0.0″,在Chrome也無法顯示網頁,請問這個問題該怎樣解決比較好。

    1. 校園和宿舍網路應該都是用動態IP,請把setup()部份的程式替換成15-29頁的程式碼。

      thanks,
      jeffrey

  19. 趙老師!請問這本書有沒有附贈光盤,或者說書上的例程和資料哪裏可以下載?

  20. 老師您好:
    關於Mifare RFID 卡的教學只有寫在<>嗎?
    還是在您其他書中也有教學呢?
    謝謝老師

  21. 從第一版到第三版我都有入手.我們是Openlab.Taipei 在寶藏巖駐村的社群團體,每週三晚上六點會舉行”週三來碗Arduino”的活動,很多時候會向初學者介紹這本書,甚至空間有存放書本讓前來對Arduno有興趣的朋友參考,對於趙老師的作品相當有興趣,在此希望能邀請趙老師到Openlab.Taipei 實體空間作分享或非正式的拜訪遊玩,不知道要如何聯絡,借此地向趙老師提出邀請…如有打擾敬請原諒
    社團臉書https://www.facebook.com/groups/openlab.taipei/
    發文者臉書https://www.facebook.com/lovemouse520
    寶藏巖社團空間營運者臉書https://www.facebook.com/honki?fref=ufi
    謝謝您!!

    1. 謝銠鈑您好:

      久仰大名!也非常感謝您的分享~我住在台中,也許暑假期間我會帶小孩北上過去玩玩。

      thanks,
      jeffrey

  22. 老師您好:

    第三版的4-19頁最上方的線路圖,
    是不是缺少了將LED接地的跳線?

    Best regards,

    Kevin

    1. 不需要跳線,因為麵包板旁邊的兩個標示+, -的插槽,在水平上是相連的,

      thanks,
      jeffrey

  23. 圖示上並沒將pin腳畫出來,所以沒辦法很清楚地知道它是接到哪個位置

    1. 第三版的4-19頁最上方的線路圖,
      電阻跟LED都沒有pin腳。

    2. 咦……請問你的書是幾月出版的版本?我的是一月的版本,4-19頁的圖說,電阻和LED都有畫出引腳:

      4-19頁的插圖

      thanks,
      jeffrey

    1. 我今天到書店確認,果然遺漏了,真是抱歉,正確的圖如上文,感謝告知!!

      thanks,
      jeffrey

  24. 老師你好:
    第三版,3-17頁的 【long ans = 4000 * 100; // 計算結果 : 6784】中的 long,應改成 int 。

  25. 老師你好:我在台中女中有組織一個Arduino社群,想邀請您來演講,如何聯絡你?

  26. 趙老師您好
    自四年前迄今,拜讀一二三版受益良多,在第三版的附錄C的實作程式DIYappC,關於下面這個部分,除了書上的程式碼跟光碟裡的程式碼不同之外,內容也有點不理解:
    if (turnOn) { // 如果 LED 目前是點亮的…
    // 比較現在時間與之前記錄的時間
    diffTime = millis() – oldTime;
    // 如果時間差大於或等於延遲時間(10 分鐘)…
    if (diffTime >= delayTime) {
    turnOn = false; // 設定為「關閉 LED」,(至此都可以理解)
    }
    } else { // 若設定為「關閉 LED」,(這裡開始不懂了……,為何要關閉LED呢?)
    digitalWrite(ledPin, LOW); // 關閉 LED
    digitalWrite(stopPin, HIGH); // 相當於「按著」停止鈕
    delay(100); // 經 0.1 秒後…
    digitalWrite(stopPin, LOW); // 「放開」停止鈕, 構成「按一下」的動作

    感謝您費心解惑。
    讀者趙天覺

    1. hi tanj:

      非常感謝你的支持,也謝謝你的慧眼,嗯~那個 “若設定為「關閉 LED」” 部份的else敘述應該要搬家,如下:

        if (turnOn) {                   // 如果 LED 目前是點亮的...
          // 比較現在時間與之前記錄的時間
          diffTime = millis() - oldTime;
          // 如果時間差大於或等於延遲時間(10 分鐘)...
          if (diffTime >= delayTime) {
            turnOn = false;            // 設定為「關閉 LED」
      
            digitalWrite(ledPin, LOW);   // 關閉 LED
            digitalWrite(stopPin, HIGH);   // 相當於「按著」停止鈕
            delay(100);                    // 經 0.1 秒後…
            digitalWrite(stopPin, LOW);    // 「放開」停止鈕,
                                          // 構成「按一下」的動作
          }
        }
      
      

      thanks,
      jeffrey

  27. 請問三版有收錄nrf24l01的使用方式嗎
    (三公分短短的那種)
    因為手上二版並無收錄
    其他手上書籍收錄也不完整
    而且中文網站上也不詳盡
    請問老師會做相關書籍或網站嗎
    或是有推薦書籍
    謝謝老師

    1. nRF24L01已經有人編寫相關的Library. 如果我沒記錯的話,Arduino與nRF24L01之間的溝通,比較多人使用的library好像是RF24和Mirf(不過這個是好幾年前的事了…不確定現在有沒有更好用的Library…),這二個在Github上都可以找到。如果你想自己先試試看的話,可以下載下來嘗試。
      如果要比較進階或是全盤了解這個模組的使用和原理,就要等Cubie將它收錄在新版的書藉裡或是PO到這個Blog了~~~
      呵呵~~~我也在期待中~~~

  28. 老師你好
    我是初學者,我購買了你的第三版超圖解ARDUINO互動設計 ! 因為我想如何利用 ARDUINO組件製作光劍的控制程式及音效, 不知道是否可以引導我一個初步的方向讓我可以去實行嗎 ?謝謝

    1. DIY光劍這個話題在Arduino官方討論區挺熱門的,像這個討論串就有80多頁。發起討論的作者也公開他的光劍(USaber)原始碼

      在原始碼網頁有提到主要元件,除了Arduino和光劍本體之外,主要的感測器和電子元件包括:

      • 振動和加速度感測器:例如SW-200D振動開關和MPU-6050加速度感測器。
      • 聲音播放器:例如DFPlayer(MP3播放器)

      另外,搜尋關鍵字Arduino Lightsaber也可以找到許多範例。

      願原力與你同在!
      jeffrey

  29. 趙老師好,
    我是大陸讀者,購買了您的《超圖解Arduino互動設計入門》(大陸第一版,亦即臺灣第二版),在閱讀時發現一個錯誤:書(包括臺灣第三版)中所有的UNO板子數位13口都打上了波浪線(~PWM輸出),而UNO13口原本是不支持的。希望注意一下。
    第三版順利在大陸出版!

    注:本文由網絡翻譯軟體轉換為繁體,若有錯誤,請諒解!

    1. 感谢告知!年初有位学校老师跟本书的黄编辑提到此事,所以台湾第三版的第4或第5刷之后的UNO板图像已经修正,谢谢!

      thanks,
      jeffrey

  30. 我是剛接觸Arduino的菜鳥
    當初就是看到您的書圖示是手繪風格…感覺沒那麼生澀和冷硬所以才買哩 🙂
    玩這個…我覺得[接腳線路] [程式館版本] [範例]是學習的障礙
    希望老師能出一本詳述Arduino模組 (EX LCD1602,LCD12864,DHT11….很多啦)接腳與簡單新範例
    導引菜鳥們獲得基本知識與引發興趣….至於專案等基本功練成再進階看老師著作
    官方的範例…對沒有電子零件常識與程式基礎的人來說(EX 我)…有點困難
    每次編譯都錯誤一大堆也不知道那邊出問題 (版本有差啊!)
    呵呵…就是希望老師能寫給國中生高中生看的那種啦 (繞一圈終於說出訴求了!!)

    1. 我會好好反省,想想第四版的改版內容。
      不瞞您說,其實這本書設定的對象就是高中生 😛
      至於LCD1602和DHT11,其實第10章都有說明。
      非常謝謝您的寶貴意見!

      thanks,
      jeffrey

  31. 老師您好 :

    吾人拜讀大作 超圖解Arduino 互動設計入門 第三版

    有關4-18頁範例(下簡稱腳本A) 以及 4-25頁範例(下簡稱腳本B) 中 腳本的轉換練習
    兩個練習吾人均以 8~13 腳位練習 (六顆LED)
    並適當修改腳本程式碼

    測試輸出結果亦如預期 LED運作並無異常
    但遇到一個狀況 :

    在硬體(接線)完全未改變的情況下

    載入腳本A —> LED燈亮度較亮
    載入腳本B —> LED燈亮度較暗

    其差異吾人認為約有 50% 以上

    這讓我有些想不透
    當然吾人有思考過是否為手頭上的 UNO 開發板有所異常
    但因為手上沒有第二片板子測試

    想請問是否可能是手頭上的 UNO 板良率上有狀況
    或是 Arduino 開發板 有吾人尚未瞭解的硬體特性 ?

    尚乞不吝賜教
    並請教安
    非常感謝

    1. 本書編輯黃昕暐先生去年也有跟我談到,有個讀者提出類似的問題,但是經他實際測試,亮度沒有差別。欸…拍謝,這個原因我也不了解。

      thanks,
      jeffrey

  32. 老師好恭喜出了第3版,我的第2版還在摸索中。目前碰到一個問題是否可以幫我解答?目前在練習第二版 動手做 10-6 自動迴避障礙物的自走車,但是我是 B行馬達控制板,書上說 B型馬達程式在光碟的 diy10_6B.ino 裡面,我的光碟有刮傷無法打開這一段,請問我有什麼辦法可以取得這一段程式嗎?

    1. 趙老師 請問有機會一起出材料包嗎?其實我真的一點都不懂,光是看著書所介紹在去網路上買零件真是不容易,對於完全不同領域的我來說,花費不少時間在找零件。

    2. 《超圖解Arduino互動設計入門》零件清單請參閱這一篇貼文,之前看到網拍有商家販售零件包,另外,「台灣樹莓派」公司的創辦人sosorry先生跟我說過,他們公司有販售本書的材料包,有興趣再請你詢問該公司的客服人員。

      thanks,
      jeffrey

    3. 這是B型馬達控制板的程式碼:

      // 動手做10-6:自動迴避障礙物的自走車
      // 詳細的程式說明,請參閱第十章,10-32頁。
      
      const byte TrigPin = 13;      // 超音波模組的觸發腳
      const int EchoPin = 12;       // 超音波模組的接收腳
      const int dangerThresh = 580; // 10cm × 58
      const byte speed = 100;       // 馬達的 PWM 輸出值
      
      long distance;  // 暫存接收訊號的高電位持續時間
      const byte EA = 6; // 馬達 A 的致能接腳
      const byte IA = 7; // 馬達 A 的正反轉接腳
      const byte EB = 5; // 馬達 B 的致能接腳
      const byte IB = 4; // 馬達 B 的正反轉接腳
      
      byte dir = 0; // 記錄行進狀態,0 代表「前進」,1 代表「右轉」
      
      void stop() { // 馬達停止
        analogWrite(EA, 0); // 馬達 A 的 PWM 輸出
        analogWrite(EB, 0); // 馬達 B 的 PWM 輸出
      }
      
      void forward() { // 馬達轉向:前進
        analogWrite(EA, speed); // 馬達 A 的 PWM 輸出
        digitalWrite(IA, HIGH);
        analogWrite(EB, speed); // 馬達 B 的 PWM 輸出
        digitalWrite(IB, HIGH);
      }
      
      void backward() { // 馬達轉向:後退
        analogWrite(EA, speed); // 馬達 A 的 PWM 輸出
        digitalWrite(IA, LOW);
        analogWrite(EB, speed); // 馬達 B 的 PWM 輸出
        digitalWrite(IB, LOW);
      }
      
      void turnLeft() { // 馬達轉向:左轉
        analogWrite(EA, speed); // 馬達 A 的 PWM 輸出
        digitalWrite(IA, LOW);  // 馬達 A 反轉
        analogWrite(EB, speed); // 馬達 B 的 PWM 輸出
        digitalWrite(IB, HIGH);
      }
      
      void turnRight() { // 馬達轉向:右轉
        analogWrite(EA, speed); // 馬達 A 的 PWM 輸出
        digitalWrite(IA, HIGH);
        analogWrite(EB, speed); // 馬達 B 的 PWM 輸出
        digitalWrite(IB, LOW);  // 馬達 B 反轉
      }
      
      long ping() { // 超音波感測程式
        digitalWrite(TrigPin, HIGH); // 觸發腳設定成高電位
        delayMicroseconds(5);    // 持續 5 微秒
        digitalWrite(TrigPin, LOW);  // 觸發腳設定成低電位
      
        return pulseIn(EchoPin, HIGH); // 測量高電位的持續時間(μs)
      }
      
      void setup(){
        pinMode(TrigPin, OUTPUT);  // 觸發腳設定成「輸出」
        pinMode(EchoPin, INPUT);   // 接收腳設定成「輸入」
        pinMode(IA, OUTPUT);
        pinMode(IB, OUTPUT);
      }
      
      void loop(){
        distance = ping(); // 讀取障礙物的距離
        if (distance > dangerThresh) { // 如果距離大於 10cm...
          if (dir != 0) { // 如果目前的行進狀態不是「前進」
            dir = 0; // 設定成「前進」
            stop();  // 暫停馬達 0.5 秒
            delay(500);
          }
          forward(); // 前進
        } 
        else {
          if (dir != 1) { // 如果目前的狀態不是「右轉」
            dir = 1; // 設定成「右轉」
            stop();  // 暫停馬達 0.5 秒
            delay(500);
          }
          turnRight(); // 向右轉
        }
        delay(1000);   // 持續 1 秒
      }
      

      thanks,
      jeffrey

  33. 赵老师您好,我是大陆的读者。刚刚入手您的Arduino互动设计入门,收获很多。只不过在做第16章的例子时,您引入了”WebServer.h”,我可以确认我的IDE中有这个文件库,但是到验证或编译时,到
    void defaultCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
    {
    server.httpSuccess();
    它就停在server这儿了,我试了很久都没有办法,不知能否赐教一二。

    1. 我之前测试光盘里的diy16_01.ino编译正常;刚刚把Arduno IDE升级到1.8.5版,编译diy16_4.ino发生了错误。

      查看错误信息之后发现,问题出在新的版本,所有函数参数都不能省略,像diy16_01.ino当中的这一行:

      
      void defaultCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
      
      

      在diy16_4.ino简化成:

      
      void defaultCmd(WebServer &server, WebServer::ConnectionType type)
      
      

      这样就发生编译错误了。请将所有自定义函数都补上后面两个参数,也就是”, char *, bool”,这样就不会出错了。

      thanks,
      jeffrey

  34. 赵老师您好,又麻烦您了。
    我检查了一下,我的书是第三版的,你光盘里面的语句没有省略相关的两个参数。但是我还是没有办法编译,下面是我刚下载1.8.5IDE的部分错误报告。下面的问题估计还是在WebServer.h,但这个文件是你光盘里面带的,我查找更新库文件时,这个文件没有更新,出现的是”Webduino Built-In 未知版本 INSTALLED“。
    您是否可以给我一个电邮信箱,这样我可经截个图给你,或把相关的文件发给你,给你看得更清楚。
    再次打扰您了,抱歉!

  35. 趙老師 我想再進行 IoT 實作入門的書’中diy2_1.ino 上傳沒有出現錯誤訊息。
    可是我點網頁都無法連上。有把IP改成這台電腦的IP了 Gateway也有改。
    謝謝

    1. 請先確認你的網路是動態還是靜態IP,如果是靜態IP,手動設置每個裝置的IP都不能相同,假設你的電腦IP是192.168.0.3,Arduino的IP可以設定成192.168.0.33之類的。

      thanks,
      jeffrey

  36. 趙老師您好, 請教一下:

    Arduino uno 與 arduino marco pro 板子在序列埠上有什麼不同寫法嗎?

    我從以下網址找了一個程式,是一個數學題目的解法
    https://sites.google.com/site/csjhmaker/arduino-ji-chu/arduino-xue-xi-fang-fa

    我覺的很奇怪的地方是我用「Arduino uno 」上傳程式成功後,可以在序列埠監控視窗得到計算結果。
    但是我用「arduino marco pro 」上傳程式成功後,序列埠監控視窗是空白沒有任何回應

    可以請教這是為什麼嗎?設定問題?

    程式碼
    int i=1;
    void setup() {
    Serial.begin(9600);
    for(long b=1 ; b<1000 ; b++){ //b=1~1000逐一代入
    for(long m=1 ; m<19 ; m++){ //m=1~19 逐一代入
    long delta = b*b-10*m ;
    double ans = sqrt(delta); // sqrt() 為開根號的動作函式
    if(ans-long(ans)==0){ // long()為取整數後存成長整數,原數-取整數=小數部分
    Serial.print("i="); // i為第幾組滿除條件解的個數
    Serial.print(i);
    Serial.print(" , ");
    Serial.print("b=");
    Serial.print(b);
    Serial.print(" , ");
    Serial.print("c=");
    Serial.print(2*m);
    Serial.print(" , ");
    Serial.print("delta=");
    Serial.print(delta);
    Serial.print(" , ");
    Serial.print("ans=");
    Serial.println(ans);
    i++;
    }}}}
    void loop() {
    }

    1. 如果你的Micro Pro板的微控制器型號是ATmega32U4,請參閱這一篇留言,在在setup()函式加入底下的while迴圈:

      void setup() {
        Serial.begin(9600);
        while (!Serial) {
          ; // 等待序列埠連線
        }
      
        : 其餘的程式碼
      }
      

      thanks,
      jeffrey

  37. 趙老師您好:
    請問在編譯diy16_4_switch.ino時,出現錯誤訊息
    invalid conversion from ‘void (*)(WebServer&, WebServer::ConnectionType)’ to ‘void (*)(WebServer&, WebServer::ConnectionType, char*, bool)’ [-fpermissive]
    如何解決?謝謝!

  38. 最近剛購得你第三版的書,個人非常喜歡而且受益良多,而且每個手繪圖之精美,更是讓我喜歡,也很佩服你真的花了很多時間與力氣編輯此書。

    讀到現在目前只有一個小小的圖問題跟你報告一下,或許可以提供給你下一版修正的參考?

    Page 4-19
    上圖的部分,你或許是少畫了電阻與LED的接腳?雖然不妨礙閱讀,但總是希望此書能更接近完美。

    如果作者是故意的,那也請忽略此留言。

    謝謝

    祝順心

    1. 啊,我一留言就發現上面有人回報過了QQ 請忽略我的留言,感謝

    1. 關於Arduino英文版書籍…我去年底收到樣書,先校閱一遍:

      Arduino英文版內文

      他們內部的人員(來自英語系國家)也在最近校閱完畢,位於瑞士總部的美術編輯正在修改,我昨天也根據他們的要求更新了幾張圖片。

      thanks,
      jeffrey

  39. 請問趙老師,Appendix E 的 BTRobotControl.aia 原始檔案可以在那兒找到?

    謝!

  40. 趙老師您好:

    再問一下,光碟內一個 AppInventorOfflineJune222016 的目錄,應該是 AppInventor 的單機版。

    拷到硬盤解壓後,沒有 exe 文件,只找到 batch file 和 windows command script file,無法執行,請問如何處理?

  41. 趙老師您好:

    還是請教 App Inventor offline 版本的問題。

    下載了 JDK 9.0.4,WinStartAIServer.cmd 還是無法執行,出現了以下報警訊息:

    Error: Could not create the Java Virtual Machine.
    -Xbootclasspath/p is no longer a supported option.
    Error: A fatal class exception has occurred. Program will exit.

    請問是不是 Java 版本的問題?

    有勞了!

    1. 我剛剛使用Java 8 SDK安裝測試沒問題,請先移除JDK 9和JRE 9,然後下載安裝Java SE Development Kit 8。初次登入離線版App Inventor時,瀏覽器上面會出現Internal Server Error之類的錯誤訊息,第二次登入就沒有出現,我測試編譯一個小小的Hello World!程式沒出現異常。

      thanks,
      jeffrey

發佈留言

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

Related Posts

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

Back To Top