K. K. Bossa Sang og Animation på en Arduino: 5 trin

K. K. Bossa Sang og Animation på en Arduino: 5 trin

Indholdsfortegnelse:

Anonim

Bare følg diagrammerne og håber jeg har ikke lavet fejl. Dette var min første gang ved at bruge Fritzing og halvvejs igennem. Jeg indså, at jeg havde roteret brødbrættet på hovedet, så jeg var nødt til at starte alt overalt.

Bemærk: Der skal være 1.000 ohm modstande i overensstemmelse med pin 10 og 11, da Tone Library Documentation kræver det.

På mit billede tilføjede jeg en yderligere 1000 ohm modstand i overensstemmelse med pin 11. Jeg gjorde dette for at gøre basafspilningen med lavere lydstyrke.

Trin 4: Upload kode

Jeg har medtaget min skitse, mine sprites, som jeg brugte, og også arkivet til at give kreditten til komponisten. Selvom jeg ændrede sangen en lille smule på måske tre steder, fordi det lød dårligt på piezoen.

Hovedskissen er titlen: KK_Bossa_Song_PROGMEM_Animation

Trin 5: Hvordan det virker

PROGMEM

For det første mener jeg, at jeg skal adressere, hvad PROGMEM er til begyndere. PROGMEM kan bruges til at gemme variabler i programhukommelsen i modsætning til den dynamiske hukommelse eller SRAM. Hvis en skitse har for mange globale variabler, kan man overskride mængden af ​​SRAM. Når det sker, vil skissen ikke virke og vil gå ned. Så man kan flytte alle variabler til programhukommelsen for at frigøre plads inden for SRAM. Der skal dog kaldes særlige funktioner for at hente variablerne fra programhukommelsespladsen. Det er en vanskelig forretning og kan være meget frustrerende til tider, men det er den bedste ting at gøre, når man arbejder med meget lange arrayer for at spare (SRAM) plads. Se her for flere detaljer og eksempler.

Hvordan sangen virker:

For at kunne spille flere toner deler jeg hvert slag i fire mindre beats - som jeg kaldte mini beats. Så hver mini beat svarer til en 16. note. Disse mini beats fungere som tælleren for når en note skal afspilles, og når den skal slutte - simpel som sådan. I virkeligheden skal mini beat bare være den mindste tone i hele stykket. Jeg valgte en 16. note fordi meget få stykker har 32. noter. Ja, nogle orkesterstykker har 32 noter, men vil du virkelig spille det på en arduino? Under alle omstændigheder ville det være meget nemt at ændre det til 32. notat mini beats, hvis du ønsker det.

Hvordan animationen virker:

I stedet for at skrive alle mine brugerdefinerede char-arrayer i binær, oktal eller hex, er alt skrevet i decimal. Du kan faktisk oprette brugerdefineret char med decimalværdier mellem 0-31.

Nu ser computeren stadig heltalet som binær værdi i bagenden, så ved hjælp af bitoperationer kan du skifte denne værdi for blot at få fat i en længde fem substring fra den til brug for den tilpassede karbonoprettelse. (Bemærk: hver rude på 16x2 LCD-skærmen er fem pixels bred).

For eksempel: Se på mit Excel-regneark, siger jeg vil have de første fem pixels på kk skyderen på række 0 fra kolonner 12-8. Den decimale værdi af hele rækken er 896 - hvilket er 0001110000000 i binær. Så hvis jeg skifter 896 otte gange til venstre, får jeg 3 - hvilket er 00011 i binært.

Gør ovenstående på otte samlede rækker for at få nok data til at oprette en brugerdefineret char. Det er kernen i det.

Så hvorfor bruge decimaltal? Du behøver faktisk ikke, det er rent for æstetik. At skrive en flok 0 og 1 kan køre dig sindssyg og der er meget mere plads til fejl.Desuden kan jeg ikke lide at have en brugerdefineret char optage så mange rækker, så derfor smutter jeg bare et billede i en enkelt række. Hvis du bruger binære værdier, ville hver række være super lang at rulle gennem. Så det er det, du foretrækker. Til min overraskelse fungerer min skitse faktisk på en måde (jeg testede det).