Stap 3: Het maken van de Arduino begrijpen onze muzikale awesomeness
Hoe ik de voorbeeldgegevens opslaan op de microcontroller
Ongetwijfeld zult u herinneren uit de vorige stap dat we onze gedownsampled informatie namen en het in een nette klein pakket van de grootte van 1 byte of 8 bits verpakt.
Dit bespaart ruimte op de microcontroller, zoals u weet, maar je je afvragen kunt hoe we slaan en toegang tot deze informatie voor het afspelen later op de arduino.
Voer avr/pgmspace.h:
#include <avr/pgmspace.h>
Deze headerbestand laat ons toe om onze voorbeeldgegevens program rechtstreeks in het flash-geheugen op de Arduino, yay!
Het is vrij makkelijk te gebruiken alleen met een klein beetje overwegingen over hoe we de informatie terug te lezen.
prog_uchar onebitraw[] PROGMEM = { 0XFF, 0XFF, 0XEF, 0XFF,..... };
Ik denk dat de 2 belangrijkste punten te maken over dat stuk van bovenstaande code dat we prog_uchar als het type gegevens die we opslaan, dit is belangrijk voor ons om de gegevens terug uit het geheugen te lezen wanneer we het monster spelen te kunnen gebruiken. De andere opmerkelijke ding is dat we gebruiken het sleutelwoord PROGMEM, dit is gebaseerd op het headerbestand dat ik genoemd avr/pgmspace.h en dit de compiler waar vertelt u deze array van gegevens wilt bewaren.
prog_uchar vertelt de compiler dat we zijn het opslaan van gegevens van het type unsigned char.
Een char is gewoon 1 byte, zodat het een waarde van 0 tot 255, 8 bits kan worden opgeslagen.
Wij geven niet ondertekend omdat we alleen positieve getallen tussen 0 en hoger opslaat. Dit is essentieel omdat we zijn niet echt opslag van getallen, zoals u zich herinnert wellicht, we zijn eigenlijk 8 geluidsvoorbeelden binnenkant van deze waarde op te slaan, dit eindigt wordt geconverteerd naar een numerieke waarde en hebben we het kunt bewegen alsof het is een getal, maar de realiteit is het niet helemaal wat het lijkt, maar de compiler niet weet of de zorg over deze configuratie. Als we een ondertekende opslagmethode gebruikten zouden we in een juiste puinhoop.
Als u behoefte heeft aan meer te weten over ondertekend, niet-ondertekende en two's dan dit wikiartikel aanvullen moet worden een interessante lezen voor u. http://en.wikipedia.org/wiki/Two's_complement
Aanwijzer rekenkundige is wayyy makkelijker dan het klinkt
Voor de Arduino terug onze om informatie te lezen in de sectie PROGMEM van het geheugen zullen we nodig gebruik van de functie-pgm_read_byte_near(); Het is zeer makkelijk te gebruiken en het enige dat het bemoeilijkt is dat het moet u gebruikmaken van de rekenkunde van de aanwijzer om aan te geven welke byte van geheugen... Als volgt:
pgm_read_byte_near(onebitraw + which_one);
In dit voorbeeld die ik lay-out van boven ziet u 'onebitraw', die ik benutten zal om de opslag van onze audio-samples express. Nu u wellicht bekend met het gebruik van de array indices zoals variabele [index] en dit is niet anders, behalve wij vervangen door de [index] + index in plaats daarvan... Zinvol? De reden is dat we onze audio gegevens opgeslagen als een blok van bytes, na elkaar, zodat we weten dat elk gewoon een meerdere langs de voorafgaand aan het.
Zie je wel? Heel eenvoudig!