Stap 7: onderbreken
incomingAudio = ADCH;
in de functie van de loop van de Arduino schets heb ik het in een speciale functie genaamd een "interrupt routine." De interrupt routering er zo uitziet:
ISR(ADC_vect) {}
incomingAudio = ADCH;
}
Denk aan het als een normale schets, de Arduino eerste doorloopt de Setup functioneren dan de loop, maar elke 26us begint (wanneer een nieuwe waarde klaar van A0 is) de Arduino stopt wat het doet in de lus en doet wat is ingekapseld in de interrupt routine (in dit geval alleen de regel "incomingAudio = ADCH;"). Zodra de interrupt routine heeft beëindigd, pikt de Arduino weer waar het was in de loop van een andere 26us. Vervolgens de interrupt routine wordt uitgevoerd opnieuw... dit gaat op voor eeuwig herhalende. Als u wilt, kunt u meer lezen over Arduino onderbreekt hier.
Deze interruptcode over het algemeen een betere manier van het lezen van het inkomend signaal dan de manier waarop die ik schreef het in de laatste stap, omdat u de variabele incomingAudio alleen wilt bijwerken zodra telkens wanneer een nieuwe waarde komt. Bijwerken van de variabele meerdere malen voordat de waarde heeft nog tijd om te veranderen is overbodig. Ook, als u wilt opnemen van deze waarden kun je de code van de opslag in de interrupt routine zodat u weet dat uw opslag-bemonsteringssnelheid precies 38,5 is kHz.
//Audio out with 38.5kHz sampling rate and interrupts //by Amanda Ghassaei