Arduino Uno con MPU6050 non accende led

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) :slight_smile:

#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);

  1. in conformità al REGOLAMENTO, punto 13, il cross-posting è proibito (anche tra lingue diverse) per cui, il tuo post duplicato nella sezione di lingua inglese è stato cancellato.

  2. in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

Grazie,

Guglielmo

Intanto manca pinMode(ledpin,OUTPUT);

Poi probabilmente avendo un delay(3000) perdi l'evento, ossia l'accelerometro rileva l'accelerazione ma il micro non fa in tempo a scaricare i dati dai registri dell'accelerometro prima che vengano riscritti.