Stap 4: Voorbeeld 2: seriële communicatie
Voor dit project gebruikte ik timer2 interrupts om periodiek controleren als er geen binnenkomende seriële gegevens, lezen, en op te slaan in de matrix "ledData []". Als u een kijkje op de code nemen ziet u dat de hoofdlus van de schets wat eigenlijk verantwoordelijk is voor het gebruik van de info in ledData om het licht van de juiste LED's en controle op de status van de knoppen (een functie genaamd "shift()"). De interrupt routine is zo kort mogelijk - gewoon controleren op binnenkomende bytes en ze op de juiste manier op te slaan.
Hier is de setup voor timer2:
cli (); //stop interrupts
instellen timer2 interrupt elke 128us
TCCR2A = 0; / / hele TCCR2A register ingesteld op 0
TCCR2B = 0; / / zelfde voor TCCR2B
TCNT2 = 0; //initialize waarde van de teller op 0
set vergelijk wedstrijd registreren voor 7,8 khz stappen
OCR2A = 255; / / = (16 * 10 ^ 6) / (7812.5 * 8) - 1 (moet < 256)
CTC-modus inschakelen
TCCR2A | = (1 << WGM21);
CS21 bit ingesteld voor 8 prescaler
TCCR2B | = (1 << CS21);
inschakelen van de timer vergelijk interrupt
TIMSK2 | = (1 << OCIE2A);
Sei (); //allow interrupts
Hier is de volledige Arduino sketch:
//BUTTON TEST w/ 74HC595 and 74HC165 and serial communication //by Amanda Ghassaei //June 2012
downloaden naar de MaxMSP stuk hieronder (het zal worden uitgevoerd in Max Runtime ook).