V tem nadaljevanju bomo opisali program prenosnega predvajalnika glasbe.
Softver
Program arduino_raw_player.ino je napisan v Arduino programskem jeziku in ga lahko brezplačno dobite v uredništvu revije Svet elektronike. Če ga odprete v Arduino okolju boste najprej videli ukaze za vključevanje potrebnih Arduino knjižnic:
- #include <SimpleSDAudio.h>
- #include <MemoryFree.h>
- #include <EEPROM.h>
- #include <Vcc.h>
Naj povemo nekaj besed o knjižnicah.
SimpleSDAudio
Ta knjižnica me je motivirala k izdelavi tega projekta in hkrati je tudi najvažnejši del programa. Knjižnica mikrokontrolerju omogoča predvajanje glasbe, ki je shranjena v RAW formatu na SD kartici. Večina naprav, ki imajo zveze z digitalnim predvajanjem glasbe uporablja MP3 zapis, vendar v našem primeru to ni tako. MP3 je vrsta kompresije, ki omogoča, da se zvočni zapis shrani v datoteko manjše velikosti od originalnega, RAW zapisa. Vendar mora to datoteko nekdo razpakirati, da bi jo računalnik lahko interpretiral. Za osebni računalnik to ni problem, za mikrokontroler kot je ATmega328P bi za ta postopek potreboval zunanji dekoder. Zato SimpleSDAudio knjižnica ne reproducira glasbe shranjene v MP3 formatu, pač pa v RAW formatu. RAW format je točno to, kar pomeni (raw = surov, neobdelan, nekomprimiran) in zato ni procesa dekompresije, ki bi nam porabil dragoceno procesorsko moč.
Predvajanje zvoka zapisanega na tak način ima zelo visoko kvaliteto, vendar pa nima kompresije, nima prihranka pri spominu in to pomeni, da bo velikost datoteke, v kateri je shranjen zvočni zapis v RAW formatu, nekajkrat večja od ustrezne MP3 datoteke. Tako bo MP3 pesem velikosti 5 MB v RAW formatu zavzemala 20 MB. Računajte s tem, da bo 30 pesmi običajne dolžine zavzelo okoli 1 GB spomina. Naj vas to posebej ne skrbi, ker naš predvajalnik podpira FAT32 formatirane SDHC kartice. Na spletni strani knjižnice ni točno specificirano, kako velike kartice so podprte. Čeprav na spletnih forumih priporočajo uporabo kartic s FAT16 formatom (SD kartica kapacitete 2 GB), sem jaz preizkusil 16 GB kartico in je delala brez problemov.
SimpleSDAudio knjižnica je odlično napisana in dejansko maksimalno izkorišča ATmega328 mikrokontroler. Obstaja nekaj alternativ, ki počnejo podobne reči, obstajajo tudi knjižnice za predvajanje WAV avdio zapisov. Vendar pa od vseh knjižnic, ki sem jih preizkusil, ta omogoča najboljše predvajanje avdio zapisa. To pa zato, ker ima dobro optimiran audio core, ki je sprogramiran v asemblerju. V knjižnici so vgrajeni ukazi za enostavno sprehajanje po mapah in branje datotek shranjenih na SD kartici.
SimpleSDAudio knjižnica je enostavna za uporabo. Omogoča mi, da z enim ukazom zaženem in zaustavim predvajanje. Če jo želite še bolj podrobno preučiti, poglejte v datoteko SimpleSDAudio.h ali obiščite spletno stran projekta (http://www.hackerspace-ffm.de/wiki/index.php?title=SimpleSDAudio).
Memory free
Ta majhna knjižnica mi služi za določanje prostega RAM-a v mikrokontrolerju. Prevajalniki v novejših verzijah Arduino programa optimirajo RAM, s pomočjo te knjižnice lahko preverjam izkoriščenost RAMa med delovanjem mikrokontrolerja. Knjižnica ni nujna za delovanje naprave, vendar pa je na splošno koristna za kateri koli Arduino projekt. Za podrobnosti obiščite GitHub respozitorij projekta: https://github.com/mpflaga/Arduino-MemoryFree. Iz te knjižnice uporabljamo samo eno funkcijo, freeMemory(); funkcija vrača številko, ki predstavlja kapaciteto svobodnega RAMa v mikrokontrolerju v bajtih.
EEPROM
Ta knjižnica pride skupaj z Arduino programom in služi za manipuliranje EEPROMa mikrokontrolerja. To je trajni spomin, v katerem ostanejo podatki vpisani tudi po izklopu napajanja mikrokontrolerja. ATmega328 ima 1 kB EEPROMa, od katerega bomo uporabili samo 2 bajta. V njiju bomo shranili zaporedno številko pesmi, ki se je reproducirala preden smo izključili napajanje (tako bi se predvajanje ob ponovnem vklopu napajanja nadaljevala od te pesmi), pa tudi stanje shuffle načina, da ga ne bi bilo potrebno ponovno vklapljati.
Prenosni Arduino predvajalnik glasbe (2)
2016_SE240_42