Created
April 12, 2018 16:22
-
-
Save tuenhidiy/27c1c86c2e322190e11f197e5e43ce4d to your computer and use it in GitHub Desktop.
INTERACTIVE LAMP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <Wire.h> | |
// MPU6050 Slave Device Address | |
const uint8_t MPU6050SlaveAddress = 0x68; | |
// Select SDA and SCL pins for I2C communication - Pin default in WIRE LIBRARY: SCL - D1 & SDA - D2 on NODEMCU | |
// const uint8_t SCL = D1; | |
// const uint8_t SDA = D2; | |
const int R = 14; | |
const int G = 12; | |
const int B = 13; | |
// MPU6050 few configuration register addresses | |
const uint8_t MPU6050_REGISTER_SMPLRT_DIV = 0x19; | |
const uint8_t MPU6050_REGISTER_USER_CTRL = 0x6A; | |
const uint8_t MPU6050_REGISTER_PWR_MGMT_1 = 0x6B; | |
const uint8_t MPU6050_REGISTER_PWR_MGMT_2 = 0x6C; | |
const uint8_t MPU6050_REGISTER_CONFIG = 0x1A; | |
const uint8_t MPU6050_REGISTER_GYRO_CONFIG = 0x1B; | |
const uint8_t MPU6050_REGISTER_ACCEL_CONFIG = 0x1C; | |
const uint8_t MPU6050_REGISTER_FIFO_EN = 0x23; | |
const uint8_t MPU6050_REGISTER_INT_ENABLE = 0x38; | |
const uint8_t MPU6050_REGISTER_ACCEL_XOUT_H = 0x3B; | |
const uint8_t MPU6050_REGISTER_SIGNAL_PATH_RESET = 0x68; | |
int16_t AccelX, AccelY, AccelZ, Temperature, GyroX, GyroY, GyroZ; | |
void setup() { | |
pinMode(R, OUTPUT); | |
pinMode(G, OUTPUT); | |
pinMode(B, OUTPUT); | |
//Serial.begin(9600); | |
Wire.begin(SDA, SCL); | |
MPU6050_Init(); | |
} | |
void loop() { | |
uint16_t Ax, Ay, Az, T, Gx, Gy, Gz; | |
uint16_t Red, Green, Blue; | |
Read_RawValue(MPU6050SlaveAddress, MPU6050_REGISTER_ACCEL_XOUT_H); | |
// Take absolute value | |
Ax = myAbs(AccelX); | |
Ay = myAbs(AccelY); | |
Az = myAbs(AccelZ); | |
// Scale in range | |
Red = map(Ax,0,16384,0,1023); | |
Green = map(Ay,0,16384,0,1023); | |
Blue = map(Az,0,16384,0,1023); | |
// Serial print to check | |
//Serial.print("Red: "); Serial.print(Red); | |
//Serial.print("Green: "); Serial.print(Green); | |
//Serial.print("Blue: "); Serial.print(Blue); | |
// Write analog to LED | |
analogWrite(R, Red); // R | |
analogWrite(G, Green); // G | |
analogWrite(B, Blue); // B | |
delay(200); | |
} | |
void I2C_Write(uint8_t deviceAddress, uint8_t regAddress, uint8_t data){ | |
Wire.beginTransmission(deviceAddress); | |
Wire.write(regAddress); | |
Wire.write(data); | |
Wire.endTransmission(); | |
} | |
// Read all 14 registers | |
void Read_RawValue(uint8_t deviceAddress, uint8_t regAddress){ | |
Wire.beginTransmission(deviceAddress); | |
Wire.write(regAddress); | |
Wire.endTransmission(); | |
Wire.requestFrom(deviceAddress, (uint8_t)14); | |
AccelX = (((int16_t)Wire.read()<<8) | Wire.read()); | |
AccelY = (((int16_t)Wire.read()<<8) | Wire.read()); | |
AccelZ = (((int16_t)Wire.read()<<8) | Wire.read()); | |
Temperature = (((int16_t)Wire.read()<<8) | Wire.read()); | |
GyroX = (((int16_t)Wire.read()<<8) | Wire.read()); | |
GyroY = (((int16_t)Wire.read()<<8) | Wire.read()); | |
GyroZ = (((int16_t)Wire.read()<<8) | Wire.read()); | |
} | |
// Configure MPU6050 | |
void MPU6050_Init(){ | |
delay(150); | |
I2C_Write(MPU6050SlaveAddress, MPU6050_REGISTER_SMPLRT_DIV, 0x07); | |
I2C_Write(MPU6050SlaveAddress, MPU6050_REGISTER_PWR_MGMT_1, 0x01); | |
I2C_Write(MPU6050SlaveAddress, MPU6050_REGISTER_PWR_MGMT_2, 0x00); | |
I2C_Write(MPU6050SlaveAddress, MPU6050_REGISTER_CONFIG, 0x00); | |
I2C_Write(MPU6050SlaveAddress, MPU6050_REGISTER_GYRO_CONFIG, 0x00);//set +/-250 degree/second full scale | |
I2C_Write(MPU6050SlaveAddress, MPU6050_REGISTER_ACCEL_CONFIG, 0x00);// set +/- 2g full scale | |
I2C_Write(MPU6050SlaveAddress, MPU6050_REGISTER_FIFO_EN, 0x00); | |
I2C_Write(MPU6050SlaveAddress, MPU6050_REGISTER_INT_ENABLE, 0x01); | |
I2C_Write(MPU6050SlaveAddress, MPU6050_REGISTER_SIGNAL_PATH_RESET, 0x00); | |
I2C_Write(MPU6050SlaveAddress, MPU6050_REGISTER_USER_CTRL, 0x00); | |
} | |
// Absolute Value | |
float myAbs(float in){ | |
return (in)>0?(in):-(in); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment