Thắc mắc về chạy code arduino

Mọi người cho mình hỏi, khi mình nạp code Arduino, khi chạy thì Arduino không thực hiện, còn khi mở Serial Mornitor trong Arduino IDE lên thì Arduino thực hiện đúng nhiệm vụ. Như thế là bị lỗi làm sao ạ?
P/s: Code đúng khi chạy Arduino và mở Serial Mornitor.

Code mình tự viết hay thế nào ?
Mà code đâu ?

1 Like

Code tự viết bạn, mình nhận dữ liệu từ ras chuyển qua Arduino, thông qua Serial, rồi dùng lệnh switch… case để kiểm tra dữ liệu nhận qua, từ đó mình điều khiển cho Robot tiến, trái, phải, lùi. Phần nhận dữ liệu từ ras sang, chạy tốt, không có vấn đề, nhưng khi kiểm tra điều kiện trong switch… case thì chỉ khi bật Serial Mornitor trong Arduino IDE lên thì nó mới thực hiện, còn không bật thì nó không thực hiện. @Duong_Act bạn có biết vì sao không?
P/s: Do code mình lập trình trên ras và không có sẵn ở đây nên mình không thể show code lên được nhưng mà khi bật Serial Mornitor lên thì code mình chạy đúng.

Vậy là cứ phải cắm cable vào Arduino rồi bật terminal trên máy tính thì nó mới chịu chạy ?
Tức là code Arduino đang sử dung đến serial à ?

3 Likes

@Duong_Act đúng rồi bạn, mình truyền dữ liệu từ ras sang Arduino bằng cáp Serial, tốc độ baurate là 9600.

Qua nối IO trực tiếp hay qua cáp USB ?
Khả năng lớn trên Arduino đang chờ phản hồi từ Ras.
Đó chỉ là phỏng đoán còn có code mới biết chắc được.

3 Likes

@Duong_Act Mình nối thông qua cáp USB bạn, code của mình ở đây:

#include "DiChuyen.h"

int mode;

void setup()
{
     Serial.begin(9600);
     pinMode(ENA, OUTPUT);
     pinMode(ENB, OUTPUT);
     pinMode(IN1, OUTPUT);
     pinMode(IN2, OUTPUT);
     pinMode(IN3, OUTPUT);
     pinMode(IN4, OUTPUT);
}

void loop()
{
     if(Serial.available())
     {
          mode=Serial.read();
          mode=mode-48;
     }
     switch(mode)
     {
          case 0:
               Dung();
               break;
          case 1:
               Tien();
               break;
          case 2:
               Trai();
               break;
          case 3:
               Phai();
               break;
          case 4:
               Lui();
               break;
     }
}

Bạn xem giúp thử, cái mình cần là làm sao để mà không cần mở Serial Mornitor trong Arduino IDE lên mà Arduino vẫn thực hiện được các lệnh trong switch…case.

Cách 1:
Gán giá trị mặc định cho mode khi khai báo.
Muốn switch-case thực hiện cái nào thì set mode mặc định là cái đó.

Cách 2:
Viết công việc được thực hiện mặc định trong khối default của switch-case. Khối default được viết cuối cùng sau các case. Được hiểu là trường hợp không rơi vào case nào trước đó. Tương tự như khối else của if-statement.

Cách 3:
Cả 2 cách trên.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?