parent
2991e5acea
commit
e6b6b9f429
1 changed files with 125 additions and 0 deletions
@ -0,0 +1,125 @@ |
|||||||
|
// Basic demo for accelerometer readings from Adafruit MPU6050
|
||||||
|
|
||||||
|
#include <Adafruit_MPU6050.h> |
||||||
|
#include <Adafruit_Sensor.h> |
||||||
|
#include <Wire.h> |
||||||
|
#include <CircularBuffer.h> |
||||||
|
|
||||||
|
#define LED1_RED 3 |
||||||
|
#define LED1_GRN 5 |
||||||
|
#define LED1_BLU 6 |
||||||
|
|
||||||
|
#define LED2_RED 9 |
||||||
|
#define LED2_GRN 10 |
||||||
|
#define LED2_BLU 11 |
||||||
|
|
||||||
|
#define LED_BRIGHT 100 |
||||||
|
|
||||||
|
Adafruit_MPU6050 mpu; |
||||||
|
|
||||||
|
double x_Buff; |
||||||
|
double y_Buff; |
||||||
|
double z_Buff; |
||||||
|
int roll; |
||||||
|
int pitch; |
||||||
|
int prevRoll = 0; |
||||||
|
|
||||||
|
CircularBuffer<int,10> values; |
||||||
|
CircularBuffer<int,10> averageDifferences; |
||||||
|
|
||||||
|
void setup(void) { |
||||||
|
|
||||||
|
pinMode(LED1_RED, OUTPUT); |
||||||
|
pinMode(LED1_GRN, OUTPUT); |
||||||
|
pinMode(LED1_BLU, OUTPUT); |
||||||
|
pinMode(LED2_RED, OUTPUT); |
||||||
|
pinMode(LED2_GRN, OUTPUT); |
||||||
|
pinMode(LED2_BLU, OUTPUT); |
||||||
|
set_led(0,0,0); |
||||||
|
|
||||||
|
|
||||||
|
Serial.begin(115200); |
||||||
|
while (!Serial) { |
||||||
|
delay(10); // will pause Zero, Leonardo, etc until serial console opens
|
||||||
|
} |
||||||
|
|
||||||
|
// Try to initialize!
|
||||||
|
if (!mpu.begin()) { |
||||||
|
//Serial.println("Failed to find MPU6050 chip");
|
||||||
|
while (1) { |
||||||
|
delay(10); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
mpu.setAccelerometerRange(MPU6050_RANGE_16_G); |
||||||
|
mpu.setGyroRange(MPU6050_RANGE_250_DEG); |
||||||
|
mpu.setFilterBandwidth(MPU6050_BAND_10_HZ); |
||||||
|
//Serial.println("");
|
||||||
|
delay(100); |
||||||
|
set_led(0,0,0); |
||||||
|
} |
||||||
|
|
||||||
|
void loop() { |
||||||
|
|
||||||
|
/* Get new sensor events with the readings */ |
||||||
|
sensors_event_t a, g, temp; |
||||||
|
mpu.getEvent(&a, &g, &temp); |
||||||
|
|
||||||
|
/* Print out the values */ |
||||||
|
/*Serial.print(a.acceleration.x);
|
||||||
|
Serial.print(","); |
||||||
|
Serial.print(a.acceleration.y); |
||||||
|
Serial.print(","); |
||||||
|
Serial.print(a.acceleration.z); |
||||||
|
Serial.print(", "); |
||||||
|
Serial.print(g.gyro.x); |
||||||
|
Serial.print(","); |
||||||
|
Serial.print(g.gyro.y); |
||||||
|
Serial.print(","); |
||||||
|
Serial.print(g.gyro.z); |
||||||
|
Serial.println(""); |
||||||
|
*/ |
||||||
|
|
||||||
|
x_Buff = float(a.acceleration.x); |
||||||
|
y_Buff = float(a.acceleration.y); |
||||||
|
z_Buff = float(a.acceleration.z); |
||||||
|
roll = atan2(y_Buff , z_Buff) * 57.3; |
||||||
|
//pitch = atan2((- x_Buff) , sqrt(y_Buff * y_Buff + z_Buff * z_Buff)) * 57.3;
|
||||||
|
|
||||||
|
values.push(roll); |
||||||
|
int average = (values[0]+values[1]+values[2]+values[3]+values[4]+values[5]+values[6]+values[7]+values[8]+values[9])/10; |
||||||
|
|
||||||
|
for (int i=0; i<10; i++) |
||||||
|
{ |
||||||
|
averageDifferences.push(abs(values[i] - average)); |
||||||
|
} |
||||||
|
|
||||||
|
int differences = averageDifferences[0]+averageDifferences[1]+averageDifferences[2]+averageDifferences[3]+averageDifferences[4]+averageDifferences[5]+averageDifferences[6]+averageDifferences[7]+averageDifferences[8]+averageDifferences[9]; |
||||||
|
|
||||||
|
if (differences < 2 && abs(prevRoll - average)>1) |
||||||
|
{ |
||||||
|
prevRoll = average; |
||||||
|
Serial.print(roll+180); |
||||||
|
set_led(0,LED_BRIGHT,0); |
||||||
|
} |
||||||
|
else if (differences >= 2) |
||||||
|
{ |
||||||
|
set_led(LED_BRIGHT,0,0); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
set_led(0,0,LED_BRIGHT); |
||||||
|
} |
||||||
|
|
||||||
|
delay(50); |
||||||
|
} |
||||||
|
|
||||||
|
void set_led(uint8_t r, uint8_t g, uint8_t b) |
||||||
|
{ |
||||||
|
analogWrite(LED1_RED, 255-r); |
||||||
|
analogWrite(LED1_GRN, 255-g); |
||||||
|
analogWrite(LED1_BLU, 255-b); |
||||||
|
analogWrite(LED2_RED, 255-r); |
||||||
|
analogWrite(LED2_GRN, 255-g); |
||||||
|
analogWrite(LED2_BLU, 255-b); |
||||||
|
} |
Loading…
Reference in new issue