Lỗi của Arduino? Và các lỗi thường gặp khi lập trình Arduino

 

Bạn có thể xem một số lỗi hay xuất hiện khi đang sử dụng mạch Arduino tại bài viết Các rắc rối thường gặp khi làm việc với Arduino. Nếu vẫn không tìm thấy lỗi mình gặp phải, hãy tìm kiếm chúng trong danh sách dưới đây hoặc nêu vấn đề ở những bài viết trên Arduino.vn có liên quan.

  1. Tại sao tôi lại không upload được chương trình lên mạch Arduino của mình ?
  2. Tại sao trên máy MAC của tôi lại xuất hiện lỗi: "Build folder disappeared or could not be written" ?
  3. Tại sao chương trình Arduino IDE của tôi lại không hoạt động khi tôi cập nhập chương trình Java?
  4. Tại sao tôi lại nhận đươc thông báo java.lang.StackOverflowError khi tôi đang trong qua trình upload chương trình?
  5. Tại sao tôi không khởi động mạch-đã nạp chương trình của tôi khi mà tôi đang kết nối nó với nguồn ngoài ? (đối với Arduino Diecimila và những mạch trước đó)
  6. Tại sao chương trình Arduino IDE của tôi lại bị treo khi tôi đang upload chương trình ? (trên Windows) ?
  7. Điều gì đã xảy ra với mạch của tôi khi nó không chịu khởi động lên? (đèn màu xanh đã sáng rồi)?
  8. Tại sao mạch Arduino Diecimila của tôi lại phải tốn đến 6-8 giây để khởi động chương trình mà tôi đã nạp vào ?
  9. Tôi cần làm gì nếu file arduino.exe bị lỗi khi khởi động?
  10. Tại sao Arduino lại không chạy được trên các phiên bản cũ của MAC?
  11. Tôi cần phải làm gì khi gặp lỗi UnsatisfiedLinkError error (about native library librxtxSerial.jnilib) khi khởi động Arduino ?
  12. "Could not find the main class.", như vầy có nghĩa là gì ?
  13. Tôi có thể làm gì khi có một xung đột cygwin xảy ra trên Windows?
  14. Chương trình Arduino IDE và bảng chọn Tools của tôi tốn nhiều thời gian để khởi động, vậy bây giờ làm như thế nào?
  15. Tại sao bảng chọn Tools > Serial port lại không có lựa chọn nào cả ?
  16. Đã xảy ra lỗi gì khi mà tôi nhận được thông báo "gnu.io.PortInUseException" trong quá trình upload code hoặc khi tôi sử dụng Serial Monitor ?
  17. Tôi mắc phải một vấn đề liên quan đến cài đặt FTDI driver?
  18. Tại sao chương trình tôi đã upload lên mạch rồi mà nó không chịu chạy, tuy rằng tôi đã cấp nguồn hoặc nhất nút reset?
  19. Tại sao Arduino IDE đã báo là upload thành công, nhưng sao mạch của tôi lại chẳng hoạt động như vậy ?
  20. Làm thể nào để tối ưu hóa dung lượng của chương trình ?
  21. Tại sao tôi chỉ có thể dùng những chân PWM được quy định sẵn như là: 3, 5, 6, 9, 10 và 11 mà không phải là các chân digital khác ?
  22. Tại sao tôi lại bị một lỗi về việc chưa khai báo kiểu ham hoặc khai báo kiểu dữ liệu? undeclared functions hoặc undeclared types ?
  23. Tại sao tôi lại nhận thông báo lỗi: "avrdude: Yikes!  Invalid device signature."?
  24. Làm sao để nhớ được code của Arduino ?
  25. Sau một thời gian việc khởi động Arduino bị chậm và những thứ khác cũng chậm luôn?

1. Tại sao tôi lại không upload được chương trình lên mạch Arduino của mình?

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:

  1. Chương trình Arduino IDE.
  2. Driver cho mạch Arduino.
  3. Sự cho phép truy cập đến cổng Serial
  4. Các kết nối vật lý tới mạch Arduino
  5. Firmware đối với các mạch Arduino Uno và Arduino Mega 2560
  6. Bootloader đối với con chip được gắn trên Arduino
  7. Thiết lập cầu chì của vi điều khiển
  8. ... 

