Stap 6: Tijd om het te draaien!
Video
http://youtu.be/lV9WurONtV0
Als samenvatting
Het programma heeft dan 3 hoofdonderdelen:
-Het eerste deel bestaat uit de verklaring van de variabelen, constanten en invoer van andere bestanden. Het importeren van het bestand "pitches.h", daar vindt u de constante van de noten met hun frequenties. U kunt het downloaden van arduino pagina: http://arduino.cc/en/Tutorial/Tone3
-Het tweede deel is de Setup die in principe de initialisatie van het programma is. Hier definiëren we input/output pinnen en andere spullen. Het setup-gedeelte loopt slechts eenmaal, aan het begin van het programma.
-De derde deel is de loop. Dit zal altijd totdat u de arduino uitschakelt. Daar vindt u de code van de belangrijkste programma dat speelt het liedje en licht omhoog de led met verschillende kleuren. Ook het gevoel van de waarde van de potmeter om te definiëren van de snelheid (tempo) die zal spelen.
De volledige code:
/ * Melody
Speelt een melodie
route:
* 8-ohm luidspreker op digitale pin 8
Baseren op het voorbeeld van http://arduino.cc/en/Tutorial/Tone door Tom Igoe
Gewijzigd door: Irene Meiying Cheung Ruiz
*/
#include "pitches.h"
#define SONG1_SIZE 24
#define SONG2_SIZE 14
noten in de melodie 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
};
noten in de melodie 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
};
Opmerking de duur van de melodie 1:4 = kwartnoot, 8 = achtste noot, enz.:
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};
Opmerking de duur van de melodie 2:4 = kwartnoot, 8 = achtste noot, enz.:
int noteDurations2 [] {} =
2, 2.5, 8, 1.5, 4, 2, 2, 1.5,
4 1.8, 4, 1.8, 4, 1};
Pinnen
int redPin = 11;
int greenPin = 10;
int bluePin = 9;
int knop = 2;
controle variabelen
int counter = 0;
int ingedrukt = 0;
Boole playsong = false;
//Song temp variabelen
int songSizeS;
int * noteDurationS = 0;
int * melodyS = 0;
snelheid controle variabelen
int sensorValue = 0;
float tempo = 0;
initialisatie
void setup {
Setup pinnen
pinMode (redPin, OUTPUT);
pinMode (greenPin, OUTPUT);
pinMode (bluePin, OUTPUT);
pinMode (button, INPUT);
licht tot groen aan het begin
mapColor(-1);
opsporen van fouten
Serial.begin (9600); optioneel
}
hoofdprogramma
void loop {
detecteren wanneer de knop werd ingedrukt
if(digitalRead(button) == laag)
{
ingedrukt = 1;
}
detecteren wanneer de knop realesed is
if(digitalRead(button) == HIGH & & geperst == 1)
{
teller ++;
ingedrukt = 0;
playsong = true; variabele om te bepalen wanneer om te beginnen met het liedje
beslissen welk lied speelt
als (teller % 2 == 0)
{
songSizeS = SONG1_SIZE;
noteDurationS = noteDurations1;
melodyS = melody1;
}
anders
{
songSizeS = SONG2_SIZE;
noteDurationS = noteDurations2;
melodyS = melody2;
}
}
Start het liedje als de knop is ingedrukt:
if(playsong)
{
playsong = false;
/ / itereren over de noten van de melodie
voor (int thisNote = 0; thisNote < songSizeS; thisNote ++)
{
//sensor waarde van de potentiometer toegewezen aan het bereik van 1-3 snelheid waarden
sensorValue = analogRead(A0);
tempo = sensorValue * (3.0 / 1023.0); Serial.println(tempo);
voor het berekenen van de duur van de opmerking, neem één seconde
gedeeld door het type opmerking.
bijvoorbeeld kwartnoot = 1000 / 4, achtste noot = 1000/8, etc. int noteDuration = 1000/noteDurationS [thisNote];
Toon (8, melodyS[thisNote],noteDuration);
licht omhoog de rgb-led afhankelijk van de notitie
mapColor (melodyS [thisNote]);
om te onderscheiden van de notities, stel een minimuminterval tussen hen.
de nota's duur * tempo
int pauseBetweenNotes = noteDuration * tempo;
delay(pauseBetweenNotes);
Stop het afspelen van de Toon:
noTone(8);
licht omhoog de heeft geleid tot eerste staat (groene kleur)
mapColor(-1);
}
}
}
functie waarmee de opmerking worden toegewezen aan een bepaalde kleur
Het combineert de kleur van RGB naar het produceren van een andere PPD gebruiken
void mapColor (int opmerking)
{
switch(Note)
{
Case NOTE_C3:
Case NOTE_C4:
analogWrite (redPin, 0);
analogWrite (greenPin, 255);
analogWrite (bluePin, 255);
breken;
Case NOTE_D3:
Case NOTE_D4:
analogWrite (redPin, 0);
analogWrite (greenPin, 0);
analogWrite (bluePin, 255);
breken;
Case NOTE_E3:
Case NOTE_E4:
analogWrite (redPin, 255);
analogWrite (greenPin, 0);
analogWrite (bluePin, 0);
breken;
Case NOTE_F3:
Case NOTE_F4:
analogWrite (redPin, 0);
analogWrite (greenPin, 255);
analogWrite (bluePin, 0);
breken;
Case NOTE_G3:
Case NOTE_G4:
analogWrite (redPin, 255);
analogWrite (greenPin, 0);
analogWrite (bluePin, 255);
breken;
Case NOTE_A3:
Case NOTE_A4:
analogWrite (redPin, 255);
analogWrite (greenPin, 255);
analogWrite (bluePin, 0);
breken;
Case NOTE_B3:
Case NOTE_B4:
analogWrite (redPin, 0);
analogWrite (greenPin, 0);
analogWrite (bluePin, 0);
breken;
geval van 0: / / het einde staat of stilte voorstelt
analogWrite (redPin, 255);
analogWrite (greenPin, 255);
analogWrite (bluePin, 255);
breken;
geval van -1:/ / het vertegenwoordigt de begintoestand
analogWrite (redPin, 255);
analogWrite (greenPin, 0);
analogWrite (bluePin, 255);
breken;
standaard://other notities
analogWrite (redPin, 105);
analogWrite (greenPin, 255);
analogWrite (bluePin, 100);
breken;
}
}