Trong quá trình sử dụng mạch Arduino, các bạn mới làm quen với mạch này thường gặp phải một số lỗi và bối rối không biết phải làm sao. Phần này nói về việc chẩn đoán và xử lý một số lỗi dựa vào kinh nghiệm của tác giá. Thông thường có 2 loại lỗi trong Arduino, tác giả tạm chia thành lỗi phần cứng và lỗi lập trình.
I. Lỗi phần cứng
Lỗi phần cứng là lỗi không liên quan đến việc lập trình, chương trình khi kiểm tra thì không sai nhưng khi nạp xuống board Arduino thì lại không nạp được. Sau đây là 2 lỗi phần cứng thường gặp phải.
1. Lỗi không upload được code xuống bo Arduino
Lỗi này thường có dạng: avrdude: stk500_getsync(): not in sync: resp=0x00. Hình 34 thể hiện dạng lỗi này.
Hình 34. Lỗi chương trình không nạp được xuống mạch Arduino www.ktphuhung.com
Thạc Sĩ Huỳnh Minh Phú 37 www.ktphuhung.com Chẩn đoán nguyên nhân: có nhiều nguyên nhân, người dùng cần kiểm tra lại cổng USB đã kết nối được chưa, có thể rút cổng USB ra, cắm vào cổng USB khác. Hoặc dùng máy tính khác để lập trình. Thông thường, một số bạn mới làm quen mạch chưa biết cách chọn cổng USB nên các bạn có thể đọc lại phần 4 để hiểu rõ hơn, hoặc do máy có nhiều cổng, các bạn chọn không cổng không chính xác. Các bạn có thể vào Tools ->Serial Port để chọn cổng USB như ở hình 35.
Hình 35. Cách chọn cổng USB
Nếu đã làm các bước trên mà vẫn chưa được thì có thể là một dạng lỗi nặng hơn. Nếu hư hỏng nặng có thể là do chết thạch anh, khiến không nạp được chương trình xuống mạch, cần thay thạch anh khác, hoặc chip Atmega 328 (đối với Arduino Uno) bị hư, hoặc không được nap bootloader,…. Với lỗi này, người dùng có thể liên hệ với nơi bán hàng để đổi lại sản phẩm (nếu còn trong hạn bảo hành) hoặc tự thay thạch anh, nếu có thể tự làm được. Đối với shop Kỹ Thuật Phú Hưng, nếu mạch Arduino các bạn mua là hàng của shop thì có thể liên hệ với shop để shop giúp giải quyết vấn đề này.
2. Lỗi chọn sai bo Arduino
Lỗi này xảy ra khi chúng ta chọn sai loại bo Arduino trong IDE, ví dụ bo Arduino được sử dụng là Arduino Uno nhưng người sử dụng lại chọn nhằm là Arduino Mega. Lỗi này có dạng như bên dưới và được thể hiện ở hình 36 :
Binary sketch size: 1,628 bytes (of a 258,048 byte maximum)
www.ktphuhung.com
Thạc Sĩ Huỳnh Minh Phú 38 www.ktphuhung.com avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout avrdude: stk500v2_ReceiveMessage(): timeout
avrdude: stk500v2_getsync(): timeout communicating with programmer
Hình 36. Lỗi chọn sai loại bo Arduino
Đối với lỗi này, cách giải quyết là kiểm tra và chọn lại bo. Vào Tools ->Board sau đó chọn loại bo đúng với loại bo đang dùng, ví dụ ở đây các bạn có thể chọn loại bo Arduino Uno.
Hình 37 minh họa cho việc chọn loại bo.
www.ktphuhung.com
Thạc Sĩ Huỳnh Minh Phú 39 www.ktphuhung.com Hình 37. Cách chọn loại bo Arduino
II. Lỗi lập trình
Lỗi lập trình thường do việc lập trình sai cú pháp nên khi kiểm tra chương trình thì chương trình báo lỗi. Hình 37 thể hiện một ví dụ về lỗi do lập trình. Khi có lỗi do lập trình phần bên dưới của chương trình IDE xuất hiện màu vàng và thông tin về lỗi sẽ được thể hiện trong vùng thông báo lỗi, vùng có màu đen, ngoài ra phía dưới bên phải còn có một nút Copy message (chép thông tin) để người lập trình chép toàn bộ thông tin lỗi. Ngoài ra, trong vùng lập trình, hàng có lỗi được tô màu vàng, lỗi có thể nằm liền kề ngay ở trước hàng tô vàng hoặc trong hàng tô vàng. Muốn biết lỗi nằm ở đâu, người lập trình có thể xem thông tin ở ô màu đen, tức ô báo lỗi. Ở ví dụ trong hình 38, lỗi được hiện ra như sau :
Blink.ino: In function 'void loop()':
Blink:26: error: expected `;' before 'delay'
www.ktphuhung.com
Thạc Sĩ Huỳnh Minh Phú 40 www.ktphuhung.com Hình 38. Ví dụ về lỗi lập trình
Bảng 2 bên dưới phân tích một ví dụ điển hình về báo lỗi. Với các lỗi khác, cách phân tích cũng tương tự. Về tổng quan, đoạn văn bản báo lỗi bao gồm: tên chương trình, đoạn có lỗi, vị trí lỗi, và lỗi cụ thể. Dựa vào đây người lập trình có thể tìm được lỗi nằm ở đâu để sửa. Bảng 3 đưa ra các lỗi thường gặp trong quá trình lập trình để bạn đọc có thể tham khảo.
Bảng 2. Phân tích một ví dụ điển hình về báo lỗi trong phần mềm IDE của Arduino.
Nội dung tiếng Anh Giải thích
Blink.ino Tên chương trình là Blink (nhấp nháy), đuôi
file là .ino (đây là đuôi file của IDE) In function 'void loop()': Dịch sang tiếng Việt nghĩa là: Trong hàm
‘void loop()’, đoạn này nhằm xác định vị trí của lỗi, đó là lỗi nằm trong đoạn void loop();
Blink:26 Trong chương trình Blink, hàng thứ 26 (từ trên
đếm xuống 26 hàng)
error: expected `;' before 'delay' Dịch sang tiếng Việt là : Lỗi : cần có dấu ‘;’
phía trước hàm ‘delay’. Expected nghĩa là mong đợi, cần có.
Vị trí lỗi
Tóm tắt lỗi
Nội dung lỗi
Nút copy lỗi www.ktphuhung.com
Thạc Sĩ Huỳnh Minh Phú 41 www.ktphuhung.com Bảng 3. Một số lỗi thường gặp khi lập trình
Một số lỗi thường gặp khi lập trình Giải thích
Thiếu dấu ‘;’ cuối dòng lệnh Đây là lỗi thường hay gặp, giữa 2 dòng lệnh, trước khi xuống dòng cần có dấu ‘;’ dấu này nhằm kết thúc dòng lệnh. Tuy nhiên nếu dòng lệnh là #define thì không cần dấu ‘;’ cuối dòng lệnh.
Thiếu dấu ‘}’ Trong cách hàm if(), void setup(), void loop(), bắt đầu là một dấu ‘{‘, và kết thúc bằng dấu
‘}’. Đôi khi người viết chương trình quên kết thúc bằng dấu ‘}’. Ví dụ :
void loop() {
…..
if() {
…….
} }
Có thể chú ý thấy ở cuối đoạn chương trình này có 2 dấu ‘}’, một dấu là để kết thúc hàm if, và một dấu là để kết thúc hàm void loop.
Thiếu dấu () trong void loop, void setup Về mặc định, sau void loop, void setup phải có dấu ().
Các lỗi về cú pháp Phải viết đúng cú pháp của lệnh. Ví dụ analogWrite thì phải viết từng chữ giống vậy, nếu một chữ viết hoa hay thiếu một chữ, hay khác với cú pháp, chương trình đều báo lỗi.
Đây là những lỗi cơ bản trong việc lập trình cho bo Arduino, ngoài những lỗi này còn một số lỗi khác. Tuy nhiên trong tài liệu cơ bản này không đề cập đến những lỗi phức tạp nhằm tránh cho người học ở trình độ cơ bản không bị rối.
Lỗi khi lập trình là điều không tránh được khi mới bắt đầu học về Arduino. Để các bạn mới nghiên cứu Arduino có thể nắm được phần lỗi, trong các ví dụ tác giả đưa ra, bạn đọc nên tự gõ lại từng ký tự, từng dòng lệnh, rồi cho kiểm tra chương trình, nếu chương trình báo lỗi, bạn đọc hãy so sánh lại với chương trình gốc và sửa lỗi. Với cách làm này các bạn có thể nắm vững cách lập trình cho Arduino chỉ sau 4 bài tập. Bạn đọc nên hạn chế việc copy cả code mẫu rồi chạy chương trình, vì về lâu dài điều này khiến bạn đọc không làm chủ được việc lập trình và dễ phụ thuộc vào code mẫu trên các trang mạng và diễn đàn.