作者:趙英傑
出版社:旗標科技股份有限公司
出版日期: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 IDE軟體開發工具,以及「序列埠監控視窗」截圖,也改用手繪方式呈現,讓圖像更清晰銳利。這是第二版採用的IDE及「序列埠監控視窗」螢幕截圖:
這是第三版的手繪介面:
第三版內容更新
第二版第17和18章中的Flash互動單元主題,在第三版以PDF格式收錄在光碟,當作附錄G和H。第三版重新改寫17和18章,加入觸控按鍵以及門禁系統應用等主題。這兩個章節的內容改编自筆者網站的下列文章:
- Mifare RFID-RC522模組實驗(一):讀取Mifare RFID卡的UID識別碼
- Mifare RFID-RC522模組實驗(二):C語言的結構(struct)與類型定義(typedef)說明
- Mifare RFID-RC522模組實驗(三):讀取與寫入資料
- Arduino 4×4薄膜鍵盤模組實驗(一):按鍵掃描程式原理說明
- Arduino 4×4薄膜鍵盤模組實驗(二):減少佔用Arduino的數位接腳
- Arduino 4×4薄膜鍵盤模組實驗(三):結合LCD顯示器的密碼輸入介面
- 電容式觸控開關實驗(一):RC延時電路應用
- 電容式觸控開關實驗(二):觸控式LED調光器
第三版書籍第10章的「動手做10-4:使用atoi()轉換字串成數字」單元,補充「序列接收字元」的說明,取自筆者網站的「Arduino序列埠通訊程式Serial.read()讀取到 ÿ 字元的補充說明」這篇貼文。
第14章的藍牙控制單元,明確採用HC-05和HC-06模組,並依筆者網站的下列貼文改寫:
- HC-05與HC-06藍牙模組補充說明(一)
- HC-05與HC-06藍牙模組補充說明(二):連接電路
- HC-05與HC-06藍牙模組補充說明(三):使用Arduino設定AT命令
- 藍牙模組補充說明(四):無線連結兩個Arduino控制板
- HC-05藍牙模組補充說明(五):透過藍牙上傳Arduino程式碼
第7章新增一個「串聯兩個74HC575」單元,改寫自筆者網站的「串入並出的IC 74HC595補充說明:串聯多個74HC595 的Arduino程式示範」。
第1章的Arduino控制板簡介,參考「Arduino傳奇故事:開發秘辛」這篇貼文改寫。
趙老師您好:
重裝 JDK 8,已可以了。
無限感謝!
不客氣~
thanks,
jeffrey
赵老师 你好 我来自大陆 ,大陆又出版您的这本arduino 第三版吗
没有,我只授权《科学出版社》出版第2版。
thanks,
jeffrey
赵老师,您好,看过《超圖解Arduino 互動設計入門》一书,觉着里边的内容很适合讲解给学生听,请问可有电子版吗?
您好,本书没有电子版,但是第二版有授权科学出版社出版简体中文版,谢谢!
thanks,
jeffrey
趙老師我買了您的Arduino互動設計一書,寫得非常清楚與好!! 我想詢問第五章Serial 序列通訊,
我想透過Arduino 去擷取RS-232 信號!! 目前看到內容有寫Transmit code中 要填寫Ascii code
如 #AASUM2 Cr與 $C,DR,CH*SUM1 CRLF 內容,這部分要如何填寫呢/! Recive code
的一樣有Ascii code 如$R ,AD,CH*N/P,0.00*SUM1CRLF 等,請問這樣要如何寫呢!? 有方向嗎?! 謝謝老師
從你的描述看來,那應該是指訊息的「格式」,CRLF代表訊息以\r\n字元結尾(參閱5-14頁)、SUM也許是數據的加總,請詳閱該裝置的技術文件說明。
thanks,
jeffrey
您好我目前已訂購此書但尚未收到,想先請問需要購買哪些搭配的套件才能配合此書閱讀呢?
hi vanessa:
本書的控制板採用Arduino Uno,完整的零件清單請參閱《超圖解Arduino互動設計入門》零件清單。
妳可以依據感興趣的主題和實驗,決定先採購哪些零件。
thanks,
jeffrey
趙老師,您好,想請教《超圖解Arduino 互動設計入門》第3版跟第2版最大差別在哪? 插圖嗎?
請問第2版是以甚麼型號的arduino板子為撰寫題材?(uno?或其他?)感恩!
差別在內容,都是用UNO板。
thanks,
jeffrey
老師您好:
我根據您書上第十四章連接藍芽晶片與LED燈,當NOTEBOOK(Win10版本)找到藍芽時,顯示COM4連出,COM5連入,
接著開啟AccessPort時,我 串口設定試過COM4,COM5,但都不能讓LED亮,也沒有顯示”BT is ready”請問這是什麼原因呢?
請檢查藍牙模組的RX和TX,跟Arduino板的接線是否相反。
thanks,
jeffrey
老師您好~
您的書寫的真好,我受益良多。
–
在這小弟有問題請教
我根據書中16-7
我上傳diy16_02.ino檔後
我的網頁出現亂碼
�o�O�L�����������C
此外,我發現光碟提供的程式碼跟書中有多出char *, bool)。
void defaultCmd(WebServer &server, WebServer::ConnectionType type, char *, bool)
麻煩老師解惑~
這是我網站的截圖:https://ppt.cc/fOChvx
hi nelson:
請確認一下你的瀏覽器的網頁編碼是否為UTF-8,
函式定義後面的這兩個參數:char *, bool
僅列出參數的類型char和bool,代表函式不接收這兩個參數。
只有在接收與解析GET參數時,才會用到這兩個參數,
如16-31頁的第一行程式碼。
thanks,
jeffrey
老師您好~
這是我的程式碼:
P(homePage) =
“”
“”
“”
“Arduino微網站”
“”
“這是微網站的首頁。”
“”;
麻煩老師過目
應該跟我的一樣吧…文字編碼指定UTF-8。
thanks,
jeffrey
老師您好~
我確認過程式碼了是正確的,但一樣出現亂碼。
我用Chrome 或 IE處理器打開都發現一樣的結果…
我複製了相同的程式碼,打了一份html檔,他就沒有出現亂碼。
動手做15-2我用UTF-8也成功。
不知道是否與Webserver.h的內建程式有關?
有勞老師了~~
老師您好~
我剛剛重新試過了,終於成功了!
感謝告知 🙂
thanks,
jeffrey
趙老師您好:敝人有購買第2版,但在燒錄到其他MCU的部分著墨較少,雖然也在網路上查詢許多資料,但敝人最近在這部分遇到很困擾的問題,原本燒錄於ATtiny85的程式,均可正常運作,但是燒錄於ATtiny44時,相對應的腳位號碼也已經在程式中修改好,卻無法像ATtiny85那樣運作正常,試了2天了,實在不知道是哪裡出了問題?照理說,這2個MCU應該沒有太大差異才是?
我手邊沒有ATtiny44,大致比對了一下ATtiny85和ATtiny44的技術文件,我猜想你是因為需要更多控制腳位才改用ATtiny44。
它們兩個是不同系列,記憶體容量也差了一倍,若排除這些條件,假如連閃爍LED之類的程式都無法正常運作的話…
拍謝,我也不知道問題出在哪…
thanks,
jeffrey
謝謝老師的回覆!
其實Blink是可以正常工作的,記憶體的部分,燒錄時軟體並沒有反應,也都可以順利燒進去,但是有可能燒錄時沒問題,但是實際執行程式的時候卻記憶體不足嗎?下面是燒錄時的記憶體訊息:
草稿碼使用了 2710 bytes (66%) 的程式儲存空間。上限為 4096 bytes。
全域變數使用了 46 bytes (17%) 的動態記憶體,剩餘 210 bytes 給區域變數。上限為 256 bytes 。
或者買一顆ATtiny84回來用看看?
附帶一提:
在網路上查到的ATtiny44應對於Arduino的腳位很奇怪,有二種配置,腳位編號不同,也是我疑惑的原因之一。
從記憶體的訊息看來是OK的,大概只能從序列埠輸出訊息檢測運作狀態了。
thanks,
jeffrey
好,我再努力看看,謝謝老師撥冗解答!
拍謝,沒幫上忙~
thanks,
jeffrey
光老師的書就幫很大的忙了,讓我從程式門外漢,慢慢進入有趣的程式領域,但這問題實在太讓我苦惱了,所以只好上來求助老師,真不好意思讓老師花時間了…後面測試結果,再更新給老師知道。
期待你的作品分享!謝謝!
thanks,
jeffrey
趙老師,
請問此本書2或3版的英文版是否已經出版,我想要買英文版,相對應的英文書名為何?作者名?以方便買對書。
本書英文版已經由Arduino S.R.L公司(arduino.org)創辦人Federico Musto先生新創的What’s Next公司在義大利出版,連同書本所有DIY實驗的零組件,以及兩個Arduino控制板(Uno和Uno Wi-Fi)一起販售,商品名稱是yellow D.I.Y. kit。英文版共610頁,沒有中文版的附錄A~H。
thanks,
jeffrey
趙老師 ~ 想請教一個問題
我有個100顆的LED燈條(WS2812B),用ARDUINO UNO +5V作為電源,燈光會閃爍,於是我用兩顆18650串聯然後用降壓模組將他降壓到5V作為燈條的電源,可是卻發現燈條的燈光比用UNO板子還不穩定,燈條的LED顏色亂跑,這會是甚麼原因呢? 18650的電流不是更充足嗎? 另外,我有用MP3模組(DFPlayer Mini),用ARDUINO UNO供電可以正常跑,用18650串聯降壓供電也是發生異常,請問會是電流的問題嗎?
是電流不足的原因,建議使用5V/3A或更高的電源供應器供電給燈條。
thanks,
jeffrey
趙老師你好
很喜歡超圖解Arduino這本書
解釋的非常詳盡又涵括所有必要的電子電路與程式設計概念
真的是最適合我們這種初學者的一本書
讓我收穫無窮
關於書的內文
有一個小地方想要請教老師 希望不會太擔誤時間
在2018年9月出版的三版10刷繁體中文版本裡, P5-23頁
上方的藍色框框裡寫道
關於這行,
想請教這個時候是想透過序列埠監控視窗傳送資料給Arduino,
或是想透過Arduino經由數位1(Arduino Tx)傳送資料?
若是前者, 那這行是否應該改成
較為恰當呢?
一點小小意見
不知道是否正確
還請老師不吝指教
拍謝,你的訊息裡面可能包含HTML標籤,所以重點部份被留言系統過濾掉了。
如果要在此輸入HTML標籤,請將小於和大於符號分別改成這兩個編碼:
< 和 >
thanks,
jeffrey
老師好,
我修改一下尖括號再重貼一次
====
關於這行,
“”” 假若選擇”NL”,那麼當Arduino送出”1″時,實際傳送的資料… “””
想請教這個時候是想透過序列埠監控視窗傳送資料給Arduino,
或是想透過Arduino經由數位1(Arduino Tx)傳送資料?
若是前者, 那這行是否應該改成
“”” 假若選擇”NL”,那麼當送出”1″給Arduino時,實際傳送的資料… “””
較為恰當呢?
非常感謝gene的糾錯~「假若選擇”NL”,那麼當送出”1″給Arduino時,實際傳送的資料…」的說法才是對的。
thanks,
jeffrey
老師好,
請問書內有zigbee相關的實作嗎?
找了很多書都沒有zigbee,
網路上幾乎都是XBee相關,需安裝其他軟體,想要單純zigbee模組相關
還請老師不吝指教
沒有ZigBee的相關實作,因為對大多數的自造者來說,ZigBee沒有價格優勢。
一塊Arduino的Wi-Fi擴展板最初要價台幣上千元,ESP8266問世之後,價格降到台幣100多元,而且內建微控制器。
Wi-Fi和藍牙也新增了mesh通訊標準,相形之下,ZigBee又少了一項優勢。
我在三年前有寫幾篇ZigBee的文章,提供你參考。
thanks,
jeffrey
請問有打算出電子書的規劃嗎?謝謝!
據我所知,沒有,發行由出版社全權處理。
thanks,
jeffrey
請問老師︰第 2-11頁中的電阻色環的誤差率之值,金色與銀色的數值是否誤植(相反)?
的確是相反了,金色是±5%,非常感謝糾錯!!
thanks,
jeffrey
請問超圖解arduino互動設計入門目前出到第幾版
目前是第三版,謝謝!
thanks,
jeffrey
趙老師您好,想請教您 我是否能把手機的電量資料傳送至arduino上,進而控制led燈的亮和暗,如果可以,想請問您該從何開始著手和大概的方法是如何。非常謝謝您!
軟體程式方面,你需要撰寫手機App和Arduino兩方的程式。
手機App有多種開發工具和程式語言可選,以JavaScript語言的Cordova為例,它的battery status(電量狀態)外掛,可傳回0~100的電量整數值。
取得電量數值後,可透過手機的序列埠、藍牙或Wi-Fi等介面,傳遞給Arduino控制板。
thanks,
jeffrey
請問老師
關於跑馬燈範例程式(二)使用for迴圈
若要改成若要改成來回循環的跑馬燈的話,要如何修改增加程式?
PS.外面網路範例程式都是用兩個for迴圈,兩個變數加加減減,就能來回無窮迴圈。
書本上的範例程式,我卡在else,只能來回一次就不亮了…
我修改程式如下:
// 跑馬燈範例程式二
// 詳細的程式說明,請參閱第四章,4-24頁。
const byte startPin = 6; // 宣告儲存起始腳位的常數
const byte endPin = 13; // 宣告儲存結束腳位的常數
byte lightPin = startPin; // 儲存目前點亮的腳位的變數
byte rightPin = endPin; // 自己增加目前點亮的腳位的變數
void setup() {
for (byte i = startPin; i <= endPin; i++) {
pinMode(i, OUTPUT);
digitalWrite(i, HIGH);
delay(100);
}
}
void loop() {
for (byte i = startPin; i <= endPin ; i++) {
digitalWrite(i, HIGH);
}
digitalWrite(lightPin, LOW);
if (lightPin = startPin; j–) {
digitalWrite(j, HIGH);
}
digitalWrite(rightPin, LOW);
if (rightPin >= startPin) {
rightPin –;
}
else {
lightPin = startPin;
}
}
delay(100);
}
這是改自DIY 4-4的第一種寫法,用兩個獨立的for迴圈:
第二種寫法,不需要for迴圈。
用一個變數(index)儲存每次的累加數字:1或-1
int8_t資料類型相當於char,其值介於-127~128
thanks,
jeffrey
作者您好:
最近依照書中的紅外線發射raw格式的方式實作(page 12-16), 發現無法成功.
後來發現不需刪除第一個數字.我使用IRremote的dump範例程式來印出數到的紅外線raw格式,
看一下他印出的方式會跳過第0個,程式片段如下:
for (int i = 1; i rawbuf[i]*USECPERTICK, DEC);
}
else {
Serial.write(‘-‘);
Serial.print((unsigned long) results->rawbuf[i]*USECPERTICK, DEC);
}
Serial.print(” “);
}
不知是不是程式庫版本的問題?
嗯,應該是吧,我沒用新版的程式庫試過,感謝告知!
thanks,
jeffrey
趙老師好
上次留言回覆內容讓我受益良多,我自己改良做出RGB LED跑馬燈的程式,每來回一次換顏色。
下次再改中斷計時看看。
我的問題是第八章用MAX7219控制矩陣圖像,我想要改成七段顯示器做計數器功能。
我改出來了…但無法理解程式是什麼進位?若把八位數分成兩個四位數獨立或同時計數。
// 動手做8-7:在7段顯示器顯示數字
// 詳細的程式說明,請參閱第八章,8-23頁。
#include // 引用 SPI 程式庫
byte symbol[16] = {
B01111110, // 0
B00110000, // 1
B01101101, // 2
B01111001, // 3
B00110011, // 4
B01011011, // 5
B01011111, // 6
B01110000, // 7
B01111111, // 8
B01111011, // 9
B01110111, // A
B00011111, // b
B01001110, // C
B00111101, // d
B01001111, // E
B01000111 // F
};
unsigned int counter = 0;
unsigned int digit_base = 10;
// 定義 MAX7219 暫存器
const byte NOOP = 0x00; // 不運作
const byte DECODEMODE = 0x09; // 解碼模式
const byte INTENSITY = 0x0A; // 顯示強度
const byte SCANLIMIT = 0x0B; // 掃描限制
const byte SHUTDOWN = 0x0C; // 停機
const byte DISPLAYTEST = 0x0F; // 顯示器檢測
#define NUM_OF_DIGITS (8)
#define MAX7219_DIGIT_REG(pos) ((pos) + 1)
// 設定 MAX7219 暫存器資料的自訂函數
void max7219(byte reg, byte data) {
digitalWrite (SS, LOW);
SPI.transfer (reg);
SPI.transfer (data);
digitalWrite (SS, HIGH);
}
void setup () {
pinMode(SS, OUTPUT); // 將預設的 SS 腳(數位 10)設成「輸出」
digitalWrite(SS, HIGH); // 先在 SS 腳輸出高電位
//(代表「尚不選取周邊」)
SPI.begin (); // 啟動 SPI 連線
Serial.begin(9600);
max7219 (SCANLIMIT, 7); // 設定掃描 8 行
max7219 (DECODEMODE, 0); // 不使用 BCD 解碼
max7219 (INTENSITY, 8); // 設定成中等亮度
max7219 (DISPLAYTEST, 0);// 關閉顯示器測試
max7219 (SHUTDOWN, 1); // 關閉停機模式(亦即,「開機」)
// 清除顯示畫面(LED 矩陣中的八行都設定成 0)
for (byte i = 0; i < 8; i++) {
max7219 (i + 1, symbol[0]);
}
}
void loop () {
int i;
unsigned int number;
unsigned int digit_value;
byte byte_data;
number = counter++;
// turn off display first
max7219 (SHUTDOWN, 0);
for ( i = 0; i < NUM_OF_DIGITS; i++) {
digit_value = number % digit_base;
number /= digit_base;
max7219 (MAX7219_DIGIT_REG(i) , symbol[digit_value]);
}
max7219 (SHUTDOWN, 1);
delay(10);
}
趙老師好
我已經寫出來了…再增加變數宣告,多一個FOR迴圈,這樣就能有兩個四位數計數時間。
功能:高位元增加計數,低位元倒數。
不知趙老師有更好的語法?
謝謝~~
#include // 引用 SPI 程式庫
byte symbol[16] = {
B01111110, // 0
B00110000, // 1
B01101101, // 2
B01111001, // 3
B00110011, // 4
B01011011, // 5
B01011111, // 6
B01110000, // 7
B01111111, // 8
B01111011, // 9
B01110111, // A
B00011111, // b
B01001110, // C
B00111101, // d
B01001111, // E
B01000111 // F
};
unsigned int counter = 60;
unsigned int counter1 = 0;
unsigned int digit_base = 10;
// 定義 MAX7219 暫存器
const byte NOOP = 0x00; // 不運作
const byte DECODEMODE = 0x09; // 解碼模式
const byte INTENSITY = 0x0A; // 顯示強度
const byte SCANLIMIT = 0x0B; // 掃描限制
const byte SHUTDOWN = 0x0C; // 停機
const byte DISPLAYTEST = 0xF; // 顯示器檢測
//#define DP_FLAG (B10000000)
#define NUM_OF_DIGITS (8)
#define MAX7219_DIGIT_REG(pos) ((pos) + 1)
// 設定 MAX7219 暫存器資料的自訂函數
void max7219(byte reg, byte data) {
digitalWrite (SS, LOW);
SPI.transfer (reg);
SPI.transfer (data);
digitalWrite (SS, HIGH);
}
void setup () {
pinMode(SS, OUTPUT); // 將預設的 SS 腳(數位 10)設成「輸出」
digitalWrite(SS, HIGH); // 先在 SS 腳輸出高電位
//(代表「尚不選取周邊」)
SPI.begin (); // 啟動 SPI 連線
max7219 (SCANLIMIT, 7); // 設定掃描 8 行
max7219 (DECODEMODE, 0); // 不使用 BCD 解碼
max7219 (INTENSITY, 8); // 設定成中等亮度
max7219 (DISPLAYTEST, 0);// 關閉顯示器測試
max7219 (SHUTDOWN, 1); // 關閉停機模式(亦即,「開機」)
// 清除顯示畫面(LED 矩陣中的八行都設定成 0)
for (byte i = 0; i < 8; i++) {
max7219 (i + 1, symbol[0]);
}
}
void loop ()
{
int i;
unsigned int number;
unsigned int number1;
unsigned int digit_value;
unsigned int digit_value1;
number = counter–;
if (counter + 1 60) {
counter1 = 0;
}
// turn off display first
max7219 (SHUTDOWN, 0);
for ( i = 0; i < NUM_OF_DIGITS; i++) {
digit_value = number % digit_base;
number /= digit_base;
max7219 (MAX7219_DIGIT_REG(i) , symbol[digit_value]);
}
for ( i = 4; i < NUM_OF_DIGITS; i++) {
digit_value1 = number1 % digit_base;
number1 /= digit_base;
max7219 (MAX7219_DIGIT_REG(i) , symbol[digit_value1]);
}
max7219 (SHUTDOWN, 1);
delay(1000);
}
我明天或後天會更新一篇文章說明。
11/18已更新「一個74HC595連接多個七段顯示器」。
thanks,
jeffrey
赵老师,你好,我是大陆的读者,购买的是您第二版的书,在第16章里使用您光盘里的16_1的程序编译时确实通不过,后来翻阅您网站前面的留言发现也有大陆的朋友碰到了相同的问题,所以使用了您在留言里提供的Webduino库后,顺利编译成功,可能是附带光盘里的库文件有些问题。
关于赵老师的超图解Python系列图书,是否有计划在大陆出版简体呢?必竟繁体版由于语言习惯及名称的不同,学习起来还是不太方便,期待您的新作能在中国大陆地区出版。
感谢告知!八月初我有收到中国水利水电出版社 智博尚书分社杨编辑的来信,洽询《超图解Python程式设计入门》简体版授权。但因为该书部份内容所涉及的云端服务,例如LINE通信、Google试算表和云盘以及YouTube,都被和谐了,简体版势必要大幅改写,所以我并没有打算授权简体中文版。
预祝圣诞快乐!
jeffrey
赵老师,我是您大陆的读者。我在使用光盘提供的16-4从浏览器控制远端的灯光开关的程序时,Arduino上的连接的LED灯默认状态下是亮的,在选择“关”后点“送出”按钮,LED灯只是瞬间闪了一下还是处于长亮状态,您的程序没有进行任何修改,LED连接的端口和程序里设置的一致,我使用的是IDE 1.8.9版,请老师帮忙解惑!谢谢!
请在接收POST数据的postCmd函数中,加入类似底下的代码,让Uno板在串口监视器输出接收到的值,看看是否符合预期:
thanks,
jeffrey
void post(WebServer &server,WebServer::ConnectionType type,char *,bool)
{ char name[16],value[16];
server.httpSuccess();
if(type==WebServer::POST)
{
while(server.readPOSTparam(name,16,value,16))
{
if (strcmp(name,”msg”)==0)
{server<<"”<<value<<"”;}
if(strcmp(name,”light”)==0)
{
server<<"灯光已经”;
if(strcmp(value,”ON”)==0)
{
server<<"打开”;
digitalWrite(13,1);
Serial.println(String(“data:”)+value);
}else{
server<<"关闭”;
digitalWrite(13,0);
Serial.println(String(“data:”)+value);
}
}
}
}
}
赵老师,上面是我修改过的的post函数,我分别在LED灯打开和关闭两段语句里增加了您提供的程序,通过串口查看器可以看到显示的Value值和我的预期一致。当我点“开”,Value值在串口查看器中显示”data:ON”,当我点”关”,Value值在串口查看器中显示”data:OFF”,但无论是开还是关,LED灯只会瞬间闪一下后仍然长亮。
奇怪了…从串口的信息看来,解析POST数据的程序运行无误,请检查一下代码还有什么地方控制第8脚的LED输出?
thanks,
jeffrey
赵老师您好:
在《Arduino互动设计入门》动手做16-3″建立接收POST表单数据的自定义命令”的例子中关于
char name[16],value[16];
server.readPOSTparam(name,16,value,16)
的具体含义和参数使用方法能讲的具体一些吗?特别是有多个内容传递过来的时候是如何存储的?比如传递过来的有单选项和文本框,我该如何去调用传递过来的内容呢?
下面是我写的程序,form里是单选项、文本框、按钮,选择单选项后,确定文本框输入的信息是否正确,给出相应的回复,经过测试发现,程序仅能对单选项进行判断后就停止了,不会进行接下来的文本框判断,还请赵老师在百忙之中帮忙查阅,谢谢!祝您圣诞快乐!
程序如下:
#include
#include
#include
#include
#include
static byte mac[] = { 0xF0, 0x7B, 0xCB, 0x4B, 0x7C, 0x9F };
IPAddress ip(192, 168, 101, 66);
IPAddress subnet(255, 255, 255, 0);
IPAddress gateway(192, 168, 101, 1);
WebServer webserver(“”, 80);
Servo servo;
P(htmlHead) =
“”
“”
“列车座位认证管理系统”
“” ;
P(htmlForm)= “”
“欢迎使用列车座位认证管理系统”
“请输入您的车票编号(左上角红色编号)或身份证号(或护照号)”
“请选择编号类型:身份证”
“车票编号”
“编号:”
“”
“”;
P(htmlFoot)=””;
void defaultCmd(WebServer &server,WebServer::ConnectionType type,char *,bool)
{
server.httpSuccess();
if(type!=WebServer::HEAD)
{
server.printP(htmlHead);
server.printP(htmlForm);
server.printP(htmlFoot);
}
}
void postCmd(WebServer &server,WebServer::ConnectionType type,char *,bool)
{
char name[18],value[18];
server.httpSuccess();
server.printP(htmlHead);
while(server.readPOSTparam(name,18,value,18)){
if (strcmp(name,”style”)==0){
if(strcmp(value,”CNcode”)==0){
if(strcmp(name,”msg”)==0){//程序到这里就不走了
if(strcmp(value,”410104198003160514″)==0){
server<<"欢迎您乘座本次列车,座椅将在10秒钟后自动为您打开,请确保座椅附近无任何障碍物,以防夹伤!”;
delay(1000);
servo.write(90);
}else{
server<<"对不起,您的信息有误,请返回上一页重新填写,或联系乘务员予以解决”;
}
}
}else{;
if(strcmp(name,”msg”)==0){//程序到这里就不走了
if(strcmp(value,”000316″)==0){
server<<"欢迎您乘座本次列车,座椅将在10秒钟后自动为您打开,请确保座椅附近无任何障碍物,以防夹伤!”;
delay(1000);
servo.write(90);
}else{
server<<"对不起,您的信息有误,请返回上一页重新填写,或联系乘务员予以解决”;
}
}
}
}
}
server.printP(htmlFoot);
}
void setup() {
// put your setup code here, to run once:
Ethernet.begin(mac, ip, gateway, subnet);
webserver.setDefaultCommand(&defaultCmd); // 处理「首页」请求
webserver.addCommand(“sw”, &postCmd); // 处理「sw表单处理页面」请求
// webserver.addCommand(“form.html”, &formCmd); // 处理「表单页面」请求
webserver.begin();
servo.attach(8);
}
void loop() {
// put your main code here, to run repeatedly:
webserver.processConnection();
}
Arduino是微电脑控制板,只适合传送物联网设备的少量数据,从你的网页表单的需求看来,请改用电脑的服务器。
thanks,
jeffrey
赵老师:
您好!
《超图解Arduino互动设计入门》第2版中讲述的Webduino扩展库目前除了可以用于W5100Ethernet扩展卡外,是否还能支持其它型号的扩展卡?
目前通过学习了Webduino扩展库写了一个完整的小程序并在W5100卡上调试通过,但由于W5100是有线网卡使用起来不太方便,想请教赵老师有没有其它型号的无线网卡也可以使用Webduino扩展库,这样我的程序就不用过多的修改了。
谢谢!
Wi-Fi无线网卡我目前都使用ESP8266,它有自己的扩展库,例如,连接无线网络的ESP8266WiFi.h、建立Web服務器的ESP8266WebServer.h以及扮演前台的ESP8266HTTPClient.h。他们的指令和Webduino不太一样,所以要自行改写程序。
thanks,
jeffrey
您好,請問超圖解Arduino 互動設計入門英文版的書名是什麼?謝謝
請參閱:《超圖解Arduino互動設計入門》英文版:開箱!
thanks,
jeffrey
趙老師您好
我有拜讀老師的 入門設計互動,想請教一個問題,
我的水質感應器是4~20mA輸出的訊號,
要如何接到Arduino顯示訊號狀態?
只有類比訊號輸入電壓,該怎麼接呢?加250歐姆電阻?
有範例程式嗎?
謝謝!
我猜想你指的是20mV電壓,如果是的話,因為訊號電壓太弱,可採用第六章介紹的運算放大器處理。拍謝,我沒用過這類型感測器。
thanks,
jeffrey
趙老師,您好
請問如果我要燒錄程式碼到麵包板Arduino,
但是USB to TTL的轉接線沒有DTR腳,
可以直接在按下上傳按鈕後馬上把RESET腳接地來達到效果嗎?
謝謝!
可以,上傳之前先維持在Reset狀態,開始上傳時再放開。
thanks,
jeffrey
趙老師,您好
我還有個問題想請教,
所謂的開始上傳指的是按下上傳按鈕後?
還是按下上傳按鈕且編譯完之後?
感謝!
編譯完畢之後。
thanks,
jeffrey