Coordinate con magnetometro

Credo che sia perché tu qui definisci una variabile locale "val" che però ha lo stesso nome di quella che hai già messo globale:

...
int val = 0;
...
      int val = 0;
      // Somma tre letture consecutive
      for (int i = 0; i < 3; ++i)
          val += analogRead(A0);

Prova a togliere "int" per usare sempre e solo quella globale:

      val = 0;
      // Somma tre letture consecutive
      for (int i = 0; i < 3; ++i)
          val += analogRead(A0);