Sau đây là một số hướng dẫn cụ thể cho từng vấn đề được nêu ra

  1. Chương trình Arduino IDE

    • Nếu bạn chưa có chương trình Arduino IDE xin hãy vào đây: http://arduino.vn/bai-viet/68-cai-dat-driver-va-arduino-ide
    • Hãy chắc chắn rằng bạn đã chọn đúng mạch bạn cần lập trình trong mục Tools > Board, nếu bạn đang có một mạch Arduino Uno R3 thì hãy chọn nó. Ngoài ra, với một số mạch Arduino Duemilanove đời mới đi kèm với chip ATmega328 (loại cụ thì đi với ATmega168, để kiểm tra hãy xem mấy dòng chữ nhỏ trên con chip). Để xem thêm thông tin, xin hãy click vào xem đường dẫn trên.
    • Sau đó kiểm tra phần tử được chọn trong thẻ Tools > Serial Port có phải là cổng Serial được kết nối với Arduino hay không (nếu bạn vừa chưa thấy xin hãy gỡ kết nối USB từ máy tính và tắt Arduino IDE, sau đó gắn USB lại và bật Arduino).
      • Trên máy MAC, một cổng serial của Arduino thường có dạng là /dev/tty.usbmodem621 (trên các phiên bản Arduino Uno và Arduino Mega 2560) hoặc có dạng /dev/tty.usbserial-A02f8e (trên các mạch phiên bản cũ hoặc các bản FDTI-based board).
      • Trên Linux, nó lại có dạng /dev/ttyACM0 hoặc tương tự (trên các phiên bản Arduino Uno và Arduino Mega 2560) hoặc cũng có thể là /dev/ttyUSB0 (hoặc tương tự) trên các mạch cũ hơn.
      • Còn trên Windows, có lại có tiền tố là COM, nhưng bạn nên vào Device Manager của Windows để kiểm tra cho lựa chọn của mình (gợi ý: bạn hãy đảm bảo chưa gắn Arduino vào máy tính, sau đó vô Device Manager, rồi gắn Arduino vào, xem cổng COM nào hiện ra, nếu không có cổng COM nào hiện ra, truy cập vào đây, còn nếu có cổng COM mới hiện ra thì đấy chính là cổng COM mà bạn cần phải chọn)
      • Nếu vẫn còn lỗi, xin bạn xem phần tiếp theo, đó là Drivers
  2. Driver

    • 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).

  3. Sự cho phép truy cập đến cổng Serial

    • Trên Windows, nếu bạn thấy chương trình Arduino IDE khởi động chậm, hoặc khi vào Tools > Serial Port thấy nó lâu hiện ra, bạn nên tắt các cổng Bluetooth serial hoặc bất cứ cổng Serial qua mạng nào hết. Vì khi khởi động chương trình Arduino IDE hoặc tìm các cổng Serial hợp lệ, Arduino IDE sẽ quét TẤT CẢ các cổng Serial có thể quét, nếu trong các cổng ấy có những cổng Bluetooth Serial hoặc Serial qua mạng, và chúng bị lỗi hoặc delay thì chương trình sẽ tốn nhiều thời gian để quét xong chúng => chương trình khởi động chậm.
    • Hãy đảm bảo rằng, bạn không đang chạy các chương trình cũng có dạng quét tất cả các cổng Serial, ví dụ như USB Cellular Wifi Dongle software (từ Sprint hoặc Verizon), các phần mềm quét các thiết bị cầm tay, Bluetooth-USB drivers (ví dụ BlueSoleil), virtual daemon tools, ...
    • Bạn hãy đảm rằng, không có phần mềm nào cài tường lửa để truy cập đến cổng Serial đó, ví dụ như ZoneAlarm
    • Bạn phải tắt các chương trình như Processing, PD, vvvv, ...nếu như các chương trình này đang đọc dữ liệu qua cổng Serial mà bạn đang chọn.
    • Trên Linux, bạn cần tạm chời chạy Arduino dưới quyền root để xem thử nó có giúp ích gì cho việc upload chương trình hay không.
  4. Các kết nối vật lý tới mạch Arduino

    • Điều đầu tiên mà bạn bắt buộc phải làm, đó là kiểm tra xem thử mạch Arduino đã được gắn điện (đèn màu xanh sáng).
    • Mạch Arduino Uno và Arduino Mega 2560 hay gặp vấn đề trong việc kết nối thông qua USB hub trên máy MAC. Nếu bạn kiểm tra không thấy cổng Serial mà mình hay sử dụng trong Tools > Serial Port thì xin hãy gỡ kết nối USB với USB hub sau đó gắn trực tiếp vào máy MAC sau đó khởi động lại Arduino IDE.
    • Ngắt kết nối của hai cổng digital 0 và 1 trong quá trình upload từ máy tính vào mạch Arduino, sau đó bạn có thể dùng chúng một cách bình thường.
    • Hãy thử upload chương trình mà không có bất cứ thiết bị, dây diện nào được nối tới Arduino (và dĩ nhiên là phải loại trừ dây USB smiley)
    • Thay đổi dây USB vì đôi lúc do nó quá dài hoặc không có cục lọc nhiễu nên bạn không thể upload được.
  5. Auto-reset

    • Auto-reset là một chức năng tự động của một số mạch của Arduino, chức năng này hỗ trợ việc tự động reset để lập trình vi điều khiển nằm trên mạch. Tuy nhiên, một số mạch lại không có chức năng này (để tiết kiệm diện tích và thể tích lắp đặt nên buộc phải đánh đổi một chức năng không quá quan trọng khi sản xuất một sản phẩm). Những mạch nào không có cổng USB (hoặc mini USB) và cực kì nhỏ thường không hỗ trợ chức năng Auto-reset
    • Nếu bạn có một mạch không có chức năng Auto-reset thì bạn cần reset mạch bằng tay trước khi bắt đầu quá trình upload. (Arduino Diecimila, Duemilanove, và Nano cũng như là LilyPad, Pro, và Pro Mini đều hỗ trợ chức năng này với 6 chân lập trình)
    • Tuy nhiên, hãy chú ý rằ[VP 1] Device is not responding correctlyng, một số mạch Arduino Diecimila bị lỗi trong qua trình cài bootloader và bắt buộc bạn phải nhấn nút reset bằng tay. Xem trả lời cụ thể cho câu hỏi này, tại đây.
    • Còn nếu bạn gặp lỗi này: [VP 1] Device is not responding correctly . Hãy thử reset lại board, upload lại.
  6. Bootloader đối với con chip được gắn trên Arduino

    • Hãy chắc chắn rằng bootloader đã được cài đặt. Để kiểm tra, bạn hãy nhấn nút reset và xem thử đèn số 13 (đèn LED được kết nối trực tiếp với chân số 13) có nhấp nháy hay không? Nếu không thì mạch của bạn chưa được cài bootloader.

