V preteklem nadaljevanju smo se spoznali z DF player mini modulom in njegovimi možnostmi, sedaj se bomo pozabavali z ustrezno programsko podporo: pripravil sem datoteke za vsako verzijo programske podpore DF playerja in Demo primere programov pisanih v Bascom-AVR programskem jeziku, ki jih skupaj s programsko podporo DF playerja lahko snamete iz spletnih strani revije Svet Elektronike.
Avtor: Mladen Čempuh
E-pošta: cempuh.mladen@gmail.com
2021-302-41
DF player Ver 1.1
V tej verziji se za čas trajanja reprodukcije zaustavlja izvrševanje Do-Loop zanke. Ukazi, s katerimi se pošiljajo podatki na DF player modul za čas komunikacije z DF player modulom, začasno onemogočajo izvrševanje vseh prekinitvenih rutin. Ukazi DF playerja v tej verziji ne uporabljajo prekinitvene rutine, zato so prosti in na voljo za uporabo vsi timerji mikrokontrolerja. Vendar pa je potrebno računati s tem, da bodo pri pošiljanju podatkov v DF player kratkotrajno vse prekinitvene rutine onemogočene! Za izbor reprodukcije enega mp3 zapisa se DF playerju pošlje 10 bajtov, kar traja okoli 10 ms; to utegne v nekaterih primerih biti problem, npr. če se s prekinitveno rutino meri čas. Če se s prekinitveno rutino nadzirajo senzorji, 10 ms zakasnitev v večini primerov ne bo predstavljala problem.
Ta vsebina je samo za naročnike
Za komunikacijo z DF player modulom se uporablja softverski UART in “dfplayer1_1.inc” knjižnica, ki jo je treba z ukazom $include vključiti v krmilni program mikrokontrolerja.
DF player Ver 1.2
Tudi v tej verziji se za čas trajanja reprodukcije zaustavlja izvrševanje Do-Loop zanke. Ker pa se uporablja hardverski UART, ukazi, s katerimi krmilimo DF player modul, dovoljujejo izvrševanje prekinitvenih rutin tudi za čas komunikacije z DF playerjem. Vsi timerji so prosti za uporabo. Ker so prekinitve trajno omogočene, se lahko uporabljajo tudi za natančne postopke, kot je recimo merjenje časa. Uporabljamo knjižnico “dfplayer1_2.inc” ki jo je treba z ukazom $include vključiti v krmilni program mikrokontrolerja.
Ker se v verzijah 1.1 in 1.2 za čas reprodukcije zaustavlja izvrševanje Do-Loop zanke, je predviden podprogram Urgent, v katerega je potrebno postaviti ukaze, ki se bodo izvrševali tudi za čas trajanja reprodukcije. Npr., tukaj lahko postavimo ukaz za zaustavljanje reprodukcije DF playerja, ukaze za spremljanje važnih senzorjev itd. Izvršitev podprograma Urgent mora biti čim krajša (manj kot 100 µs pri 16 MHz taktu mikrokontrolerja ali manj od 200 µs pri 8 MHz). Daljše izvajanje podprograma Urgent bi motila pravilno reprodukcijo v ukazih Say Lab_message, Say_number x,Say_temperaturex, Say_day, Say_time in Say_date. Izjema je ukaz Dfplayer Stop, 0, ki prekinja reprodukcijo mp3 zapisa. Če se reproducira niz sestavljen iz več mp3 zapisov ali pa se izgovarja neka številka, temperatura, čas ali datum (to je tudi niz mp3 zapisov), ta ukaz v verzijah 1.1 in 1.2 ne bo zaustavil reprodukcije celega niza mp3 zapisov, pač pa samo trenutno reproduciran mp3 zapis iz tega niza in bo nastala motnja v reprodukciji (zmanjkal bo npr. izgovor nekaterih številk v izgovorjavi celotnega števila, pavza med reprodukcijo posameznih mp3 zapisov iz niza bo toliko večja, kolikor dalj podprogram Urgent traja).
Verzije 1.1 i 1.2 podpirajo sledeće DF Player ukaze, ki se lahko izvršujejo izven ali znotraj Do-Loop zanke:
Dfplayer Command , Parameter
Say Lab_message
Say_number x
Say_temperature x
Say_day
Say_time
Say_date
Opis uporabe ukazov DF playerja v verzijah 1.1 in 1.2
Splošna oblika ukazov za DF player izgleda tako:
Dfplayer Command , Parameter
Ukaz vsebuje argumenta: Command, s katerim se definira ukaz, in Parameter,s katerim se DF playerju pošlje podatek vezan s poslanim ukazom. Zaradi preprečevanja napake prevajalnika je ta drugi argument obvezen tudi v ukazih, ki ga ne uporabljajo; v tem primeru lahko za Parameter vpišemo katero koli številko v razponu od 0 do 65535 (Parameter je 16 bitno število ali Word spremenljivka). V primerih takšnih ukazov v tem članku bo njegova vrednost 0.
Popis ukazov:
Ukaz Volume
Dfplayer Volume , x
Waitms 200
Vrednost argumenta x določa glasnost v razponu od 0 (brez zvoka) do 31 (maksimalna glasnost). Začetna glasnost je nastavljena v knjižnicah DF player modula na vrednost 28. Za temi ukazi priporočam pavzo okoli 200 ms, da bi se ukaz zanesljivo izvršil.
Ukazi Volup in Voldown
S tema ukazoma se lahko inkrementira ali dekrementira nastavljen nivo glasnosti po en korak. Ukazi ne uporablja vpisanega parametra, ki je vedno 0, pavza dolžine 200ms se priporoča za zanesljivo izvršitev:
Dfplayer Volup , 0 ‘inkrementiraj glasnost
Waitms 200
Dfplayer Voldown , 0 ‘dekrementiraj glasnost
Waitms 200
Ukazi Standby i Wakeup
S tema ukazoma se DF player postavi v stanje pripravljenosti (male porabe) in vrača v delovno stanje. Ukaza ne uporabljata vpisanega parametra, ki je vedno 0, priporočena pavza je 200 ms za zanesljivo izvajanje:
Dfplayer Standby , 0 ‘postavljanje DF playerja v standby
Waitms 200
Dfplayer Wakeup , 0 ‘vračanje DF playerja v režim dela
Waitms 200
Opomba: v verziji 1.1 teh dveh ukazov ne uporabljajte, ker ne delujeta!
Ukaz Resetmodule
S tem ukazom se resetira DF Player. Ukaz ne uporablja vpisanega parametra, ki je vedno 0, in potrebuje približno 2 sekundi za izvršitev:
Dfplayer Resetmodule , 0
Wait 2
Ukaz Stop_play
S tem ukazom se prisilno prekinja trenutna reprodukcija. Ukaz ne uporablja vpisanega parametra, ki je vedno 0, priporočena pavza je 200 ms za zanesljivo izvršitev:
Dfplayer Stop_play , 0
Waitms 200
Ukaz Amplifier_off
Ta ukaz izklopi ojačevalnik DF modula. Ukaz ne uporablja vpisanega parametra, ki je vedno 0, priporočena pavza je 200 ms za zanesljivo izvršitev:
Dfplayer Amplifier_off , 0
Waitms 200
Ponoven vklop internega ojačevalnika bo možen z ukazom za resetiranje DF player modula.
Ukaz Equalizer , x
S tem ukazom izberemo eno od razpoložljivih opcij ekvalizerja:
0 – Normal, 1 – Pop 2 – Rock, 3 – Jazz, 4 – Classic, 5 – Base
V knjižnicah za podporo DF player modula je izbrana začetna opcija 0 – Normal. Priporočena pavza je 200 ms za zanesljivo izvršitev:
Dfplayer Equlizer , 0
Waitms 200
Ukaz Mp3 , x
To je ukaz s katerim se DF playerju pošlje podatek o reprodukciji mp3 zapisa, katerega številčno ime (redna številka) je naveden v argumentu Parameter. Navaja se samo začetna številka iz imena datoteke, brez vodeče ničle, ali je x pač Word spremenljivka, v kateri je številčna vrednost redne številke mp3 zapisa, ki ga je treba reproducirati:
Dfplayer Mp3 , 255
V tem primeru se bo reproduciral zapis 0255_0.mp3 iz MP3 direktorija na SD kartici. Konkretno, to je izgovorjava besede “zero”za angleški govor, “nula”za hrvaški govor, ali “nič” za slovenščino.Zapis 252 je beseda “plus”, zapis 253 je beseda “minus” itd. (poglejte MP3 direktorije, ali dokumente “MP3 direktorij popis …” v direktoriju Dodatna dokumentacija-Prilog.
Ukaz Say Lab_message
Ta ukaz se uporablja za izgovor sporočil ali reprodukcijo glasbenih mp3 zapisov. Argument ukaza je labela, v tem primeru je to splošna labela Lab_message. Labele se navajajo v datoteki MP3.bas ki se z ukazom $include vključuje v glavni program za ukazom End. To je datoteka uporabljenih mp3 zapisov. S pomočjo ukaza Say se lahko reproducira an ali več mp3 zapisov povezanih v niz.
Primer uporabe: izgovarja številke od 1 do 10, nato sledi 2s pavza in se ciklično ponavlja v Do-Loop zanki.
Do
Say Broji_1do10
Say Pause_2s
Loop
End
$include MP3.bas
Opomba: za 2s pavzo priporočam, da uporabite Say Pause_2s, in ne Bascom ukaza Wait ali Waitms, ker se na ta način za čas pavze omogoča izvrševanje podprogramov Urgent.
Primer MP3.bas datoteke si poglejte v datoteki na spletu.
Vidimo da se z ukazom Say in z uporabo neke labele kot njenega argumenta lahko kombinira posamezne mp3 zapise in iz njih zlagati nova sporočila. Za številko, ki označuje številčni naziv mp3 zapisa se postavi znak %, da bi prevajalnik vedel, da je to 16 bitna številka, številke se ločijo z vejico, na konec sporočila se postavi znak 0 (lahko z ali brez dodatnega znaka %). Ukaz Say se lahko uporabi tudi za pavzo. Takrat se DF playerju pošlje mp3 zapis reprodukcije tišine v izbranem trajanju. Za čas te reprodukcije tišine se izvršuje podprogram Urgent. Zanimivo je, da za reprodukcijo istega mp3 zapisa ukaz Say v programu porabi manj bajtov glede na ukaz Dfplayer Mp3 , x (x je številka mp3 zapisa) tudi za reprodukcijo samo enega mp3 zapisa priporočam da se uporabi ukaz Say Lab_message.
Ukaz Say_number x
S tem ukazom se izgovori številka, ki je znotraj Single spremenljivke x. Obseg izgovorjave številke je od -9999,9 do 9999,9. Če je številka izven tega obsega, se bo izgovorila samo 4 številčna celoštevilčna vrednost in prva decimalka, če ta prva decimalka ni nič. Če Single spremenljivka, katere argument tega ukaza vsebuje decimalno število z več decimalkami, se bo številka zaokrožila na eno decimalko. Če je prva decimalka 0, se bo izgovoril samo celoštevilčni iznos. Ukaz Say_number v verzijah 1.1 in 1.2 se lahko uporabi zunaj ali znotraj Do-Loop zanke. Ukaz je prilagojen izgovorjavi številk v angleščini, hrvaščini in slovenščini . Za govorjenje v slovenščini v glavnem programu nastavite spremenljivko Language na količino 2 za pravilno izgovorjavo v slovenščini (0 je za angleščino in 1 za hrvaščino). U root direktorij na SD kartici vstavite MP3 direktorij iz priloženega direktorija Slovenian Eva, ali ustvarite svoj MP3 direktorij s pomočjo Text to Speech aplikacije, ali s snemanjem govora v slovenskem jeziku s programom Audacity. V direktoriju Dodatna dokumentacija-Prilog nahajajo dokumenti “Opis načina izgovora broja” in “Cifre broja”,ki vam bo dodatno pojasnil način dela ukaza Say_number x . V dokumentih “MP3 direktorij popis …” je seznam osnovnih mp3 zapisov, ki jih mora vsebovati vaš MP3 direktorij.
Primer uporabe ukaza Say_number :
Key2 Alias PIND.2
Config Key2 = Input
Dim Y As Single
Y = -2547.3
Do
If Key2 = 0 Then
Say_number Y ‘izgovor sadržaja spremenljivke Y
End If
Loop
Single spremenljivka lahko npr. Vsebuje podatek o neki izmerjeni vrednosti in s tem ukazom bo povedana vrednost te izmerjene vrednosti npr. vlage, števila kosov, oddaljenosti, hitrosti vrtenja, izmerjene napetosti itd.
Ukaz Say_temperature x
Ta ukaz se uporablja za izgovorjavo vrednosti temperature, ki se nahaja v Single spremenljivki x. Za izgovorjavo številčne vrednosti temperature ukaz dodaja izgovorjavo merne enote odvisno od številčne vrednosti, izgovarja “stopinj Celzija”za slovenščino, “stopinj Celzija” ali “stupnja Celzija” ali “stupnjeva Celzija” za hrvaščino, oziroma “degree Celsius” ali “degrees Celsius” za angleščino. V glavnem programu za ukazom $include, s katerim se v program vključi ustrezna programska knjižnica za DF player modul, je potrebno vstaviti tudi spremenljivko Language s pravilno vrednostjo za izgovorjavo v angleščini, hrvaščini ali slovenščini.
Če uporabljamo DS3231 RTC modul lahko sobno temperaturo (temperaturo čipa DS3231) merimo s tem modulom z resolucijo 0,25°C, v izgovorjavi temperature se zaokrožuje na eno decimalko oziroma celoštevilčno vrednost, če je ta decimalka enaka nič. Potrebno je predhodno v program vključiti DS3231$SE.sub knjižnico. O načinu njene uporabe je podrobno pisano v Svet elektronike št. 255 in 256, knjižnico pa lahko brezplačno snamete iz www strani revije.
Sobno temperaturo lahko sedaj medimo in izgovarjamo na sledeči način:
Dim Temp_read As Word
Dim Room_temp As Single
Ds3231$read_temp Temp_read
Room_temp = Temp_read / 256
Say Temperature_is ‘govor “Temperatura je” ali “The temperature is”
Say_temperature Room_temp ‘govor temperature
End
$include “MP3.bas”
Kot je že bilo pojasnjeno je izbor pravil izgovorjave za izbrani jezik odvisen od vsebine spremenljivke Language (0 za angleščino, 1 za hrvaščino, 2 za slovenščino).
Ukaz Say_day
Ukaz izgovarja dan v tednu ki je kot številčna vrednost naveden v spremenljivki Day . Izgovorjava v angleščini, hrvaščini ali slovenščini je odvisna od jezika izgovorjave v MP3 direktoriju. Spremenljivka Day je dimenzionirana kot Byte znotraj knjižnice za podporo DF playerja. Številka 1 je ponedeljek, številka 7 je nedelja. Če se uporablja DS3231 RTC je potrebno spremenljivko Day napolniti z vsebino spremenljivke Ds3231$day iz programske podpore za DS3231 RTC in v program z ukazom $include vključiti knjižnico DS3231$SE.sub.
Day = Ds3231$day
Say_day ‘izgovor dana v tednu
Ukaz Say_time
Ukaz izgovarja ure iz spremenljivke Hour in minute iz spremenljivke Minute. Te spremenljivke so dimenzionirane kot Byte znotraj knjižnice programske podpore DF playerja. Uporabljen format ure je 24-urni, odvisno od vsebine spremenljivke Language se izgovarja v istem formatu, če je izbrana hrvaščina/slovenščina ali v 12-urnem AM/PM formatu če je izbrana angleščina. Pri tem je potrebno na SD kartico kopirati MP3 direktorij z mp3 zapisi za izbran jezik. Če se uporablja DS3231 RTC, je v program potrebno z ukazom $include vključiti knjižnico DS3231$SE.sub. Ukaz Ds3231$read vpisuje trenuten čas RTC-ja v ustrezne spremenljivke definirane v navedeni knjižnici. Podatki so v BCD formatu, in jih je pred vpisom v ur v spremenljivko Hour in minut v spremenljivko Minute z ukazom Makedec pretvoriti v desetiški format.
Ds3231$read
Hour = Makedec(ds3231$hour)
Minute = Makedec(ds3231$min)
Say_time ‘govor casa
Ukaz Say_date
Ukaz izgovarja datum iz spremenljivke Dte, mesec iz spremenljivke Month in leto iz spremenljivke Year. Te spremenljivke so dimenzionirane kot Byte znotraj knjižnice programske podpore DF playerja. Odvisno od vsebine spremenljivke Language za izgovorjavo datuma se uporabljajo pravila izgovorjave za hrvaščino/slovenščino ali za angleščino. Pri tem je treba na SD kartici imeti MP3 direktorij z mp3 zapisi za izbrani jezik. Če se uporablja DS3231 RTC, ja za izgovorjavo datuma iz RTC-ja potrebno v programu z ukazom $include vključiti knjižnico DS3231$SE.sub. Z ukazom Ds3231$read iz RTC-ja se trenutni podatki o uri, datumu v mesecu, dnevu v tednu, mesecu in letu v BCD formatu vpisujejo v ustrezne spremenljivke definirane znotraj knjižnice za podporo RTC-ja. Z ukazom Makedec je potrebno te podatke pretvoriti v desetiške vrednosti in jih prenesti v spremenljivke, katere uporablja ukaz Say_date.
Ds3231$read
Dte = Makedec(ds3231$dte)
Month = Makedec(ds3231$mth)
Year = Makedec(ds3231$yr)
Say_date ‘govor datuma, meseca in leta
DF Player Ver 2
DF Player v verziji 2 v času reprodukcije ne zaustavlja izvrševanja Do-Loop zanke, komunikacija z DF playerjem se izvršuje v delu Timer0 prekinitvene rutine (prekinitve morajo biti omogočene !). Ne uporabljajte podprograma Urgent, ker se Do-Loop zanka ne zaustavlja. Za čas komunikacije z DF playerjem je dovoljeno izvrševanje ostalih prekinitvenih rutin, vendar je treba vedeti, da za čas izvrševanja ene prekinitvene rutine, v našem primeru za Timer0, izvrševanje neke druge prekinitvene rutine avtomatično čaka, dokler se prva prekinitvena rutina ne konča. Verzija 2 uporablja hardverski UART in knjižnico “dfplayer2.inc”, zato je TX na izhodu PD1. To knjižnico je potrebno z ukazom $include uključiti v krmilni program mikrokontrolerja. Timer1 in Timer2 sta prosta za uporabo.
Da se za čas reprodukcije ne bi zaustavljalo izvrševanje Do-Loop zanke, ukazi v tej verziji uporabljajo t.i. Df buffer. To je niz v delovnem spominu velikosti npr. 80 besed (160 bajtov). Velikost Df buffera je definirana na naslednji način:
Dfbuffer_len Alias 80
Ukazi DF playerja med enim prehodom preko Do-Loop zanke polnijo Df buffer. Med polnjenjem znaša vrednost bit spremenljivke Df_flag0, Timer0 prekinitvena rutina ne pošilja vpisanih podatkov iz Df buffera proti DF playerju (torej nima nove reprodukcije). Z naslednjim prehodom Do-Loop zanke ukaz Dfbuffer_enable (ki mora biti vpisan na začetku Do-Loop zanke) postavlja Df_flag v stanje 1 in s tem onemogoča, da se v naslednjih prehodih Do-Loop zanke Df buffer polni, istočasno pa omogoča Timer0 prekinitveni rutini pošiljanje podatka iz Df buffera proti DF playerju v istem zaporedju kot so ti podatk bili v njega vpisani. Timer0 prekinitvena rutina vsakih 150 ms preverja stanje Busy vhoda: za Busy = 1 pošlje naslednji ukaz Df buffera in njegove parametre proti DF_playerju, za Busy = 0 pomeni, da ne pošilja, ker je to znak, da še traja reprodukcija. Ko se Df buffer izprazni, se resetira Df_flag in s tem omogoči novo polnjenje Df bufferja.
Da bi bila omogočena “gladka” reprodukcija, se mora Do-Loop zanka izvajati stalno in brez večjih odmorov.
V kolikor bi ukazi znotraj Do-Loop zanke prenapolnile Df buffer, se bo izpisala napaka “Buffer overload!” na LCD zaslonu (LCD je v tej verziji obvezen), utripa LED-ica na izhodu Error in prekinja se izvajanje programa. Takrat je potrebno povečati Df buffer s spremembo vrednosti Dfbuffer_len. Pin porta za Error se definira v glavnem programu.
Za čas praznjenja Df bufferja (reprodukcije) obstaja mala možnost, da v nekaterih izvedbah programa nastane motnja dela LCD-ja ali pa se pojavi preskakovanje delov reprodukcije. Če se to zgodi priporočam, da se pred LCD ukazi preveri stanje Df_flag spremenljivke in če je Df_flag = 0 (takrat ni reprodukcije) se lahko izvršijo LCD ukazi. V primeru da je Df_flag = 1 (poteka reprodukcija), je z izvrševanje LCD ukazov potrebno počakati.
Primer:
If Df_flag = 0 Then
Locate 2 , 2
Lcd ” xxxxxx “
End If
Opis uporabe ukazov DF playerja v verziji 2
V začetnem delu programa (pred Do-Loop zanko) je dovoljeno uporabiti vse predhodno opisane ukaze tipa Dfplayer Command, Parameter. Tako se lahko spremeni npr. glasnost in podobno (začetna vrednost glasnosti je 28 in ekvaljzer na Normal).
DF player ukazi za verzijo 2, ki se lahko izvršujejo samo znotraj Do-Loop zanke so:
- Dfbuffer_enable
- Dfbuffer x
- Dfstop
- Say Lab_message
- Say_number x
- Say_temperature x
- Say_day
- Say_time
- Say_date
Ukaz Dfbuffer_enable
Ta ukaz omogoča normalno delo (polnjenje in praznjenje) Df bufferja.
Ukaz se postavi samo enkrat na začetek zanke Do-Loop. Glej Opombo 1.
Ukaz Dfbuffer x
To je ekvivalent ukaza Dfplayer Mp3 , x iz DF player verzije 1.1 in 1.2 . Ukaz polni Df buffer s podatkom x v prehodu preko Do-Loop zanke kadar je Df_flag = 0 (x je številčno ime mp3 zapisa iz direktorija MP3 na SD kartici ali Word spremenljivka, ki vsebuje redno številko mp3 zapisa za reprodukcijo). Glej Opombo 1.
Primer:
Dfbuffer 255
Ta primer opisuje v Df buffer zahtevo za reprodukcijo mp3 zapisa 0255_0.mp3. Ko so prave okoliščine za praznjenje Df bufferja, se bo izgovorila beseda “nula” v hrvaščini ali “zero” v angleščini ali “nič” v slovenščini.
Ukaz Dfstop
Ukaz briše vsebino Df bufferja in prekinja reprodukcijo trenutnega mp3 zapisa kot tudi niz, ki je sestavljen iz več mp3 zapisov. Glej Opombo 1.
Ukaz Say Lab_message
To je ekvivalent istoimenskemu ukazu iz verzij 1.1 in 1.2 za izgovorjavo ene ali več mp3 zapisov, ki se nahajajo pod splošno labelo Lab_message v MP3.bas datoteki. Glej Opombo 1.
Ukaz Say_number x
To je ekvivalent istoimenskemu ukazu iz verzij 1.1 in 1.2 za izgovorjavo številske vrednosti Single spremenljivke x. Glej Opombo 2. Glej Opombo 1.
Ukaz Say_temperature x
To je ekvivalent istoimenskemu ukazu iz verzij 1.1 in 1.2 za izgovor vrednosti temperature iz Single spremenljivke x. Glej Opombo 2. Glej Opombo 1.
Ukaz Say_day
To je ekvivalent istoimenskemu ukazu iz verzij 1.1 in 1.2 za izgovorjavo dneva v tednu iz spremenljivke Day. Glej Opombo 1.
Ukaz Say_time
To je ekvivalent istoimenskemu ukazu iz verzij 1.1 in 1.2 za izgovorjavo časa iz spremenljivki Hour in Minute. Glej Opombo 1.
Ukaz Say_date
To je ekvivalent istoimenskemu ukazu iz verzij 1.1 in 1.2 za izgovorjavo datuma iz spremenljivke Dte, mjeseca iz spremenljivke Month in leta iz spremenljivke Year. Glej Opombo 1.
Knjižnica dfplayer2.inc, ima poleg ukazov za DF player tudi še dodatne ugodnosti. Prva je vezana na DWord spremenljivko Millis, ki se inkrementira vsako milisekundo. Štetje prične od začetka programa, prekoračitev nastane po približno 50 dnevih, ko ponovno začne šteti od ničle. Uporablja se za izvrševanje sklopa ukazov ali podprograma po izteka dane časovne vrednosti v milisekundah.Glej Opombo 1.
Primer:
Led Alias PORTB.2
Config Led = Output
Dim Interval1 As Word
Dim Previous1 As Dword
Dim Difference1 As Dword
Interval1 = 3000 ‘3000ms = 3s
Do
Difference1 = Millis – Previous1
If Difference1 >= Interval1 Then
Gosub Subrutine_1
End If
Loop
Subrutine_1:
Toggle Led ‘spremenite stanje Led izhoda
Previous1 = Millis
Return
V tem primeru se podprogram Subrutine_1 izvršuje približno vsake 3 s (točnost danega časa je odvisna od trajanja enega prehoda skozi Do-Loop zanko).
Ukaz Wait_ms
Ta ukaz zaustavlja izvrševanje programa za dano število milisekund. Ukaz uporablja Timer0 prekinitveno rutino in je točnejši od Bascom-AVR Wait in Waitms ukazov, katerih časovno trajanje podaljšuje prekinitvene rutine. Ukaz uporabljamo tako, da v spremenljivko Time_ms vpišemo želen čas čakanja in nato izvršimo Wait_ms:
Time_ms = 500
Wait_ms ‘pocakaj 500 ms
Time_ms je Word spremenljivka je dimenzionirana znotraj knjižnic za DF player v verziji 2.
V verziji 2 so definirane 4 povezave, ki se periodično izvajajo. To so:
Every_ms:
‘izvršuje se vsako ms
Return
Every_10ms:
‘izvršuje se vsakih 10 ms
Return
Every_100ms:
‘izvršuje se vsakih 100ms
Return
Every_1s:
‘izvršuje se vsako sekunde
Return
V te povezave lahko vpišemo svoje kratke rutine, katere želimo, da se izvajajo v danih intervalih. Izvajanje rutin ne bi smelo trajati dalj od 100 µs pri 16 MHz, oziroma 200 µs pri 8 MHz (druge frekvence delovnega takta mikrokontrolerja v verziji 2 niso dovoljene). V kolikor je potrebno, da se ukazi tipa Dfplayer Command , Parameter uporabljajo tudi znotraj Do-Loop zanke v verziji 2 (npr. ukaz za spremembo glasnosti), je to možno ob pogoju, da se najprej preveri stanje spremenljivke Df_flag. Te se ukazi lahko izvršijo samo, če je Df_flag = 0, torej če trenutno ni reprodukcije. Razlog za to omejitev je v tem, ker tih ukazi ne uporabljajo Df buffer-a, ampak direktno pošljejo podatke v DF player in tako lahko zmotijo trenutno reprodukcijo. Če moramo izgovoriti neko nujno obvestilo, ne da bi čakali. da se zaključi izvršitev vseh mp3 podatkov v Df bufferu, je najbolje da uporabimo ukaz Dfstop. Ta ukaz briše Df buffer in prekinja trenutno reprodukcijo, ter se nato z ukazom Dfplayer Mp3 , x brez testiranja stanja spremenljivke Df_flag v DF player pošlje zahtevo za izgovorom važnega obvestila. Za vsako verzijo programske podpore je priloženih po nekaj Demo programskih primerov. Te Demo primeri so namenjeni boljšemu razumevanju načina uporabe ukazov DF playerja. Za verzije 1.1 in 1.2, v katerih se za čas reprodukcije zaustavlja izvrševanje Do-Loop zanke, priloženih je po 5 Demo primerov za vsako verzijo. Za verzijo 2, v kateri se ne zaustavlja izvrševanje Do-Loop zanke za čas reprodukcije, priloženih je 6 Demo primerov. Znotraj vsakega Demo primera se nahajajo podrobna navodila za uporabo. Čeprav so Demo primeri v vseh verzijah medsebojno podobni, lahko vsak dela samo znotraj verzije, za katero je namenjen. Na začetku so vsi Demo primeri nastavljeni tako, da govorjo slovensko (Language = 2) in SD kartica mora imeti MP3 direktorij za slovenščino.
Vsaka verzija ima tudi Demo primer, ki uporablja RTC čip DS3231 za realni čas, datum in temperaturo, ki se poleg izpisa na LCD lahko tudi izgovarjajo. Prav tako ima vsaka verzija tudi Demo primer, ki poleg RTC čipa uporablja tudi I2C komunikacijo z LCD-jem preko modula s čipom PCF8574T ali PCF8574AT, namesto 4 bitne paralelne komunikacije z LCD-jem.
Za boljšo primerjavo verzij programske podpore poglejte dokument “Usporedba verzija programske podpore DF Player mini modula” v direktoriju Dodatna dokumentacija-Prilog.
Upam, da vam bo priložena programska podpora DF playerja omogočila izdelavo zanimivih projektov v robotiki, izdelavo krmilnih naprav z govorom sporočil, ur z govorom časa, datuma in glasbenimi alarmi, merilne instrumente, ki poleg izpisa na LCD izgovarjajo izmerjene veličine in vrste drugih zanimivih projektov. Kot avtor želim vam mnogo uspeha in zadovoljstva pri uporabi DF playerja v vaših projektih.
Opomba 1: Uporablja se samo znotraj Do-Loop zanke in ne zavira njenega izvrševanja.
Opomba 2: Edina razlika je, da se podatki ne pošiljajo direktno proti DF playerju, pač pa preko Df bufferja.
Mladen_Cempus_DF Player2