const int ledBluePin = 5; const int ledRedPin = 6; const int ledGreenPin = 4; #include const int MPU_addr=0x68; // I2C address of the MPU-6050 float accx, accy, accz; uint8_t state = 0; uint8_t prev_state = 0; #define UP 0 #define FORWARD 1 #define BLANK 2 void setup(){ Wire.begin(); Wire.beginTransmission(MPU_addr); Wire.write(0x6B); // PWR_MGMT_1 register Wire.write(0); // set to zero (wakes up the MPU-6050) Wire.endTransmission(true); Serial.begin(9600); pinMode(ledRedPin, OUTPUT); pinMode(ledGreenPin, OUTPUT); pinMode(ledBluePin, OUTPUT); analogWrite(ledRedPin, 255); analogWrite(ledGreenPin, 255); analogWrite(ledBluePin, 255); } void loop(){ Wire.beginTransmission(MPU_addr); Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) Wire.endTransmission(false); Wire.requestFrom(MPU_addr,14,true); // request a total of 14 registers accx=(Wire.read()<<8|Wire.read()) / 16384.0; // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L) accy=(Wire.read()<<8|Wire.read()) / 16384.0; // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L) accz=(Wire.read()<<8|Wire.read()) / 16384.0; // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L) if (accx < 1.0 && accy < 1.0) { // z axis downwards state = FORWARD; } else if (accx < 1.0 && accz < 1.0) { // y axis downwards state = UP; } else { state = BLANK; } if (prev_state == UP and state == FORWARD) { analogWrite(ledRedPin, 0); analogWrite(ledGreenPin, 0); analogWrite(ledBluePin, 0); delay(1000); // leave light on and ignore movements for 1 second } else { analogWrite(ledRedPin, 255); analogWrite(ledGreenPin, 255); analogWrite(ledBluePin, 255); } prev_state = state; Serial.println(state); }