Stap 3: Broncode
De volledige lijst van de broncode kan worden verkregen uit mijn Pastebin.com profiel, hier. Ik zal een aantal centrale concepten van de code voor die nieuwe Arduino ontwikkeling behandelen.
Tone Library
De bibliotheek van de Toon kan worden verkregen op Google-Code vanaf hier. Deze bibliotheek is ongelooflijk eenvoudig te gebruiken. Zodra we het zip-bestand uitgepakt naar de map van de bibliotheken in de hoofdmap van de Arduino IDE-installatie hebben, kunnen we beginnen met het spelen van tonen. Deze bibliotheek is eigenlijk ideaal voor dit project omdat het produceert, zoals veel elektronische apparaten, vierkant geluidsgolven die is wat ook werd geproduceerd in de originele NES-hardware. Neem een blik bij een snel voorbeeld. Aangezien we pins 12 en 13 gaan rechtstreeks op de luidspreker hebben, moeten we om te initialiseren met behulp van twee Toon objecten als,
Tone tone1;<br>Tone tone2;
vervolgens in de loop van onze Setup initialiseren we hen voor geluid met de volgende twee coderegels,
tone1.begin(13);<br>tone2.begin(12);
Nu, kunnen we gewoon noemen de methode play() op elk van de Toon objecten als,
tone1.play(440,900);
die in het bovenstaande geval zou spelen een 440 (de muzikale noot: A4) voor 900 milliseconden (ms). Om twee tonen tegelijkertijd te spelen is eenvoudig. Zoals van het schrijven van deze tutorial, nemen de methode play() integer waarde frequentie zo frequenties met breuken in hen, zoals B4 die eigenlijk 493.883 zal hz, moeten naar boven of naar beneden worden afgerond. De vorken van de methode play() , en de werkstroom blijft de volgende coderegel. Bijvoorbeeld de code,
tone1.play(440,900); tone2.play(122,900);<br>delay(900);<br>tone1.play(622,900);<br>tone2.play(784,900);<br>delay(900);
zal spelen de tonen 440hz en 122hz gelijktijdig voor 900ms en daarbij dus de Arduino onderbroken met de delay() functie voor 900ms. Onmiddellijk na, de tonen 622hz, en 784hz gelijktijdig worden gespeeld voor 900ms en de Arduino pauzes, nogmaals, voor 900ms tijdens het afspelen van de tonen.
De delay() is belangrijk om te onthouden als u de methode play() vorken. Een goed voorbeeld is tijdens een for() -lus. Als wij willen spelen van een Toon meerdere keren in een rij en niet de Arduino met delay() onderbreken, zal het geluid alsof het speelt de Toon wij slechts één keer geven!
Ook niet vergeten dat er veel verwijzingen die kunnen gemakkelijk online worden gevonden met een zoekmachine te vinden bij benadering frequenties van notities op een piano waarnaar kan worden verwezen terwijl het maken van projecten die tracks te horen. Voor ons liedje moet we niet over ongerust maken ze uitzoeken aangezien ik al heb gedaan die voor ons en zet ze in de C++-code. Als u wilt weergeven maar een klein voorbeeld, gebruiken we de volgende frequenties voor de vers-sectie.
int part1[] = {740,494,587}; // 740hz (F#5), 494hz (B4), 587hz (D5)int part2[] = {659,466,554}; // 659hz (E5), 466hz (A#4), 554hz (C#5)
De basfrequenties (er zijn slechts twee) zijn 122hz (~ B2) en 116hz (A #2). De bas duurt 3 noten, om hen tegelijk spelen, gebruiken we de aangepaste gedefinieerde playSection() functie in de C++-code.
Drukknop Code
De drukknop-code wordt een eenvoudige digitalRead() -functie gebruikt om te controleren op spanning komen door op de pin opgegeven. Het is in ons geval pin 2. Het hoeft niet een speciale bibliotheek van derden te gebruiken.
In onze Setup -functie moeten we initialiseren op de pin voor input en gebruik de volgende coderegel om dit te doen,
pinMode(2, INPUT);
Nu in onze loop gebeurtenisafhandeling looping functie, kunnen we gewoon neem een lezing van de spanning met de digitalRead() functie, als,
digitalRead(2);
Als de geretourneerde waarde gelijk is aan de constante voor hoogspanning (1), dan kunnen we beginnen afspelen van de muziek. Anders moet het terug zo laag (0).