博客專欄

EEPW首頁 > 博客 > 使用Arduino開發(fā)板時(shí)的最常見錯(cuò)誤

使用Arduino開發(fā)板時(shí)的最常見錯(cuò)誤

發(fā)布人:utmel 時(shí)間:2023-05-23 來源:工程師 發(fā)布文章

  眾所周知,Arduino開發(fā)板是一款便捷靈活、方便上手的開源電子原型平臺(tái),它構(gòu)建于開放原始碼simple I/O介面版,并且具有使用類似Java、C語言的Processing/Wiring開發(fā)環(huán)境。能通過各種各樣的傳感器來感知環(huán)境,通過控制燈光、馬達(dá)和其他的裝置來反饋、影響環(huán)境,因此應(yīng)用比較廣泛。但在使用過程中容易出現(xiàn)一些錯(cuò)誤,下面一起來看看:

Arduino開發(fā)板.jpg

圖1: Arduino開發(fā)板

  1.無法識(shí)別Arduino開發(fā)板

  這是指計(jì)算機(jī)無法識(shí)別連接到計(jì)算機(jī)的Arduino開發(fā)板的情況。發(fā)生這種情況時(shí),該板通常不會(huì)列在Arduino IDE的端口列表下,有時(shí)會(huì)在設(shè)備管理器下標(biāo)記為USB2.0。

無法識(shí)別Arduino板.jpg

圖2: 無法識(shí)別Arduino板

  解決方案

  當(dāng)使用某些使用CH340g USB 到串行轉(zhuǎn)換器芯片,而不是FTDI (FT232RL) 和標(biāo)準(zhǔn)Arduino開發(fā)板使用的其他芯片的廉價(jià)Arduino 克隆時(shí),就會(huì)發(fā)生這種情況。標(biāo)準(zhǔn)Arduino開發(fā)板使用的USB轉(zhuǎn)串行芯片驅(qū)動(dòng)程序始終與Arduino IDE 安裝文件一起打包,因此當(dāng)安裝IDE時(shí),驅(qū)動(dòng)程序會(huì)自動(dòng)安裝到PC上。為了能夠使用這個(gè)基于CH340g USB 到串行轉(zhuǎn)換器的Arduino開發(fā)板,必須下載并安裝該芯片的驅(qū)動(dòng)程序??梢詮拇随溄酉螺d驅(qū)動(dòng)程序,安裝它就像單擊下面顯示的安裝界面上的安裝按鈕一樣簡(jiǎn)單。

Arduino開發(fā)板上連接的端口.jpg

