32KHz NON è la velocità di Leonardo, il cui clock è 16 MHz, bensì la frequenza che il micro di Leonardo genera sul pin che pilota il LED IR, lo fa mediante opportuna manipolazione dei registri, cosa che avviene certamente a livello di libreria; quindi si potrebbe verificare qual è il punto della lib che genera i 32KHz e portarli a 38Khz; però se già agendo sui delay, come ti consigliavo prima sei arrivato a questi risultati è una cosa buona; secondo me pilotando il LED a 38khz si risolve tutto.
Se il codice è quello postato, allora la risposta è: No. Quella libreria non manipola nessun registro.
Genera un'onda quadra semplicemente con la tecnica del bit-banging, ossia mette HIGH/LOW velocemente il segnale del pin.
void shutterNow()
{
for(int i=0; i<16; i++) {
digitalWrite(_pin, HIGH);
delayMicroseconds(11);
digitalWrite(_pin, LOW);
delayMicroseconds(11);
}
delayMicroseconds(7330);
for(int i=0; i<16; i++) {
digitalWrite(_pin, HIGH);
delayMicroseconds(11);
digitalWrite(_pin, LOW);
delayMicroseconds(11);
}
}
Partendo dall'articolo in cui si menzionano i tempi richiesti dalla macchina fotografica, hanno scritto questo codice che dovrebbe simulare quando richiesto in tema di frequenza e tempi di on/off dell'impulso.
Ovviamente tutto si basa sul tempo che il micro impiega ad eseguire la digitalWrite, che non è proprio velocissima. Senza un frequenzimetro per misurare il segnale che ti esce sul pin, è difficile. Non ti resta che andare per tentativi. Potresti manipolare direttamente i registri relativi per guadagnare in tempi di esecuzione.