Fredag den 13: e musikaliska stugan (3 / 4 steg)
Steg 3: Source Code
En fullständig lista över källkoden kan erhållas från min Pastebin.com profil, här. Jag kommer att omfatta några centrala begrepp i kodexen för de nya till Arduino utveckling.
Tonar bibliotek
Tonar biblioteket kan erhållas på Google-koden från här. Detta bibliotek är otroligt enkel att använda. När vi har zip-filen extraheras till katalogen bibliotek i vårt Arduino IDE installation rotkatalog, kan vi börja spela toner. Detta bibliotek är egentligen perfekt för detta projekt eftersom det producerar, liksom många elektroniska apparater, square ljudvågor som är vad producerades även i den ursprungliga NES hårdvaran. Låt oss ta en titt på ett snabbt exempel. Eftersom vi har stift 12 och 13 går direkt till högtalaren, måste vi initiera dem med två tonar objekt som,
Tone tone1; < br > tona tone2;
Nästa, vi i våra setup() loop initiera dem för ljudutgång med följande två rader av kod,
tone1.BEGIN(13); < br > tone2.begin(12);
Nu, kan vi helt enkelt kallar metoden play() på varje ton objekt som,
tone1.Play(440,900);
som i ovanstående fall, skulle spela en 440 (den musikaliska Obs: A4) för 900 millisekunder (ms). Att spela två toner samtidigt är lätt. Som skrivs av denna handledning, metoden play() ta ett heltal som en frekvensvärde, så frekvenser med bråk i dem, såsom B4 som är faktiskt 493.883 måste hz, avrundas uppåt eller nedåt. Play () -metoden gafflarna, och arbetsflödet fortsätter till nästa rad i koden. Till exempel koden,
tone1.Play(440,900);
tone2.Play(122,900); delay(900) < br > < br > tone1.play(622,900); < br > tone2.play(784,900); < br > delay(900);
kommer att spela tonerna 440hz och 122hz samtidigt för 900ms och samtidigt göra så Arduino pausar använda funktionen delay() för 900ms. Omedelbart efter, tonar 622hz och 784hz spelas samtidigt för 900ms och Arduino pauser, igen, för 900ms medan du spelar toner.
Delay() är viktigt att komma ihåg som Play () -metoden gafflarna. Ett bra exempel är under en for() slinga. Om vi vill spela en ton flera gånger i rad och inte pausa Arduino med delay(), låter det som om det spelar tonen vi ange endast en gång!
Kom också ihåg att det finns många referenser som lätt kan hittas online med en sökmotor för att hitta ungefärliga frekvenser av noter som spelas på ett piano som kan refereras samtidigt som projekt som spelar låtar. För vår låt behöver vi inte oroa sig om att räkna ut dem eftersom jag har redan gjort det för oss och sätta dem i C++-kod. För att visa ett litet exempel dock, använder vi följande frekvenser för avsnittet vers.
int del 1 [] = {740,494,587}. 740hz (F #5), 494hz (B4), 587hz (D5)
int del 2 [] = {659,466,554}. 659hz (E5), 466hz (A #4), 554hz (C# 5)
Basfrekvenser (det finns bara två) är 122hz (~ B2) och 116hz (A #2). Bass varar 3 anteckningar, så om du vill spela dem samtidigt, vi använder funktionen anpassade definierade playSection() i C++ kod.
Trycker på knappkod
Tryckknapp koden använder en enkel digitalRead() funktion för att kontrollera spänning kommer igenom på PIN-koden anges. I vårt fall är det stift 2. Det kräver inte en speciell tredje part bibliotek att använda.
I vår setup() funktion måste vi initiera PIN-koden för input och använda den följande lina av koden för att göra det,
pinMode (2, ingång);
Nu i vår loop() händelsehantering looping funktion, kan vi helt enkelt ta en läsning av spänningen med funktionen digitalRead() , som,
digitalRead(2);
Om det returnerade värdet är lika med konstanten för hög spänning (1), då börja vi uppspelning av musik. Annars bör den återvända så lågt (0).