Christmas Song spelare (6 / 6 steg)
Steg 6: Dags att köra den!
Video
http://youtu.be/lV9WurONtV0
Som Sammanfattning
Programmet kommer att ha 3 huvuddelar:
-Den första delen består av deklaration av variabler, konstanter och import av andra filer. Det importerar filen "pitches.h", där kan du hitta konstanten av noterar med sina frekvenser. Du kan hämta den från arduino sida: http://arduino.cc/en/Tutorial/Tone3
-Den andra delen är den setup() som i grunden är initiering av programmet. Här kommer vi definiera indata/utdata stift och andra saker. Den setup delen körs endast en gång, i början av programmet.
-Tredje del is loop(). Detta kommer alltid tills du stänger av arduino. Där kan du hitta koden för huvudprogrammet som spelar låten och tänds led med olika färger. Också känna det värdet på potentiometern att ange hastigheten (tempo) som det kommer att spela.
Alla kompletta koden:
/ * Melodi
Spelar en melodi
krets:
8-ohms högtalare på digital stift 8
Basera på exemplet med http://arduino.cc/en/Tutorial/Tone av Tom Igoe
Ändrad av: Irene Meiying Cheung Ruiz
*/
#include "pitches.h"
#define SONG1_SIZE 24
#define SONG2_SIZE 14
anteckningar i melodin 1:
int melody1 [] = {
NOTE_D3, NOTE_B3, NOTE_A3, NOTE_G3, NOTE_D3,
NOTE_D3, NOTE_D3, NOTE_D3, NOTE_B3, NOTE_A3, NOTE_G3, NOTE_E3, 0,
NOTE_E3, NOTE_C4, NOTE_B3, NOTE_A3, NOTE_FS3, 0,
NOTE_D4, NOTE_D4, NOTE_C4, NOTE_A3, NOTE_B3
};
anteckningar i melodin 2:
int melody2 [] = {
NOTE_F4, NOTE_E4, NOTE_D4, NOTE_C3, NOTE_AS3, NOTE_A3, NOTE_G3, NOTE_F3,
NOTE_C4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_E4, NOTE_F4
};
Observera varaktigheter melodi 1:4 = fjärdedelsnot, 8 = åttondelen noterar, etc.:
int noteDurations1 [] = {
4, 4, 4, 4, 2.5,
8, 8, 4, 4, 4, 4, 2.5, 2,
4, 4, 4, 4, 2.5, 2,
4, 4, 4, 4, 1};
Observera varaktigheterna för melodi 2:4 = fjärdedelsnot, 8 = åttondelen noterar, etc.:
int noteDurations2 [] = {
2, 2,5, 8, 1,5, 4, 2, 2, 1.5,
4, 1,8, 4, 1,8, 4, 1};
Pins
int redPin = 11;
int greenPin = 10;
int bluePin = 9;
int knappen = 2;
kontroll variabler
int counter = 0;
int tryckte = 0;
booleska playsong = false;
//Song temp variabler
int songSizeS;
int * noteDurationS = 0;
int * melodyS = 0;
Speed control variabler
int sensorValue = 0;
float tempo = 0;
initiering
void setup() {
setup pins
pinMode (redPin, produktionen);
pinMode (greenPin, produktionen);
pinMode (bluePin, produktionen);
pinMode (knapp, indata);
bakgrund fram till green i början
mapColor(-1);
debug ändamål
Serial.BEGIN (9600); tillval
}
huvudprogrammet
void loop() {
upptäcka när knappen trycktes
if(digitalRead(button) == låg)
{
tryckte = 1;
}
upptäcka när knappen var realesed
if(digitalRead(button) == hög & & pressad == 1)
{
räknaren ++;
tryckte = 0;
playsong = true; variabel för att styra när börja sången
bestämma vilken låt spelar
om (counter % 2 == 0)
{
songSizeS = SONG1_SIZE;
noteDurationS = noteDurations1;
melodyS = melody1;
}
annat
{
songSizeS = SONG2_SIZE;
noteDurationS = noteDurations2;
melodyS = melody2;
}
}
Starta låten om knappen trycktes:
if(playsong)
{
playsong = false;
/ / iterera över tonerna i melodin
för (int thisNote = 0; thisNote < songSizeS; thisNote ++)
{
//sensor värde från potentiometern mappas till 1-3 hastighet värdeintervall
sensorValue = analogRead(A0);
tempo = sensorValue * (3.0 / 1023.0); Serial.println(tempo);
för att beräkna noterar varaktighet, ta en sekund
dividerat med Noteringstyp.
e.g. fjärdedelsnot = 1000 / 4, åttondelen noterar = 1000/8, etc. int noteDuration = 1000/noteDurationS [thisNote];
ton (8, melodyS[thisNote],noteDuration),
tänds den rgb-led beroende av anteckningen
mapColor (melodyS [thisNote]);
Ange en minsta tid mellan dem för att skilja anteckningar.
tonens längd * tempo
int pauseBetweenNotes = noteDuration * tempo;
Delay(pauseBetweenNotes);
stoppa tonen uppspelningen:
noTone(8);
Lys upp ledde till initial staten (grön färg)
mapColor(-1);
}
}
}
funktion som matchar anteckningen med en viss färg
Den kombinerar färg på RGB att producera en annan
void mapColor (int not)
{
Switch(Note)
{
fall NOTE_C3:
fall NOTE_C4:
analogWrite (redPin, 0);
analogWrite (greenPin, 255);
analogWrite (bluePin, 255);
bryta;
fall NOTE_D3:
fall NOTE_D4:
analogWrite (redPin, 0);
analogWrite (greenPin, 0);
analogWrite (bluePin, 255);
bryta;
fall NOTE_E3:
fall NOTE_E4:
analogWrite (redPin, 255);
analogWrite (greenPin, 0);
analogWrite (bluePin, 0);
bryta;
fall NOTE_F3:
fall NOTE_F4:
analogWrite (redPin, 0);
analogWrite (greenPin, 255);
analogWrite (bluePin, 0);
bryta;
fall NOTE_G3:
fall NOTE_G4:
analogWrite (redPin, 255);
analogWrite (greenPin, 0);
analogWrite (bluePin, 255);
bryta;
fall NOTE_A3:
fall NOTE_A4:
analogWrite (redPin, 255);
analogWrite (greenPin, 255);
analogWrite (bluePin, 0);
bryta;
fall NOTE_B3:
fall NOTE_B4:
analogWrite (redPin, 0);
analogWrite (greenPin, 0);
analogWrite (bluePin, 0);
bryta;
fall 0://it representerar slutet staten eller tystnad
analogWrite (redPin, 255);
analogWrite (greenPin, 255);
analogWrite (bluePin, 255);
bryta;
i mål -1:/ / det representerar starttillstånd
analogWrite (redPin, 255);
analogWrite (greenPin, 0);
analogWrite (bluePin, 255);
bryta;
standard://other anteckningar
analogWrite (redPin, 105);
analogWrite (greenPin, 255);
analogWrite (bluePin, 100);
bryta;
}
}