Étape 4: Exemple 2: Communication série
Pour ce projet, j’ai utilisé le timer2 interrompt périodiquement vérifier s’il y avait des données séries entrantes, lisez-le, et stockez-le dans la matrice "ledData []". Si vous jetez un oeil sur le code, vous verrez que la boucle principale de l’esquisse est ce qui est réellement responsable d’à l’aide de l’info dans ledData pour allumer les LEDs corrects et vérifier l’état des boutons (une fonction appelée "shift()"). La routine d’interruption est aussi courte que possible - juste recherchant les octets entrants et stockant de manière appropriée.
Voici la configuration pour timer2 :
() de CLI ; //stop interruptions
Définissez le timer2 interruption chaque 128us
TCCR2A = 0; / / set ensemble TCCR2A Registre à 0
TCCR2B = 0; / / Idem pour TCCR2B
TCNT2 = 0; //initialize valeur de compteur à 0
Comparez Set match registre d’avancements d’échelon 7,8 khz
OCR2A = 255; / / = (16 * 10 ^ 6) / (7812.5 * 8) - 1 (doit être < 256)
activer le mode de la CCT
TCCR2A | = (1 << WGM21) ;
Néc CS21 bit Prédiviseur 8
TCCR2B | = (1 << CS21) ;
activer minuteur comparer interruption
TIMSK2 | = (1 << OCIE2A) ;
SEI (); //allow interruptions
Voici le sketch Arduino complet :
Télécharger le patch de MaxMSP ci-dessous (il s’exécutera dans Max Runtime ainsi).