Stap 3: Programma de arduino
Kopie plak de volgende code naar je arduino IDE, compileren en vervolgens uplode (als u van de attiny u zult moeten veranderen de pinnen die worden gebruikt in de schets gebruikmaakt)./*
*
* LunaMod voor Arduino & Attiny45
* Remix door Rob Miles
* Tacoma, WA, 8 augustus 2011
*
* Ik zag het oorspronkelijke project in Make vol. 26
* door Brian McNamara
* Brian's liep op een PicAxe en ik heb alleen zo attiny45s...
*
* De sectie van de freqout waar de echte magie gebeurt is van Paul Badger's synth code op de hoofdsite van de Arduino
*
* Ik hield dit vrij ongecompliceerd, maar met een Arduino dit een veel ingewikkelder als je wilt krijgen kon
* Zelfs op een attiny45 als u gebruikt u een knop toevoegen aan de led pin u coud sluipen in meer effecten
*
*/
#define frequencyPot 0 //frequency pot gebonden aan pin 15 oftewel A1
#define tempoPot 1 //tempo pot gebonden aan pin 16 die A2
#define buttonPin 9 //programming knop gebonden aan pin 17 oftewel A3
#define ledPin 10 //status ertoe gebonden pin 18 dat A4
#define speakerPin 11 //speaker of output pin 19 whish is A5
Als u een luidspreker moet minimaal 16 ohm luidspreker een moet een
weerstand, misschien 200 ohm tot 1K-ohm, tussen de negatieve lood en grond.
een potentiometer zou nog beter zijn.
int currentStep = 0; Dit is gewoon te volgen die in het geheugen die we momenteel aan het spelen zijn Toon
int stappen [] = {500,500,100,100,100,100,100,100, / / dit is onze Toon opslag areae
100,100,100,100,100,100,100,100, //I gebruikt 64 tonen of 8 tinten per beat
500,500,100,100,100,100,100,100, //you kunt deze handmatig wijzigen en als u wilt experimenteren
100,100,100,100,100,100,100,100,
500,500,100,100,100,100,100,100,
100,100,100,100,100,100,100,100,
500,500,100,100,100,100,100,100,
100,100,100,100,100,100,100,100};
int tempo = 0; tempo of snelheid tussen tonen
int duur = 0; Hoe lang elk van de 64 tonen speelt
int frequentie = 0; huidige Toon
int pitchval = 1;
void setup //set omhoog uw pennen...
{
pinMode (frequencyPot, INPUT);
pinMode (tempoPot, INPUT);
pinMode (buttonPin, INPUT);
digitalWrite (buttonPin, hoge);
pinMode (ledPin, OUTPUT);
pinMode (speakerPin, OUTPUT);
}
void loop
{
voor (int i = 0; ik < 63; i ++) //64 individuele nota's gespeeld
{
currentStep = i; onze huidige positie in de lus opslaan voor later
Als (i == 0 || ik == 16 || ik == 32 || ik == 48) {//keep track van de beat op de led
digitalWrite (ledPin, hoge);}
Als (ik 7 == || ik == 23 || ik == 39 || ik == 55) {//keep track van de beat op de led
digitalWrite (ledPin, laag);}
Als (digitalRead(buttonPin) == LOW) //is de programmaknop wordt ingedrukt
{//if dus laat schrijven van een nieuwe Toon deze locatie
stappen [currentStep] = (analogRead(frequencyPot)); lezen van de pot van de frequentie en de nieuwe Toon
freqout (stappen [currentStep], duur); de parameters voor de frequout hieronder en spelen
freqout (stappen [currentStep] +64, duur); Speel een andere Toon een beetje anders dan het origineel om te geven
het een beetje meer diepte. Dit kan veranderd worden naar uw wens
freqout (stappen [currentStep] +128, duur); Speel een andere Toon een beetje anders dan het origineel om te geven
het een beetje meer diepte. Dit kan veranderd worden naar uw wens
}
else {//else spelen de Toon
freqout (stappen [currentStep], duur); de parameters voor de frequout hieronder en spelen
freqout (stappen [currentStep] +64, duur); Speel een andere Toon een beetje anders dan het origineel om te geven
het een beetje meer diepte. Dit kan veranderd worden naar uw wens
freqout (stappen [currentStep] +128, duur); Speel een andere Toon een beetje anders dan het origineel om te geven
het een beetje meer diepte. Dit kan veranderd worden naar uw wens
}
tempo = (analogRead(tempoPot)/4); Lees de tempo-pot
duur = tempo/8; instellen van de duur van de individuele Toon
delay(tempo); een beetje wachten
}
}
VOID freqout (int freq, int t)
{
int hperiod;
lange cycli, i;
hperiod = (500000 / ((freq-7) * pitchval));
cycli = ((lange) freq * (lange) t) / 1000;
voor (ik = 0; ik < = cycli; i ++)
{
digitalWrite (speakerPin, hoge);
delayMicroseconds(hperiod);
digitalWrite (speakerPin, laag);
delayMicroseconds (hperiod - 1);
}
}