2. Tại sao trên máy MAC của tôi lại xuất hiện lỗi: "Build folder disappeared or could not be written" ?

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.

3. Tại sao chương trình Arduino IDE của tôi lại không hoạt động khi tôi cập nhập chương trình Java?

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!

4. Tại sao tôi lại nhận đươc thông báo java.lang.StackOverflowError khi tôi đang trong qua trình upload chương trình?

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 devil. 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 "\"")

5. Tại sao tôi không khởi động mạch-đã nạp chương trình của tôi khi mà tôi đang kết nối nó với nguồn ngoài ? (đối với Arduino Diecimila và những mạch trước đó)

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.

6. Tại sao chương trình Arduino IDE của tôi lại bị treo khi tôi đang upload chương trình ? (trên Windows) ?

Đó 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ó!

7. Điều gì đã xảy ra với mạch của tôi khi nó không chịu khởi động lên? (đèn màu xanh đã sáng rồi)?

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/0/501_1231-1401068969-0--guild-7-1-arduino-jumper.jpg. Bạn kích vào đường dẫn trên để xem ảnh.

8. Tại sao mạch Arduino Diecimila của tôi lại phải tốn đến 6-8 giây để khởi động chương trình mà tôi đã nạp vào ?

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.

9. Tôi cần làm gì nếu file arduino.exe bị lỗi khi khởi động?

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!

10. Tại sao Arduino lại không chạy được trên các phiên bản cũ của MAC?

Nếu bạn gặp một thông báo lỗi như thế này

Link (dyld) error: 

dyld: /Applications/arduino-0004/Arduino 04.app/Contents/MacOS/Arduino Undefined symbols: 
/Applications/arduino-0004/librxtxSerial.jnilib undefined reference to _printf$LDBL128 expected to be defined in /usr/lib/libSystem.B.dylib 

Lúc này bạn cần cập nhập lại hệ điều hành của mình lên phiên bản Max OS X 10.3.9 hoặc mới hơn. Vì phiên bản cũ của Max OS X có một số xung đột với thư viện của Arduino.

11. Tôi cần phải làm gì khi gặp lỗi UnsatisfiedLinkError error (about native library librxtxSerial.jnilib) khi khởi động Arduino ?

Nếu bạn gặp một lỗi như thế này:

