NDT gửi vào
- 14504 lượt xem
Giới thiệu
Đây là loạt bài vắn tắt chia sẻ kinh nghiệm giúp các bạn có thể sử dụng các mudule cũng như tiếp cận code một cách ngắn gọn và dễ hiểu hơn 
Mục đích bài viết: Hướng dẫn điều khiển một Servo trong các dự án robot từ xa thông qua module NRF24 bằng biến trở 



Công cụ
Lắp mạch
Mạch gửi
Mạch nhận
Chương trình
Mạch gửi
#include <SPI.h> #include "RF24.h" const uint64_t pipe = 0xE8E8F0F0E1LL; // địa chỉ để phát RF24 radio(9,10); //thay 10 thành 53 với mega int msg[3]; // tạo mảng int lưu giá trị nhận được (không dùng byte nhé vì max byte chỉ 256 giá trị trong khi giá trị truyền analog max 1024 giá trị const int bientro = A0; // chọn chân biến trở là A0 void setup(){ radio.begin(); radio.setAutoAck(1); radio.setRetries(1,1); radio.setDataRate(RF24_1MBPS); // Tốc độ truyền radio.setPALevel(RF24_PA_MAX); // Dung lượng tối đa radio.setChannel(10); // Đặt kênh radio.openWritingPipe(pipe); // mở kênh Serial.begin(9600); // mở cổng Serial tiện debug } void loop(){ int value = analogRead(bientro); // đọc giá trị biến trở msg[0] = value; // gán mảng bằng giá trị đọc được radio.write(&msg, sizeof(msg)); // bắt đầu truyền dữ liệu Serial.println(*msg); // kiểm tra lệnh gửi hoặc có thể truyền vào msg[0] delay(50); // đợi 50ms gửi lần sau }Mạch nhận
#include "RF24.h" #include <Servo.h> // Thư viện điều khiển servo Servo myservo; // Khai báo đối tượng myservo dùng để điều khiển servo const uint64_t pipe = 0xE8E8F0F0E1LL; // địa chỉ phát RF24 radio(9,10);//thay 10 thành 53 với mega int msg[3]; // tạo mảng int lưu giá trị nhận được (không dùng byte nhé vì max byte chỉ 256 giá trị trong khi giá trị truyền analog max 1024 giá trị) void setup(){ Serial.begin(9600); radio.begin(); radio.setAutoAck(1); radio.setDataRate(RF24_1MBPS); // Tốc độ dữ liệu radio.setChannel(10); // Đặt kênh radio.openReadingPipe(1,pipe); radio.startListening(); myservo.attach(A0); // cài đặt chân A0 điều khiển servo } void loop(){ if (radio.available()){ while (radio.available()){ radio.read(&msg, sizeof(msg)); int servoPos = map(msg[0], 0, 1023, 0, 179); // hàm map chuyển giá trị 0 đến 1023 về 0 đến 179 của servo myservo.write(servoPos); // Cho servo quay một góc là servoPos độ Serial.println(servoPos); // kiểm tra góc tren Serial monitor delay(50); // đợi 50ms cho servo chuyển góc } } }Ở bài sau chúng ta sẽ thử sử dụng button để điều khiển servo từ xa nhé, sử dụng INPUT_PULLUP