圖3: Arduino開發(fā)板上連接的端口

  完成此操作后,現(xiàn)在應(yīng)該能夠在Arduino IDE上找到板所連接的端口。

  2. 板子不同步

  通常,發(fā)生這種情況時(shí),將無法將代碼(盡管IDE有時(shí)會(huì)顯示“已上傳”)上傳到Arduino開發(fā)板,并且IDE將顯示錯(cuò)誤代碼;“ avrdude:stk500_getsync():不同步:resp=0x00 ”。

  解決方案

  不同步:RESP = 0×00是翻譯為“一個(gè)通用響應(yīng)的Atmega芯片不工作的Arduino的”。當(dāng)這種情況發(fā)生時(shí),有很多事情可能是錯(cuò)誤的。以下是可用于清除此錯(cuò)誤的一些步驟。

 ?、俅_保Arduino(包括屏蔽)上的數(shù)字引腳0和1沒有任何連接。

 ?、诖_保在工具菜單下選擇了正確的通訊端口和板卡。

 ?、郯碅rduino上的重置按鈕幾次并重新上傳代碼。

 ?、軘嚅_Arduino與PC的連接并重新連接。

 ?、葜貑rduino IDE。

  如果其中任何一個(gè)不起作用,可能是時(shí)候嘗試在PC上使用不同的Arduino開發(fā)板,或者在另一臺(tái)PC上使用“有故障”的Arduino開發(fā)板。如果發(fā)現(xiàn)問題出在PC上,請(qǐng)重新安裝Arduino IDE。但是,如果“有故障”的Arduino開發(fā)板是問題的根源,最終的解決方案是使用Arduino固件刷新板。如果上述方法均無效,則可能是需要更換Arduino開發(fā)板了。

  3. 代碼在電源復(fù)位時(shí)不啟動(dòng)

  這指的是Arduino在通電時(shí)不運(yùn)行上傳到它的草圖的情況,并且在大多數(shù)情況下,只是恢復(fù)到與引導(dǎo)加載程序關(guān)聯(lián)的閃爍草圖。

  解決方案

  就像處理的其他問題一樣,有很多因素可能會(huì)導(dǎo)致這種情況。

  如果開發(fā)板死機(jī)并且什么也不做,應(yīng)該檢查代碼以確保沒有在它出現(xiàn)時(shí)向開發(fā)板發(fā)送串行數(shù)據(jù)。當(dāng)Arduino打開時(shí),引導(dǎo)加載程序在最初的幾秒鐘內(nèi)偵聽計(jì)算機(jī)向它發(fā)送一個(gè)新的草圖以上傳到電路板。如果沒有收到新的草圖,不久后,引導(dǎo)加載程序?qū)⒊瑫r(shí)并運(yùn)行上傳到板上的最后一個(gè)草圖。如果代碼在前幾分鐘發(fā)送串行數(shù)據(jù),則引導(dǎo)加載程序不會(huì)超時(shí),并且上載到板上的最后一個(gè)草圖也不會(huì)啟動(dòng)。

  如果在開發(fā)板一啟動(dòng)就發(fā)送串行數(shù)據(jù)是項(xiàng)目的重要組成部分,可能需要找到一種方法來給它一些延遲,以阻止串行數(shù)據(jù)在Arduino啟動(dòng)時(shí)立即到達(dá)。如果進(jìn)行調(diào)整會(huì)影響項(xiàng)目要執(zhí)行的任務(wù),那么可能必須使用外部編程器將草圖上傳到電路板,因?yàn)橐龑?dǎo)加載程序可以被它們繞過。

  如果電路板沒有死機(jī)但返回到Arduino閃爍草圖(引腳13上的LED 時(shí)不時(shí)閃爍),一個(gè)簡(jiǎn)單的解決方法是使用Arduino引導(dǎo)加載程序刷新開發(fā)板,因?yàn)殚_發(fā)板上的引導(dǎo)加載程序可能已損壞.

  4. 無效的設(shè)備簽名錯(cuò)誤

  當(dāng)嘗試將代碼上傳到與在Arduino IDE 上的工具>開發(fā)板列表下選擇的開發(fā)板不同的開發(fā)板時(shí),會(huì)顯示此錯(cuò)誤。發(fā)生此錯(cuò)誤的原因通常是目標(biāo)板上的設(shè)備簽名與IDE上選擇的板的簽名不同。

無效的設(shè)備簽名錯(cuò)誤.jpg

圖4: 無效的設(shè)備簽名錯(cuò)誤

  解決方案

  解決此錯(cuò)誤的方法很簡(jiǎn)單,只需確保在Arduino IDE 上選擇正確的開發(fā)板即可。如果這不起作用,則可能需要使用最新版本的Arduino引導(dǎo)加載程序刷新微控制器。

  5. Launch4j 錯(cuò)誤

  Arduino IDE 在加載之前和加載時(shí)有時(shí)需要一段時(shí)間,如果單擊任何內(nèi)容,它將顯示Launch4J 錯(cuò)誤,如上所示。Launch4j是一種用于將Java應(yīng)用程序(jar)包裝在Windows本機(jī)可執(zhí)行文件中的工具,允許它們用作常規(guī)的Windows程序。

  Arduino IDE本身是用JAVA編寫的,此錯(cuò)誤是由于Arduino IDE 提供的Java運(yùn)行時(shí)環(huán)境(JRE) 庫的不兼容而發(fā)生的。

Launch4j錯(cuò)誤.jpg

圖5: Launch4j錯(cuò)誤

  解決方案

  根據(jù)經(jīng)驗(yàn),可以通過關(guān)閉PC的藍(lán)牙或WiFi連接這樣簡(jiǎn)單的方法來清除此錯(cuò)誤。但是,更完整和永久的解決方案是用最新版本替換Arduino包中的JRE。

  6. 串口已使用

  這可能是最容易解決的錯(cuò)誤之一。當(dāng)您在串行監(jiān)視器打開時(shí)嘗試將代碼上傳到Arduino 時(shí)(如果使用最新的IDE 版本,這不再是問題),或者當(dāng)嘗試在Arduino與其他軟件或設(shè)備通信時(shí)啟動(dòng)串行監(jiān)視器時(shí),通常會(huì)發(fā)生這種情況通過串口。本質(zhì)上,當(dāng)嘗試將Arduino串行端口同時(shí)用于兩個(gè)不同的事情時(shí),就會(huì)發(fā)生這種情況。

