Étape 3: Faire l’Arduino comprendre notre awesomeness musical
Comment conserver les données de l’échantillon sur le microcontrôleur
Vous vous souvenez certainement de l’étape précédente, que nous avons pris nos renseignements sous-échantillonnée et emballé dans un paquet peu soigné de la taille de 1 octet ou 8 bits.
Cela économise de l’espace sur le microcontrôleur comme vous le savez, mais vous demandez peut-être comment nous stocker et accéder à ces informations pour une lecture plus tard sur l’arduino.
Entrer dans avr/pgmspace.h :
#include <avr/pgmspace.h>
Ce fichier d’en-tête permet de programmer les données de notre exemple directement dans la mémoire flash sur l’Arduino, yay !
Il est assez facile à utiliser qu’avec un tout petit peu de considération sur la façon dont nous lisons les informations.
prog_uchar onebitraw[] PROGMEM = { 0XFF, 0XFF, 0XEF, 0XFF,..... };
Je suppose que les 2 points clés à faire sur ce morceau de code ci-dessus sont que nous utilisons prog_uchar comme le type de données que nous sauvegardons, c’est important pour nous pour pouvoir lire les données de la mémoire quand on joue l’échantillon. L’autre chose remarquable est que nous utilisons le mot clé PROGMEM, cela s’appuie sur le fichier d’en-tête que j’ai mentionné avr/pgmspace.h et cela indique au compilateur où stocker ce tableau de données.
prog_uchar indique au compilateur que nous sauvegardons les données du type unsigned char.
Un char est simplement de 1 octet, donc il peut stocker une valeur comprise entre 0 et 255, 8 bits et.
Nous spécifions non signé parce que nous sauvegardons des nombres positifs uniquement de 0 et plus. Cela est essentiel parce que nous ne sommes pas vraiment ranger nombres comme vous le savez, nous sommes effectivement stocker 8 échantillons sonores à l’intérieur de cette valeur, cela finit par être convertie en une valeur numérique et nous pouvons déplacer autour comme si c’est un nombre, mais la réalité est que ce n’est pas tout à fait ce qu’il semble, mais le compilateur ne sais pas ou se soucient cette configuration. Si nous étions en utilisant une méthode de stockage signé, nous serions dans un désordre bon.
Si vous avez envie de savoir plus au sujet non signés, signés et deux compléter ensuite cet article de wiki devrait être une lecture intéressante pour vous. http://en.wikipedia.org/wiki/Two's_complement
Arithmétique de pointeur est wayyy plus facile qu’il n’y paraît
Pour l’Arduino à relire nos informations de la section PROGMEM de mémoire nous va avoir besoin d’utiliser la fonction pgm_read_byte_near() ; C’est très facile à utiliser et la seule chose qui complique c’est qu’il nécessite d’utiliser des opérations arithmétiques de pointeur pour spécifier quel octet de mémoire que vous souhaitez... Comme suit :
pgm_read_byte_near(onebitraw + which_one);
Dans cet exemple, que j’ai jeter dessus, vous verrez « onebitraw », que j’utiliserai pour exprimer le stockage de nos échantillons audio. Maintenant vous pouvez être familiarisé avec l’utilisation des indices de tableau comme variable [index] et ce n’est pas différent sauf nous remplacer le [index] + index plutôt... Donner un sens ? La raison est que nous avons stocké des nos données audio comme un bloc d’octets, un après l’autre, si nous savons que chacun d'entre eux est tout simplement un plus long que celui avant elle.
Voir ? Très simple !