padoang:
Dal codice ottengo come risultato p=4294958080 invece di 384000
Che è esattamnete ciò che devi ottenere visto che, come ti ha spiegato fabpolli, NON hai specificato il tipo di numeri che stai usando, per cui ... per il 32 basta un byte, per il 12000 basta un int, il compilatore, per ottimizzare, fa la moltiplicazione tra due int e tronca il risultato a 16 bit segnati (int) ...
32 x 12000 dovrebbe dare 384000 che in hex è 0x5DC00, ma ... dato che un int è 16 bit segnato, viene troncato e diventa 0xDC00, numero NEGATIVO che vale, in decimale, -9216 che, in seguito, tu sposti in un unsigned long, che è di 32 bit non segnati e che quindi viene portato come 0xFFFFDC00 che, alla fine, in decimale da esattamente 4294958080.
Come vedi ... una minima disattanzione può provocare disastri
@padoang, Io aggiungo una domanda perchè sono curioso,
Perchè nel programmino di esempio che hai fatto hai usato la conversione in quella schifezza di String?
Nel forum sempre sconsigliamo di usare le String
Beh oltre a mettere semplicemente un cast esplicito "p=(long)32*12000;" (funziona anche con UL ma per me è più leggibile "(long)" di "UL" ), direi che devi evitare le String, sia perché qui Serial.println(String(p));
è inutile, sia perché su Arduino va proprio evitato anche solo di pensare alle "String"...