// Mã này là dành cho một chiếc xe điều khiển từ xa bằng cách sử dụng nRF24L01 cho truyền thông không dây
// và tăng tốc phần cứng để dictate hướng xe hơi và tốc độ dựa trên postion tay.
// Các hướng dẫn về dự án này có thể được tìm thấy trên các kênh Youtube ForceTronics
// này đang mở miễn phí cho bất cứ ai sử dụng hoặc sửa đổi có nguy cơ của riêng bạn #include
// Gọi thư viện SPI để bạn có thể giao tiếp với nRF24L01 +
#include// nRF2401 libarary tìm thấy tại https://github.com/tmrh20/RF24/
#include// nRF2401 libarary tìm thấy tại https://github.com/tmrh20/RF24/
#include "I2Cdev.h" // các MPU6050 Accel sử dụng I2C giao
#include "MPU6050.h" thư viện // Arduino dây là cần thiết nếu I2Cdev I2CDEV_ARDUINO_WIRE thực hiện // được sử dụng trong I2Cdev.h # nếu I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h" #endif const int pinCE = 9; // Pin này được sử dụng để thiết lập các nRF24 về chế độ chờ (0) hoặc chế độ hoạt động (1) const int pinCSN = 10; // Pin này được sử dụng để báo cho nRF24 liệu truyền thông SPI là một lệnh hoặc tin nhắn để gửi ra MPU6050 accelgyro; // khai báo các đối tượng để truy cập và cotrol sự tăng tốc phần cứng (chúng tôi không sử dụng con quay hồi chuyển) RF24 wirelessSPI (pinCE, pinCSN); // Tạo đối tượng nRF24 của bạn hoặc không dây kết nối SPI const uint64_t pAddress = 0xB00B1E5000LL; // Địa chỉ ống Đài phát thanh cho 2 nút để giao tiếp. Các địa chỉ rõ vụng :-) // Bộ điều khiển sẽ gửi một "gói" để kiểm soát tốc độ và hướng của xe. Các byte đầu tiên và cuối cùng chỉ là khởi đầu và kết thúc của gói // Các byte thứ hai và thứ ba đại diện cho tốc độ và hướng của xe. Các byte thứ hai là cho về phía trước và ngược // byte thứ ba là cho đúng và hướng trái byte bArray [] = {255, 125, 125, 254}; // Mảng này giữ tốc độ và gói hướng trống setup () { // tham gia bus I2C (thư viện I2Cdev không làm điều này tự động) # nếu I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire: : thiết lập (400, true); #endif accelgyro.initialize (); // khởi tạo các đối tượng tăng tốc phần cứng wirelessSPI.begin (); // Bắt đầu module nRF24 wirelessSPI.setAutoAck (1); // Bảo đảm autoACK được kích hoạt để rec gửi gói tin ACK để cho bạn biết nó có trọng tải gói tin truyền wirelessSPI.enableAckPayload (); // Cho phép trọng tải ack tùy chọn (chúng tôi không sử dụng này) wirelessSPI.setRetries (5,15); // Đặt lên thử lại và thời gian cho các gói tin mà không được ack'd, thiết lập hiện thời: thời gian nhỏ nhất giữa các lần thử lại, tối đa không. các thử lại wirelessSPI.openWritingPipe (pAddress); // địa chỉ ống rằng chúng tôi sẽ giao tiếp trên, phải giống nhau cho mỗi mô-đun nRF24 (đây là một transmitter) wirelessSPI.stopListening (); // chúng tôi là máy phát do đó, không cần phải lắng nghe } trống loop () { int x, y, z; // tạo biến để giữ các giá trị tăng tốc phần cứng (chúng tôi không sử dụng hướng z) accelgyro.getAcceleration (& x, & y, & z); // lấy giá trị tăng tốc phần cứng, các biến lưu ý được gửi bằng cách tham khảo buildArray (buildXValue (x), buildYValue (y)); // xây dựng tốc độ và mảng hướng hoặc gói, đây là những gì chúng tôi gửi xe để kiểm soát if (! wirelessSPI.write (bArray, 4)) {// nếu gửi không cho người dùng biết trên màn hình nối tiếp // đặt mã ở đây để làm một cái gì đó nếu gửi các gói tin không } chậm trễ (5); // hoãn trước khi gửi gói tin kế tiếp } // Hàm này được sử dụng để xây dựng về phía trước / ngược hướng và tốc độ giá trị // Các phương X của tăng tốc phần cứng được sử dụng để chuyển tiếp / ngược hướng và tốc độ // Chú ý rằng tăng tốc phần cứng giá trị đã được thu nhỏ để phù hợp với một byte dữ liệu byte buildXValue (int xV) { if (xV <= 1000 & xV> = -1000) {// Điều này tạo ra một đệm cho giá trị dừng để chiếc xe không được liên tục di chuyển trở lại 125; // đây là giá trị dừng } else if (xV> 1000) {// nếu giá trị tích cực sau đó xe đang được hướng về phía trước xV = xV - 1000; if (xV> 15000) {xV = 15000; } // Giá trị trần cho tốc độ về phía trước trở lại (scaleSpeed (xV, 15000) + 125); // tốc độ quy mô để gửi, thêm 125 vì đây là mong } else {// giá trị x âm là để cho các xe đi ngược xV = xV * -1; // conver giá trị âm sang dương xV = xV - 1000; if (xV> 15000) {xV = 15000; } // Đặt trần tăng tốc phần cứng giá trị trở lại scaleSpeed (xV, 15000); // quy mô để 1-125 } } // Hàm này được sử dụng để xây dựng quyền và hướng trái và giá trị tốc độ // Hướng Y của tăng tốc phần cứng được sử dụng cho các quyền và hướng trái và tốc độ // Chú ý rằng giá trị tăng tốc phần cứng đã được thu nhỏ để phù hợp với một byte dữ liệu byte buildYValue (int YV) { if (YV <= 1000 & YV> = -1000) {// Điều này tạo ra một đệm cho giá trị dừng để chiếc xe không được liên tục di chuyển trở lại 125; // đây là giá trị dừng } else if (YV> 1000) {// nếu giá trị tích cực sau đó xe đang được dẫn ngay YV = YV - 1000; if (YV> 11000) {YV = 11000; } // Trần giá trị so với tốc độ ngay trở lại scaleSpeed (YV, 11000); } else {// giá trị x âm là để cho các xe đi ngược YV = YV * -1; YV = YV - 1000; if (YV> 11000 ) {YV
đang được dịch, vui lòng đợi..