Kĩ năng mềm
Lỗi của Arduino? Và các lỗi thường gặp khi lập trình Arduino
Chương trình của bạn phải trải qua rất nhiều phần để được "vận chuyển" và "thi hành" trên một mạch Arduino! Và vì thế, nào một trong những phần ấy có vấn đề thì bạn sẽ không thể nào upload được chương trình lên Arduino. Những phần đó bao gồm:
Sau đây là một số hướng dẫn cụ thể cho từng vấn đề được nêu ra
Driver là gì? Driver là một phương tiện phần mềm cung cấp cho bạn một phương thức để cho phần mềm của bạn (ví dụ Arduino IDE) kết nối với một mạch điện tử (ví dụ như Arduino Uno). Trong trường hợp của Arduino, driver sẽ tạo một cổng Serial ảo (hoặc là cổng COM ảo). Mạch Arduino Uno và Mega 2560 sử dụng bộ driver cơ bản (USB CDC) để xây dựng phương thức kết nối đến vi điều khiển dạng ATmega8U2 (ATmega168, ATmega328,...) trên mạch. Còn một số mạch khác thì sử dụng bộ driver FTDI để xây dựng phương thức kết nối đến vi điều khiển dạng FTDI trên mạch (nằm cứng lên luôn, không tháo rời được).
Cách tốt nhất để kiểm tra xem rằng bạn đã cài đặt driver cho bản mạch của mình hay chưa là kiểm tra mục Tools > Serial Port. Nếu trong danh sách hiện ra có cổng Serial của mạch Arduino bạn đang sử dụng thì bạn đã cài, nếu chưa thì hãy vào đây. Một lưu ý nhỏ, chẳng hạn bạn sử dụng một mạch Arduino Uno có cổng Serial tên là COM3, giờ gắn một cái Arduino Uno thứ hai vào thì cổng COM3 không phải là cổng Serial để kết nối tới mạch Arduino Uno thứ hai này, để khắc phục, bạn hãy cài đặt driver lại.
Nếu bạn gặp lỗi "The system cannot find the file specified" khi cài đặt driver cho Arduino Mega 2560 trên Windows XP, xin hãy thử cách này.
Trên Linux, mạch Arduino Uno và Arduino Mega 2560 được chọn mặc định là /dev/ttyACM0. Nhưng Linux lại không hỗ trợ thư viện RXTX chuẩn mà những mạch này sử dụng để giao tiếp với vi điều khiển. Vì vậy trong bản tải về dành cho Linux, Arduino đã thêm vào một thư viện RXTX một patch để tự động tìm kiếm những Serial port có dạng /dev/ttyACM* khác. Ngoài ra, còn có một gói dành cho Ubuntu (phiên bản 11.04) đã bao gồm patch đấy. Đôi khi, nếu bạn vẫn sử dụng gói RXTX từ bản distribution của bạn, thì bạn nên đổi /dev/ttyACM0 thành /dev/ttyUSB0 (đây chỉ là một ví dụ, bạn hãy chọn cái nào hiện ra trong Arduino IDE).
Bạn đã copy file Arduino.app ra khỏi file image (và dán vào thư mục Applications ) chưa? Nếu không, bạn sẽ không thể upload được chương trình của mình đâu.
Phiên bản Java mới nhất của Apple đã cố gắng sử dụng phiên bản thư viện hệ thống 64 bit để biên dịch, nhưng mà Arduino IDE lại sử dụng phiên bản 32 bit của thư viện RXTX. Vì vậy, khi khởi động Arduino bạn sẽ gặp một thông báo như sau: Uncaught exception in main method: java.lang.UnsatisfiedLinkError: /Applications/arduino-0016/Arduino 16.app/Contents/Resources/Java/librxtxSerial.jnilib: no suitable image found. Did find: /Applications/arduino-0016/Arduino 16.app/Contents/Resources/Java/librxtxSerial.jnilib: no matching architecture in universal wrapperUncaught exception in main method: java.lang.UnsatisfiedLinkError: /Applications/arduino-0016/Arduino 16.app/Contents/Resources/Java/librxtxSerial.jnilib: no suitable image found. Did find: /Applications/arduino-0016/Arduino 16.app/Contents/Resources/Java/librxtxSerial.jnilib: no matching architecture in universal wrapper
Để sửa, bạn kích vào chương trình Arduino nào đó (ví dụ Arduino16.app) trong Finder, và chọn Get Info từ bảng chọn Menu. Và trong thẻ thông tin, kích chọn mục Open in 32 Bit Mode. Từ bây giờ, bạn có thể tiếp tục lập trình cho chú Arduino của mình rồi!
Arduino IDE sử dụng một số biểu thức thường dùng để minh họa trong chương trình (Ví dụ như để thể một ký tự thì ta đặt ký tự đó giữa hai dấu nháy hơn, nhưng để thể hiện một chuỗi thì ta lại đặt chuỗi đó giữa một dấu nháy kép,...). Vì bạn có một số nhầm lẫn về vấn đề sử dụng những biểu thức này nên bạn đã gặp lỗi trên. Nói nôm na, nếu bạn khai báo chuỗi nằm giữa cặp dấu nháy đơn thì bộ nhớ của java sẽ bị tràn. Một đoạn thông báo lỗi có thể như sau:
java.lang.StackOverflowError at java.util.Vector.addElement(Unknown Source) at java.util.Stack.push(Unknown Source) at com.oroinc.text.regex.Perl5Matcher._pushState(Perl5Matcher.java) hoặc là at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java) at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java) at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java) at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java) at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java) at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java) at com.oroinc.text.regex.Perl5Matcher._match(Perl5Matcher.java)
... đó chính xác là những gì đã xảy ra với bạn đúng không ? Hãy kiểm tra một cách CẨN THẬN những dấu nháy đơn, nháy kép, dấu gạch chéo ngược \, comments,... Ví dụ: Nếu bạn viết như thế này: '\"' thì sẽ lỗi (hãy thay cặp dấu nháy đơn bên ngoài thành cặp dấu nháy kép như thế này "\"")
Bởi vì chân RX chưa được kết nối. Bootloader của mạch có vẻ đang nhận một lượng lớn thông tin rác ở chân RX, và hiển nhiên nó sẽ không bao giờ hoàn thành và chạy chương trình mà bạn đã upload lên mạch. Để khắc phục bạn chỉ cần nối tắt chân TX và RX hoặc là nối RX qua một điện trở 10 kOhm rồi nối xuống cực âm.
Đó là do sự sung đột của chương trình Arduino IDE với một tiến trình của chương trình Logitech ('LVPrcSrv.exe'). Hãy bật Task Manager và End process nó!
Nếu bạn đang sử dụng bản mạch Arduino Diecimila hoặc những bản mạch cũ hơn có cổng USB (Ví dụ như NG) thì bạn cần chắc chắn rằng cái jumper (miếng nhựa nhỏ dùng để nối tắt 2 chân header sát nhau) đã được gắn vào đúng chân. Nếu bạn đang cấp nguồn cho mạch bằng nguồn điện ngoài (được cắm vào chân nguồn) thì bạn cần gắn cái jumper này vào 2 cổng gần chỗ gắn cổng nguồn nhất. Còn nếu bạn đang cấp nguồn cho mạch bằng cổng USB thì bạn cần gắn cái jumper này vào 2 cổng gần chỗ gắn cổng USB nhất. http://k1.arduino.vn/img/2014/05/26/.... Bạn kích vào đường dẫn trên để xem ảnh.
Trong quá trình sản xuất hàng loạt mạch Arduino Diecimila, có một số mạch bị lỗi khi cài bootloader. Nhưng không cần phải lo lắng về việc này. Bạn có thể kiểm tra mạch đã được cài bootloader hay chưa nhờ vào việc kiểm tra đèn LED số 13 có nhấp nháy khi bạn nhất nút reset hay không. Nếu nó nhấp nháy 3 lần là đã có NG bootloader, và bạn cần phải nhấn nút reset vài lần trước khi upload chương trình để chương trình khi nạp vào không bị hiện tượng như câu hỏi và bạn đang đọc. Để cài bootloader cho Arduino Diecimila bạn cần tham khảo đường dẫn này.
Nếu bạn gặp một lỗi khi khởi động chương trình arduino.exe, ví dụ là như thế này chẳng hạn:
Arduino has encountered a problem and needs to close.
Lúc này bạn cần chạy file run.bat , và hãy nghe tôi, bạn cần kiên nhẫn đợi một tí để chương trình Arduino khởi động!