串口已使用.jpg

圖6: 串口已使用

  解決方案

  就像IDE建議的那樣,關(guān)閉可能使用com端口的所有其他軟件/工具(包括串行監(jiān)視器/繪圖儀)。如果不確定特定軟件,請(qǐng)拔下Arduino。當(dāng)將其插回時(shí),它應(yīng)該已準(zhǔn)備就緒。

  7.Sketch上傳成功但沒有任何反應(yīng)

  此錯(cuò)誤類似于上面已經(jīng)處理的一些其他錯(cuò)誤。對(duì)于此錯(cuò)誤,Arduino IDE 會(huì)提示代碼已成功上傳,但開發(fā)板什么也不做。

  解決方案

  確保在IDE中選擇的板與目標(biāo)板相同。這可能是草圖尺寸大于電路板容量的結(jié)果。檢查草圖尺寸并使用上面提到的一些方法來減小尺寸。最后,當(dāng)使用嘈雜的電源時(shí),可能會(huì)發(fā)生此錯(cuò)誤。確保電源足夠穩(wěn)定。

  8. 不滿意鏈接錯(cuò)誤

  這可能是進(jìn)入此列表的唯一罕見錯(cuò)誤。當(dāng)PC上有舊版本的通信庫時(shí)會(huì)發(fā)生這種情況,很可能來自以前的安裝。

  解決方案

  要解決此錯(cuò)誤,請(qǐng)?jiān)?System/Library/Frameworks/JavaVM.framework/或PC的CLASSPATH或PATH環(huán)境變量的目錄中搜索 comm.jar 或 jcl.jar 。

  9. 草圖太大

  當(dāng)代碼大于該特定Arduino開發(fā)板的閃存時(shí),會(huì)發(fā)生此錯(cuò)誤。例如,Arduino Uno的閃存大小為32Kb,其中2KB已被Arduino引導(dǎo)加載程序使用。如果您應(yīng)該上傳大小大于32Kb的代碼,Arduino將顯示此警告。

草圖太大.jpg

圖7: 草圖太大

  解決方案

  如上所述,當(dāng)您的草圖大于您正在使用的特定開發(fā)板的閃存時(shí),就會(huì)發(fā)生這種情況,因此,要解決此問題,必須找到減少代碼占用空間量的方法。實(shí)現(xiàn)這一目標(biāo)的一些技巧包括:

  ①在可能的情況下,使用整數(shù)數(shù)據(jù)類型代替浮點(diǎn)數(shù)。

 ?、谠诼暶髯兞繒r(shí),盡可能使用“const”限定符。

  ③僅包含必要的庫。在可能的情況下,使用最重要的庫的輕量級(jí)版本。

 ?、芤话愀倪M(jìn)代碼。開發(fā)有助于使您的代碼更短且通常更輕量級(jí)的算法。

 ?、菀粋€(gè)更激進(jìn)的解決方案是將項(xiàng)目轉(zhuǎn)移到另一個(gè)板子上,比如 Arduino Mega,與 Uno 相比,它具有更大的閃存。

  10.java.lang.StackOverflowError

  在處理草圖時(shí),Arduino使用一些正則表達(dá)式進(jìn)行處理,有時(shí)會(huì)在遇到某些與字符串相關(guān)的錯(cuò)誤(例如缺少引號(hào))時(shí)感到困惑。

  解決方案

  通過再次查看代碼,尤其是使用字符串序列的部分,可以解決此錯(cuò)誤。確保引號(hào)完整,正確使用反斜杠等。

  結(jié)語

  以上就是使用Arduino開發(fā)板時(shí)的最常見錯(cuò)誤介紹了。由于Arduino開發(fā)板的種種優(yōu)勢(shì),越來越多的專業(yè)硬件開發(fā)者已經(jīng)或開始使用Arduino來開發(fā)他們的項(xiàng)目、產(chǎn)品;并且越來越多的軟件開發(fā)者使用Arduino進(jìn)入硬件、物聯(lián)網(wǎng)等開發(fā)領(lǐng)域;連大學(xué)課題,自動(dòng)化、軟件,甚至藝術(shù)專業(yè),也紛紛開展了Arduino相關(guān)課程。

關(guān)注公眾號(hào)“優(yōu)特美爾商城”,獲取更多電子元器件知識(shí)、電路講解、型號(hào)資料、電子資訊,歡迎留言討論。

*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: Arduino 開發(fā)板

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