Le but de cet exercice est d'implémenter un métronome.
La carte permet de donner le tempo à la fois à l'aide d'une LED et d'un buzzer. L'utilisateur pourra changer le tempo avec une roue encodeuse.
L'ensemble des documentations est disponible ici.
Faites clignoter la LED à 100BPM. Pour cela, branchez-la sur un pin, par exemple PA7. Sur la carte, il s'agit du pin du milieu du connecteur. Ensuite, utilisez l'en-tête hardware/include/gpio.h pour configurer le pin :
On souhaite faire buzzer en même temps que la LED. Pour faire buzzer, il ne suffit pas de mettre le pin relié au buzzer à 1, mais il faut le faire osciller à la fréquence de la note choisie. Nous allons donc brancher le buzzer sur un pin qui utilise un autre timer, par exemple PA2 avec le timer 5 channel 3. Configurez ce pin, et le timer pour qu'il vibre à 440Hz. Pour activer/désactiver le son il suffit d'utiliser un rapport cyclique de 1/2 ou de 0.
Pour buzzer en mêm temps que la LED, vous pouvez configurer une interruption sur un autre channel du timer de la LED. Regardez dans hardware/include/timer.h :
La roue encodeuse peut servir de bouton si on appuie dessus. Branche le pin de gauche du connecteur sur un pin de la carte (par exemple PA6). Toujours dans hardware/include/gpio.h, regardez :
Il vous reste à récupérer les informations de la roue codeuse. Elle utilise deux pins avec un signal en quadrature (voir l'image ci-dessous). À chaque cran de rotation de la roue, l'un ou l'autre pin change de valeur de telle sorte que la séquence est différente selon le sens de rotation de la roue. Il est ainsi possible de déterminer le sens de rotation en lisant les valeurs sur ces deux pins.
Dans un premier temps lisez en boucle les valeurs avec gpio_get et agissez en fonction. Pour aller plus loin, programmez des interruption sur les changements de valeurs despins.