K.K. Bossa sång och Animation på en Arduino (5 / 5 steg)
Steg 5: Hur det fungerar
PROGMEM
Först, jag tror jag behöver ta itu med vad PROGMEM är för nybörjare. PROGMEM är sättet att lagra variabler i programminnet i motsats till den dynamiska minne eller SRAM. Om en skiss har alltför många globala variabler, kan en överträffa mängden SRAM. När det händer, skissen fungerar inte och kommer att krascha. Så man kan flytta alla variabler till programminnet att frigöra utrymme inom SRAM. Dock behöver speciella funktioner anropas för att hämta variablerna från programmet minnesutrymme. Det är jobbig fråga och kan vara mycket frustrerande ibland, men det är det bästa man kan göra när du arbetar med mycket lång matriser för att spara (SRAM) utrymme. Se här för mer information och exempel.
Hur fungerar låten:
För att spela flera toner, dela jag varje taktslag i fyra mindre beats - som jag kallade mini beats. Så är varje mini beat likvärdig med en 16 Observera. Dessa mini beats fungera som räknaren för när en ton ska spelas och när det ska sluta - enkelt. I verkligheten behöver mini beat bara vara den minsta Obs inom hela. Jag valde en 16 notera eftersom mycket få bitar har 32: a anteckningar. Ja, några orkester bitar har 32: a anteckningar, men vill du verkligen spela som på en arduino? I alla fall, vore det mycket lätt att ändra det till 32: a Obs mini slår om så önskas.
Hur fungerar animeringen:
Istället för att skriva alla mina anpassade char matriser i binära, oktala eller hex, allt är skrivet i decimal. I själva verket kan du skapa anpassade röding med decimala värden mellan 0-31.
Nu ser datorn fortfarande heltalet som binära värdet i bakändan, så med hjälp av lite verksamhet kan du skifta det värdet att bara ta en längd fem delsträng från det att använda för att skapa anpassade char. (Obs: varje fönster på 16 x 2 LCD är fem pixlar bred).
Till exempel: titta på min excel-ark, säger att jag vill ha den första fem pixlar på kk reglaget på raden 0 från kolumner 12-8. Decimalvärdet för hela raden är 896 - som är 0001110000000 i binär. Så om jag skifta 896 åtta gånger till vänster, kommer jag få 3 - vilket är 00011 i binär.
Göra ovanstående på åtta summarader att få tillräckligt med data för att skapa en anpassad char. Det är kontentan av det.
Så varför använda decimalvärden? Du behöver faktiskt inte, det är enbart för estetik. Att skriva en massa 0's och 1 kunde köra du sinnessjuk och det finns mycket mer utrymme för misstag. Dessutom gillar jag inte att ha en anpassad char ta upp så många rader, så det är därför jag bara klämma in en bild i en enda rad. Om du använder binära värden skulle varje rad vara super lång tid att bläddra igenom. Så är det vad du föredrar. Till min förvåning fungerar min skiss faktiskt Hursomhelst (jag testade det).