Uncaught exception in main method: java.lang.UnsatisfiedLinkError: Native Library /Users/anu/Desktop/arduino-0002/librxtxSerial.jnilib already loaded in another classloaderUncaught exception in main method: java.lang.UnsatisfiedLinkError: Native Library /Users/anu/Desktop/arduino-0002/librxtxSerial.jnilib already loaded in another classloaderUncaught exception in main method: java.lang.UnsatisfiedLinkError: Native Library /Users/anu/Desktop/arduino-0002/librxtxSerial.jnilib already loaded in another classloaderUncaught exception in main method: java.lang.UnsatisfiedLinkError: Native Library /Users/anu/Desktop/arduino-0002/librxtxSerial.jnilib already loaded in another classloaderUncaught exception in main method: java.lang.UnsatisfiedLinkError: Native Library /Users/anu/Desktop/arduino-0002/librxtxSerial.jnilib already loaded in another classloader

Bây giờ, bạn chỉ cần tìm file comm.jar hoặc là jcl.jar trong thư mục System/Library/Frameworks/JavaVM.framework/ hoặc tìm trong thư mục mà biến PATH hoặc CLASSPATH đảm nhiệm.

12. "Could not find the main class.", như vầy có nghĩa là gì ?

Nếu bạn gặp lỗi:

Java Virtual Machine Launcher: Could not find the main class. Program will exit.Java Virtual Machine Launcher: Could not find the main class. Program will exit.

thì bạn cần phải kiểm tra rằng, bạn đã giải nén file Arduino.zip thành công hay chưa. Và đặc biệt hơn nữa, bạn phải kiểm tra trong thư mục lib hoặc libraries xem thử đã có file pde.jar chưa.

13. Tôi có thể làm gì khi có một xung đột cygwin xảy ra trên Windows?

Nếu bạn đã cài cygwin trên máy của bạn, thì khi biên dịch chương trình để upload lên mạch Arduino, bạn sẽ nhận được lỗi sau:

6 [main] ? (3512) C:\Dev\arduino-0006\tools\avr\bin\avr-gcc.exe: *** fatal error - C:\Dev\arduino-0006\tools\avr\bin\avr-gcc.exe: *** system shared memory version mismatch detected - 0x75BE0084/0x75BE009C.

This problem is probably due to using incompatible versions of the cygwin DLL.

Search for cygwin1.dll using the Windows Start->Find/Search facility and delete all but the most recent version. The most recent version *should* reside in x:\cygwin\bin, where 'x' is the drive on which you have installed the cygwin distribution. Rebooting is also suggested if you are unable to find another cygwin DLL.

Nếu như vậy, bạn cần đảm rằng bạn không chạy chương trình cygwin khi bạn đang chạy Arduino. Còn nếu nó không khả dụng, bạn hãy xóa file cygwin1.dll trong thư mục Arduino và thay thế nó bằng file cygwin1.dll trong thư mục mà bạn đã cài cygwin (ví dụ như là: c:\cygwin\bin)

14. Chương trình Arduino IDE và bảng chọn Tools của tôi tốn nhiều thời gian để khởi động, vậy bây giờ làm như thế nào?

Nếu bạn thấy chương trình Arduino IDE của mình tốn nhiều thời gian để khởi động và xem có vẻ như bị treo khi kích chọn bản chọn Tools thì có vẻ như là, Arduino IDE đã gặp một xung đột với một số thiết bị của bạn. Với phần mềm Arduino IDE, khi khởi động, hoặc là khi kích chọn bảng chọn Tools thì chúng cố gắng lấy danh sách của tất cả cổng COM trên máy tính của bạn. Và có thể, một hoặc một số cổng COM được tạo ra bởi một hoặc một số thiết bị của bạn đã gây chậm tiến trình này. Vì vậy hãy vào Device Manager và thử tắt một số cổng COM xem mọi thứ có tiến triển hay không. Bạn nên tắt các cổng COM do các thiết bị Bluetooth hoặc thiết bị mạng tạo ra.

15. Tại sao bảng chọn Tools > Serial port lại không có lựa chọn nào cả ?

Nếu bạn đang có một mạch Arduino có cổng USB thì điều đầu tiên bạn cần làm là cài driver cho nó. Còn nếu bạn sử dụng một mạch USB-to-Serial để tạo cổng COM giao tiếp với những mạch Arduino không có USB thì bạn cần driver cho mạch USB-to-Serial đó.

