Coordinate con magnetometro

Perdonami, ma che sono queste prove "alla cieca"? O cerchi di capire cosa fanno certe istruzioni e funzioni, oppure non puoi pensare di far andare un motore mettendo il carburatore al posto della batteria...
Leggi bene il mio post #43, poi per le modifiche che ti consigliavo erano queste, che devi provare:

...
// Lettura corrente del magnetometro 
// (spostata qui come variabile globale intera)
int headingDegrees;
     
void setup() {
  Wire.begin();
...

void loop() {
  MostraOra();
  //char outBussola[8];
  bussola(); // richiama la routine che legge i gradi
...
  sprintf(outBuf, "%d;%d", headingDegrees, val); // concatena i due valori separati da puntovirgola
  Serial.println(outBuf); // invii alla seriale
... 
  delay(300); // aggiustare valore per migliori prestazioni tra 50 e 500
}
     
void bussola() {  //evento bussola per indicare i gradi del magnetometro,
  sensors_event_t event;
  mag.getEvent(&event);
  float heading = atan2(event.magnetic.y, event.magnetic.x);
  float declinationAngle = 0.06;
  heading += declinationAngle;
  if (heading < 0) {
    heading += 2 * PI;
  }
  if (heading > 2 * PI) {
    heading -= 2 * PI;
  }
  headingDegrees = heading * 180 / M_PI;
}
...