#include// Bao gồm thư viện Wire.h vì vậy chúng tôi có thể giao tiếp với các con quay hồi chuyển // Khai báo các biến int cal_int; unsigned long UL_timer; gyro_pitch đôi, gyro_roll, gyro_yaw; gyro_roll_cal đôi, gyro_pitch_cal, gyro_yaw_cal; byte highByte, lowByte; // cài đặt thường xuyên trống setup () { Wire.begin (); // Bắt đầu I2C như là bậc thầy Serial.begin (9600); // Khởi động nối tiếp connetion @ 9600bps // Các con quay hồi chuyển được tắt theo mặc định và cần phải được bắt đầu Wire.beginTransmission (105); // Bắt đầu giao tiếp với con quay hồi chuyển (địa chỉ 1.101.001) Wire.write (0x20); // Chúng tôi muốn viết để đăng ký 20 Wire.write (0x0F); // Thiết lập các bit đăng ký như là 00001111 (Bật gyro và cho phép tất cả các trục) Wire.endTransmission (); // Kết thúc truyền với gyro Wire.beginTransmission (105); // Bắt đầu giao tiếp với con quay hồi chuyển (địa chỉ 1.101.001) Wire.write (0x23); // Chúng tôi muốn viết để đăng ký 23 Wire.write (0x80); // Thiết lập các bit đăng ký như là 10000000 (Block dữ liệu Cập nhật hoạt động) Wire.endTransmission (); // Kết thúc truyền với con quay hồi chuyển chậm (250); // Cho thời gian quay hồi chuyển để bắt đầu // Hãy lấy nhiều mẫu để chúng tôi có thể xác định các con quay hồi chuyển trung bình bù đắp Serial.print ( "Bắt đầu chuẩn ..."); // Nhắn Print cho (cal_int = 0; cal_int <2000; cal_int ++) {// Lấy 2.000 bài đọc chuẩn gyro_signalen (); // Đọc đầu ra gyro gyro_roll_cal + = gyro_roll; // Giá trị cuộn Quảng cáo để gyro_roll_cal gyro_pitch_cal + = gyro_pitch; // Giá trị sân Quảng cáo để gyro_pitch_cal gyro_yaw_cal + = gyro_yaw; // Giá trị yaw Quảng cáo để gyro_yaw_cal if (cal_int% 100 == 0) Serial.print ( "."); // In một dấu chấm 100 bài đọc chậm trễ (4); // Đợi 4 mili giây trước khi các vòng tiếp theo } // Bây giờ chúng ta có biện pháp 2000, chúng ta cần phải chia năm 2000 để có được những con quay hồi chuyển trung bình bù đắp Serial.println ( "done!"); // 2000 các biện pháp được thực hiện! Gyro_roll_cal / = 2000; // Chia tổng cuộn vào năm 2000 gyro_pitch_cal / = 2000; // Chia tổng số sân vào năm 2000 gyro_yaw_cal / = 2000; // Chia tổng yaw năm 2000 } // chương trình chính khoảng trống vòng lặp () { delay (250); // Chờ 250 micro giây cho mỗi vòng lặp gyro_signalen (); // Đọc tín hiệu gyro print_output (); // In ra } trống gyro_signalen () { Wire.beginTransmission (105); // Bắt đầu giao tiếp với con quay hồi chuyển (địa chỉ 1.101.001) Wire.write (168); // Bắt đầu đọc @ đăng ký 28h và tự động tăng với mỗi việc đọc Wire.endTransmission (); // Kết thúc truyền Wire.requestFrom (105, 6); // Yêu cầu 6 byte từ gyro khi (Wire.available () <6); // Chờ cho đến khi 6 byte được nhận lowByte = Wire.read (); // Đầu tiên nhận được byte là phần thấp của dữ liệu góc highByte = Wire.read (); // Thứ hai nhận được byte là phần cao của dữ liệu góc gyro_roll = ((highByte << 8) | lowByte); // Multiply highByte 256 và lowByte quảng cáo nếu (cal_int == 2000) gyro_roll - = gyro_roll_cal; // Chỉ bù sau khi hiệu chỉnh lowByte = Wire.read (); // Đầu tiên nhận được byte là phần thấp của dữ liệu góc highByte = Wire.read (); // Thứ hai nhận được byte là phần cao của dữ liệu góc gyro_pitch = ((highByte << 8) | lowByte); // Multiply highByte 256 và quảng cáo lowByte gyro_pitch * = -1; // Invert trục if (cal_int == 2000) gyro_pitch - = gyro_pitch_cal; // Chỉ bù sau khi hiệu chỉnh lowByte = Wire.read (); // Đầu tiên nhận được byte là phần thấp của dữ liệu góc highByte = Wire.read (); // Thứ hai nhận được byte là phần cao của dữ liệu góc gyro_yaw = ((highByte << 8) | lowByte); // Multiply highByte 256 và quảng cáo lowByte gyro_yaw * = -1; // Invert trục if (cal_int == 2000) gyro_yaw - = gyro_yaw_cal; // Chỉ bù sau khi hiệu chuẩn } trống print_output () { Serial.print ( "Pitch:"); if (gyro_pitch> = 0) Serial.print ( "+"); Serial.print (gyro_pitch / 57.14286,0); // Chuyển đến độ mỗi giây nếu (gyro_pitch / 57,14286-2> 0) Serial.print ( "Nou"); else if (gyro_pitch /
đang được dịch, vui lòng đợi..