Hãy chắc chắn rằng bạn đã kết nối Arduino vào máy tính. Những cổng Serial trong danh sách Tools > Serial port sẽ tự động làm mới khi bạn gắn hoặc gỡ một hoặc nhiều mạch Arduino ra khỏi máy tính.

Hãy chắc chắn rằng không có một phần mềm cũng đang quét và tìm các cổng Serial, ví dụ như các chương trình quét các thiết bị cầm tay, Bluetooth-USB drivers,...

16. Đã xảy ra lỗi gì khi mà tôi nhận được thông báo "gnu.io.PortInUseException" trong quá trình upload code hoặc khi tôi sử dụng Serial Monitor (trên máy MAC) ?

Error inside Serial.<init>() 
gnu.io.PortInUseException: Unknown Application 
     at gnu.io.CommPortIdentifier.open(CommPortIdentifier.java:354) 
     at processing.app.Serial.<init>(Serial.java:127) 
     at processing.app.Serial.<init>(Serial.java:72) 

Lỗi này xảy ra là do cổng Serial của Arduino hiện đang bị một phần mềm nào đó sử dụng. Hãy chắc chắn rằng bạn đang không chạy một phần mềm nào cũng đọc cổng Serial của Arduion (ví dụ Processing, chương trình quét các thiết bị cầm tay, Bluetooth-USB drivers,...).  Đồng thời, cũng cần lưu ý rằng, một số phần mềm như Max/MSP sẽ giữ cho trạng thái của cổng Serial là mở, tuy rằng chúng đang được được sử dụng bởi phầm mềm ấy. Vì thế bạn cần tắt tất cả các patch liên quan về những phần mềm này.

17. Tôi mắc phải một vấn đề liên quan đến cài đặt FTDI driver?

Bạn hãy thử tải  và cài đặt bộ FTDI driver mới nhất tại đây, hoặc liên hệ trực tiếp bằng tiếng Anh tới địa chỉ email [email protected]

18. Tại sao chương trình tôi đã upload lên mạch rồi mà nó không chịu chạy, tuy rằng tôi đã cấp nguồn hoặc nhất nút reset?

Vấn đề này sẽ xảy ra khi bạn vẫn đang gửi dữ liệu qua cổng Serial của Arduino (lúc mà nó chưa khởi động). Tại sao lại như thế ? Bởi vì trước khi khởi động một chương trình Arduino, thì bootloader sẽ được khởi động trước và nó đọc tín hiệu từ cổng Serial (cho đến khi hết thì thôi). Và nếu cứ xuất hiện tín hiệu từ cổng Serial thì chương trình của bạn sẽ không bao giờ hoạt động được.

Để giải quyết vấn đề này, bạn cần tìm cách debug để mạch của bạn không còn phải nhận tín hiệu từ cổng serial trước khi nó được khởi động. Chẳng hạn như là bạn ngắt kết nối cổng TX và RX hoặc nối TX và RX với nhau!

19. Tại sao Arduino IDE đã báo là upload thành công, nhưng sao mạch của tôi lại chẳng hoạt động như vậy ?

  1. Có thể là do bạn đã chọn con chip sai trong Tools > Microcontroller. Hãy chắc chắn là bạn đã chọn đúng con chip, điều đó có nghĩa là bạn cần xem thử con chip của mình tên là gì (Dòng chữ lớn nhất được ghi trên con chip, chẳng hạn như là ATmega328, ATmega8,...) và chọn nó!
  2. Kiểm tra thử nguồn điện của bạn có bị nhiễu hay không, thi thoảng thì cũng vì lý do này mà chương trình bị mất.
  3. Trong một số trường hợp khác, chương trình của bạn quá lớn (sau khi biên dịch và quá sức chứa bộ nhớ flash của chip), vì vậy đôi khi trong các phiên bản cũ của Arduino IDE, chương tình của bạn sẽ được biên dịch một phần (Từ đầu đến lúc đạt dung lượng tối đa). Vì vậy, khi mạch Arduino nhận được một chương trình lỗi như thế, nó sẽ cứ lặp đi lặp lại lệnh reset, rồi lại dừng rồi lại reset,..

20. Làm thể nào để tối ưu hóa dung lượng của chương trình ?

ATmega168 chỉ có 16 KB flash mà trong đó đã sử dụng 2KB cho bộ bootloader, như vậy là không nhiều nếu bạn mới bắt đầu phải không? Có điều nó khá là rẻ!

Nếu bạn dang sử dụng một kiểu số thực thì hãy tìm cách chuyển nó về số nguyên và tối ưu hóa được 2KB bộ nhớ.

