Buonasera a tuttii
Sono alle prese da diverso tempo con la scrittura del codice per far accendere un led al variare dell'asse AcX di un MPU 6050 collegato ad un Arduino UNO.
Premetto che i valori sul monitor seriale sono visualizzati correttamente ed ho effettuato molte volte le diagnostiche che sono consigliate online per verificare il funzionamento dell'MPU.
Il problema è che anche quando il parametro AcX supera il valore di 6000 il led che dovrebbe accendersi NON si accende.
Sto impazzendo...qualsiasi idea o suggerimento sono più che ben accetti.
Di seguito copio ed incollo l'intero codice dato che credo sia più semplice per voi leggerlo ed aiutarmi (spero)
#include<Wire.h>
int ledpin = 9;
int AcX = Wire.read()<<8|Wire.read();
const int MPU=0x68; // I2C address of the MPU-6050
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
void setup(){
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0); // set to zero (wakes up the MPU-6050)
Wire.endTransmission(true);
Serial.begin(115200);
}
void loop(){
Wire.beginTransmission(MPU);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU,14,true); // request a total of 14 registers
AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
GyX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
GyY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
GyZ=Wire.read()<<8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
if ( AcX > 6000) {
digitalWrite (ledpin, HIGH) ;
}
Serial.print("Accelerometer: ");
Serial.print("X = "); Serial.print(AcX);
Serial.print(" | Y = "); Serial.print(AcY);
Serial.print(" | Z = "); Serial.println(AcZ);
Serial.print("Gyroscope: ");
Serial.print("X = "); Serial.print(GyX);
Serial.print(" | Y = "); Serial.print(GyY);
Serial.print(" | Z = "); Serial.println(GyZ);
Serial.println(" ");
delay(3000);