Giao tiếp dữ liệu với máy tính

Mỗi board Arduino sẽ kết nối với máy tính thông qua một cáp USB để nạp code. Tuy nhiên chúng ta cũng có thể dùng nó để giao tiếp trao đổi dữ liệu giữa board Arduino và máy tính. Một số board Arduino như Leonardo sử dụng vi điều khiển có sẵn chức năng giao tiếp USB, tuy nhiên phần lớn các board còn lại thì cần phải sử dụng thêm 1 chip riêng cho chức năng này. Trong board Node Wifi sử dụng CH340C.

Giao tiếp này thông qua giao thức gọi là kết nối serial, hay còn gọi là UART, sử dụng 2 dây là trasmit (TX) và receive (RX).

Gửi data từ board Arduino đến máy tính

Bạn copy đoạn code sau vào Arduino

int number = 0;

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  Serial.println("Program started");
}

void loop() {
  Serial.println(number);
  number = number + 1;
  delay(1000);
}

Để làm việc với giao tiếp serial, chúng ta cần sử dụng thư viện Serial. Trong hàm setup(), câu lệnh Serial.begin() giúp khởi tạo thư viện Serial. 9600 là tốc độ truyền tải dữ liệu qua lại giữa board Blocky Node và máy tính. Bạn cần chọn đúng tốc độ này trong màn hình Serial monitor để theo dõi dữ liệu serial nhận được.

Câu lệnh Serial.println() là để in ra một dòng text trong màn hình Serial monitor. Bạn cũng có thể dùng Serial.print() để in ra nhưng không xuống hàng và các text in ra sẽ nối nhau cho đến khi có câu lệnh Serial.println().

Trong hàm loop, chúng ta sẽ in ra giá trị của biến (variable) number, sau đó tăng giá trị biến này lên 1 và tạm dừng 1000ms và lặp lại. Delay giúp cho các giá trị in ra không chạy qua nhanh khiến chúng ta rất khó nhìn.

Trước khi bạn sử dụng 1 biến trong Arduino, bạn cần khai báo nó ở đầu chương trình. Biến number được khai báo ở dòng 1 với kiểu là int (viết tắt của Integer), là một kiểu số nguyên. Ngoài ra, biến còn có thể mang giá trị thuộc nhiều kiểu dữ liệu khác nhau như char hay String (kiểu text), float (số thập phân có lẻ) hay bool (Boolean, true hay false)…

Bạn chọn đúng loại board và upload. Sau khi upload thành công, bạn mở chức năng Serial monitor và quan sát trong cửa sổ này các giá trị được in ra và tăng dần.

 

Biến là gì? Trong lập trình, biến đóng vai trò rất quan trọng. Bạn có thể hiểu biến như là những tờ giấy nháp mà bạn dùng để ghi các ghi các giái trị tính toán trong quá trình giải 1 bài toán. Mỗi biến này sẽ có một tên không được trùng nhau và một kiểu dữ liệu của giá trị mà nó sẽ lưu trữ. Bạn nên đặt tên các biến một cách dễ hiểu, điều này sẽ giúp cho chương trình của bạn rõ ràng hơn.

Serial sẽ là một thư viện mà bạn sẽ sử dụng rất nhiều trong các chương trình Arduino, nó giúp bạn in các giá trị hiện tại của các biến hay trạng thái của các chân của vi điều khiển… trong chương trình nhằm mục đích debug.

Arduino reference: Serial

Gửi data từ máy tính đến Arduino

Có một số trường hợp chúng ta cần gửi dữ liệu đến board Arduino với mục đích điều khiển. Chúng ta sẽ thử viết một chương trình cho phép nhập 1 giá trị vào cửa sổ Serial và board Node Wifi sẽ bật tắt đèn led onboard tùy vào giá trị nhập vào là 0 hay 1.

void setup() {
  Serial.begin(9600);
  pinMode(15, OUTPUT);
}

void loop() {
  // if there's any serial available, read it:
  while (Serial.available() > 0) {
    // look for the next valid integer in the incoming serial stream:
    int command = Serial.parseInt();

    // look for the newline. That's the end of your sentence:
    if (Serial.read() == '\n') {
      if (command == 1) {
        Serial.println("ON");  
        digitalWrite(15, HIGH);
      } else {
        Serial.println("OFF");  
        digitalWrite(15, LOW);
      }
    }
  }
}

Trong hàm setup ta khởi tạo thư viện Serial và set mode cho pin 15 (là pin nối với led onboard) như bạn đã tìm hiểu trong các phần trước.

Trong hàm loop(), chúng ta sử dụng 1 vòng lặp while { } để liên tục kiểm tra xem có dữ liệu nào được gửi vào Serial hay không bằng câu lệnh Serial.available(). Nếu phát hiện có dữ liệu, thì câu lệnh Serial.parseInt() sẽ giúp lấy và chuyển đổi thành kiểu int (số) và lưu vào biến command. Đồng thời ta cũng kiểm tra tiếp trong Serial có kí tự ‘\n’ hay không. ‘\n’ là kí tự xuống hàng được gửi khi ta nhấn phím Enter trên máy tính. Chúng ta dùng kí tự này để kết thúc 1 câu lệnh do user gửi đến cho Arduino.

Sau đó ta dùng if else để kiểm tra user đang muốn bật (giá trị 1) hay tắt (giá trị 0) đèn led và dùng câu lệnh digitalWrite() để bật tắt tương ứng.

Bạn chọn board NodeMCU 1.0 và COM port và upload thử đoạn code. Sau khi bật cửa sổ Serial monitor, bạn thử nhập vào số 0 và 1 thì sẽ thấy đèn led onboard của Blocky Node được bật tắt tương ứng.

Như vậy là bạn đã biết cách làm việc với Serial, một công cụ rất quan trọng trong quá trình debug và test code ở các bài tiếp theo.

Arduino reference: While

Arduino reference: If (and comparison operators)

Arduino reference: Else

_

 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Fill out this field
Fill out this field
Vui lòng nhập địa chỉ email hợp lệ.
You need to agree with the terms to proceed

Menu