Nếu bạn tìm được một cách nào ngắn hơn để làm code của bạn trông ngắn hơn thì điều đó cũng giảm được dung lượng chương trình.

Hoặc bạn có thể xem thử bên trong core Arduino và bỏ đi những phần thừa để giảm dung lượng chương trình nếu điều đó là cần thiết !

21. Tại sao tôi chỉ có thể dùng những chân PWM được quy định sẵn như là: 3, 5, 6, 9, 10 và 11 mà không phải là các chân digital khác ?

Một chip điều khiển ATmega chỉ hỗ trợ một số chân có chức năng PWM / analogWrite(). Nếu bạn dùng hàm analogWrite lên những chân không hỗ trợ PWM (những chân không có dấu ~ ở sau) thì chân đó sẽ cấp 1 nguồn 5V nếu bạn write một giá trị >=128 và sẽ là 0V nếu giá trị đó < 128.

22. Tại sao tôi lại bị một lỗi về việc chưa khai báo kiểu ham hoặc khai báo kiểu dữ liệu? undeclared functions hoặc undeclared types ?

Môi trường lập trình Arduino cố gắng xây dựng để bạn có thể thoái mái trong lập trình. Vì vậy bạn có thể thoái mái sử dụng các câu lệnh tự tạo trong quá trình lập trình, nghĩa là tuy rằng bạn khai báo một hàm nằm phía sau hàm loop nhưng trong hàm loop bạn vẫn dùng hàm bạn vừa tạo được!

Tuy nhiên, nó không hoàn hảo, đôi khi nó báo lỗi  và bạn phải khai báo hàm trước khi sử dụng nó!

23. Tại sao tôi lại nhận thông báo lỗi: "avrdude: Yikes!  Invalid device signature."?

avrdude: Yikes!  Invalid device signature.

Double check connections and try again, or use -F to override

this check.

Khi bạn gặp lỗi trên, có thể bạn đã bị 1 hoặc 2 trong điều sau:

  1. Có thể bạn đã chọn nhầm mạch trong Tools > Board
  2. Bạn không sử dụng đúng phiên bản của avrdude.

Vì vậy, bạn có thể chỉnh lại board hoặc tải về phiên bản avrdude phù hợp.

24. Làm sao để nhớ được code của Arduino ?

Bạn không cần phải nhớ code của Arduino, càng nhớ càng rối thôi à. Bạn chỉ cần lưu lại các chỉ mục (bookmark) của trang web mà mình đọc hướng dẫn (ví dụ như http://arduino.vn/bai-viet/113-dieu-khien-8-den-led-sang-theo-y-muon-cua-ban-de-hay-kho). Rồi khi quên chỉ cần bật ra là nhớ. Bật mí một bí mật nho nhỏ, admin của cộng đồng chúng ta cũng không nhớ hết code shiftOut đâu, lần nào làm cũng bật ra xem hết đấy devil!

25. Sau một thời gian việc khởi động Arduino bị chậm và những thứ khác cũng chậm luôn?

Cảm ơn bạn hoàng quốc phương đã gửi nội dung hướng dẫn vào Thứ sáu, 14 Tháng 11, 2014 - 17:38

Chào các bạn, sau một thời gian sử dụng chắc nhiều bạn sẽ cảm thấy chương trình arduino IDE của mình chạy chậm hơn rất nhiều so với lúc mới cài đặt. Những biểu hiện của nó như khởi động chậm, load chậm, chạy thử chậm, nạp vào rất chậm, mở cổng serial cũng chậm nốt. Qua tìm hiểu thì cách khắc phục rất đơn giản như sau.     Vào link sau: http://k1.arduino.vn/img/2014/11/14/0/861_123450-1415962849-0-rxtxserial.zip   và tải về file rxtxSerial.dll . Sau đó bạn copy đè file này vào thư mục gốc cài đặt của arduino IDE. Như vậy là bạn có thể khắc phục được sự chậm chạp của chương trình không rõ nguyên nhân sau một thời gian sử dụng.

lên
11 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

analogRead()

Nhiệm vụ của analogRead() là đọc giá trị điện áp từ một chân Analog. Trên mạch Arduino UNO có 6 chân Analog In, được kí hiệu từ A0 đến A5. Trên các mạch khác cũng có những chân tương tự như vậy với tiền tố "A" đứng đầu, sau đó là số hiệu của chân.

lên
14 thành viên đã đánh giá bài viết này hữu ích.