Beh intanto il simulatore è, appunto, un simulatore e non è detto che funzioni al 100% come il mondo reale. Ma nel simulatore vedo anche l'"int", tu hai tolto la creazione di quella variabile locale?
A parte questo, se il codice è esattamente lo stesso (prendi quello del simulatore, togli "int" e caricalo) come anche le connessioni ed il potenziometro, in pratica sembra non avere senso.
Togli le variabili globali "val" e "val0" (che non usi) e prova a vedere via seriale cosa esce se modifichi la parte finale del loop in (metto un delay ampio per evitare troppi dati):
int val = 0;
Serial.print("val="); Serial.println(val);
// Somma tre letture consecutive
for (int i = 0; i < 3; ++i)
val += analogRead(A0);
Serial.print("val totale="); Serial.println(val);
// Calcola la media
val = val / 3;
Serial.print("val media="); Serial.println(val);
// Riporta il valore tra 0 e 100
val = map(val, 0, 1023, 0, 100); // visualbasic cosi regolerà il volume del player
Serial.print("val map="); Serial.println(val);
sprintf(outBuf, "%d;%d", headingDegrees, val); // concatena i due valori separati da puntovirgola
Serial.println(outBuf); // invii alla seriale
delay(1000); // aggiustare valore per migliori prestazioni tra 50 e 500
Posta quindi qui con copia/incolla l'output seriale di Arduino.
PS: comunque quando funzionerà questa cosa ti conviene mandare i dati via seriale solamente se uno dei due cambia e non continuamente).