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à accel để dictate các xe ô tô hướng và tốc độ dựa trên vị trí bàn tay. Hướng dẫn về dự án này có thể được tìm thấy trên các kênh ForceTronics YoutubeMã này là miễn phí và mở cửa cho bất cứ ai sử dụng hoặc sửa đổi các nguy cơ của riêng bạn#include Gọi thư viện SPI, vì vậy 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" //the MPU6050 Accel sử dụng giao tiếp I2C#include "MPU6050.h"Thư viện Arduino dây là bắt buộc nếu I2Cdev I2CDEV_ARDUINO_WIRE thực hiệnđược sử dụng trong I2Cdev.h#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include "Wire.h"#endifconst int pinCE = 9; Pin này được sử dụng để thiết lập nRF24 để chế độ chờ (0) hoặc chế độ hoạt động (1)const int pinCSN = 10; Pin này được sử dụng để nói với nRF24 liệu giao tiếp SPI là một lệnh hoặc tin nhắn gửiMPU6050 accelgyro; khai báo đối tượng để truy cập và cotrol accel (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 hoặc SPI kết nối không dây của bạnconst uint64_t pAddress = 0xB00B1E5000LL; Đài phát thanh địa chỉ đường ống cho các nút 2 để giao tiếp. Địa chỉ phép boobies :-)Bộ điều khiển sẽ gửi một gói tin"" để kiểm soát tốc độ và hướng của xe. Các byte đầu tiên và cuối cùng chỉ báo hiệu sự bắt đầu và kết thúc của các góiCá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à về phía trước và ngượcCác byte thứ ba là đường bên phải và tráibyte bArray [] = {255, 125, 125, 254}; Mảng này giữ gói dữ liệu tốc độ và hướngvoid setup() {} tham gia I2C xe buýt (I2Cdev thư viện không làm điều này tự động) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.Begin(); #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::Setup (400, true); #endif accelgyro.initialize(); khởi tạo đối tượng accel wirelessSPI.begin(); Bắt đầu các mô-đun nRF24 wirelessSPI.setAutoAck(1); Đảm bảo autoACK được kích hoạt để rec sẽ gửi gói dữ liệu ack để cho bạn biết nó có trọng tải gói dữ liệu truyền wirelessSPI.enableAckPayload(); Cho phép tùy chọn ack dữ liệu (chúng tôi không sử dụng) wirelessSPI.setRetries(5,15); Thiết lập retries và thời gian cho gói tin đã không ack'd, thiết đặt hiện thời: thời gian nhỏ nhất giữa retries, không tối đa. của retries wirelessSPI.openWritingPipe(pAddress); / / ống địa chỉ mà chúng tôi sẽ liên lạc qua, phải giống nhau cho mỗi mô-đun nRF24 (đây là một máy phát) wirelessSPI.stopListening(); chúng tôi đang truyền nên không cần phải lắng nghe}void loop() {} int x, y, z; tạo biến để giữ các giá trị accel (chúng tôi không sử dụng z hướng) accelgyro.getAcceleration (& x, & y, và z); nhận được giá trị accel, lưu ý các biến được gửi bởi các tài liệu tham khảo buildArray(buildXValue(x), buildYValue(y)); xây dựng tốc độ và hướng mảng hoặc gói, điều này là những gì chúng tôi gửi đến xe để điều khiển Nếu (! wirelessSPI.write (bArray, 4)) {//if gửi không thành công cho người sử dụng biết qua giám sát nối tiếp Đặt mã ở đây để làm một cái gì đó nếu gửi gói tin lỗi } Delay(5); sự chậm trễ một trước gửi gói tin tiếp theo}Chức năng này được sử dụng để xây dựng chuyển tiếp / ngược hướng và tốc độ giá trịTheo hướng X accel được sử dụng cho việc chuyển tiếp / ngược hướng và tốc độLưu ý rằng giá trị accel đã được thu nhỏ lại để phù hợp trong một byte dữ liệubyte buildXValue (int xV) {} Nếu (xV < = 1000 & xV > = -1000) {//This tạo ra một đệm cho các giá trị dừng lại vì vậy chiếc xe không phải liên tục di chuyển trở về 125; đây là giá trị stop } Nếu khác (xV > 1000) {//if tích cực giá trị thì chiếc xe là được hướng về phía trước xV = xV - 1000; if(xV > 15000) {xV = 15000;} //ceiling đáng giá tốc độ trở về (scaleSpeed(xV,15000) + 125); quy mô tốc độ gửi, thêm 125 kể từ này là chuyển tiếp } khác {//Negative x giá trị là để cho xe đi ngược trở lại xV = xV * -1; conver phủ định giá trị để tích cực xV = xV - 1000; if(xV > 15000) {xV = 15000;} //set trần trên giá trị accel trở lại scaleSpeed(xV,15000); quy mô 1-125 }}Chức năng này được sử dụng để xây dựng chỉ đạo trái và bên phải và các giá trị tốc độHướng Y accel được sử dụng để chỉ đạo trái và bên phải và tốc độLưu ý rằng giá trị accel đã được thu nhỏ lại để phù hợp trong một byte dữ liệubyte buildYValue (int yV) {} Nếu (yV < = 1000 & yV > = -1000) {//This tạo ra một đệm cho các giá trị dừng lại vì vậy chiếc xe không phải liên tục di chuyển return 125; //this is the stop value } else if (yV > 1000) { //if positive value then car is being directed right yV = yV - 1000; if(yV > 11000) { yV = 11000; } //ceiling value for right speed return scaleSpeed(yV,11000); } else { //Negative x value is to tell the car to go backwards yV = yV * -1; yV = yV - 1000; if(yV > 11000) { yV
đang được dịch, vui lòng đợi..