Étape 3: Programmer l’arduino
Copiez-collez le code suivant à votre arduino IDE, compilation, puis uplode (si vous utilisez l’attiny vous devrez changer les broches qui sont utilisés dans le croquis)./*
*
* LunaMod pour Arduino & Attiny45
* Remix par Rob Miles
* Tacoma, WA 8 août 2011
*
* J’ai vu le projet initial dans Make vol. 26
* par Brian McNamara
* Brian était en cours d’exécution sur un PicAxe et je n’ai qu’attiny45s alors...
*
* La section freqout où arrive la vraie magie est du code synthé de Paul Badger sur le site principal de l’Arduino
*
* J’ai gardé cela assez simple, mais avec un Arduino, il pourrait obtenir beaucoup plus compliqué si vous le souhaitez
* Même sur un attiny45 si vous utilisez vous ajoutez un bouton à la broche led vous coud se faufiler en plus d’effets
*
*/
#define frequencyPot 0 //frequency pot liée à la broche 15 qui est A1
#define tempoPot 1 pot de //tempo liée à la broche 16 qui est A2
#define buttonPin 9 //programming bouton lié à broche 17 qui est A3
#define ledPin 10 //status conduit liée à la broche 18 qui est A4
#define speakerPin 11 //speaker ou sortie broche 19 whish est A5
Si vous utilisez un haut-parleur, il faut au moins un haut-parleur 16 ohms un devrait avoir une
résistance, peut-être 200 ohms à 1K Ohms, entre la borne négative et la terre.
un potentiomètre serait encore mieux.
int currentStep = 0 ; Il s’agit juste de suivre qui tonifier dans la mémoire que nous jouons actuellement
les étapes d’int [] = {500,500,100,100,100,100,100,100, / / il s’agit de notre ton stockage areae
100,100,100,100,100,100,100,100, //I utilisé 64 tons ou 8 tonnes par beat
500,500,100,100,100,100,100,100, //you pouvez modifier manuellement et d’expérimenter si vous le souhaitez
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} ;
tempo int = 0 ; tempo ou vitesse entre tons
durée de l’int = 0 ; Combien de temps chacun des 64 tons joue
fréquence d’int = 0 ; tonalité actuelle
int pitchval = 1 ;
void setup() //set vers le haut de vos NIP...
{
pinMode (frequencyPot, entrée) ;
pinMode (tempoPot, entrée) ;
pinMode (buttonPin, entrée) ;
digitalWrite (buttonPin, HIGH) ;
pinMode (ledPin, sortie) ;
pinMode (speakerPin, sortie) ;
}
void loop()
{
pour (int i = 0; j’ai < 63; i ++) //64 les notes jouées
{
currentStep = i ; enregistrer notre position actuelle dans la boucle pour plus tard
Si (j’ai == 0 || j’ai == 16 || j’ai == 32 || j’ai == 48) {//keep piste du battement sur le led
digitalWrite (ledPin, HIGH);}
Si (j’ai == 7 || j’ai == 23 || j’ai == 39 || j’ai == 55) {//keep piste du battement sur le led
digitalWrite (ledPin, LOW);}
Si (digitalRead(buttonPin) == faible) //is le bouton programme
{//if permet donc d’écrire une nouvelle tonalité de cet emplacement
mesures [currentStep] = (analogRead(frequencyPot)) ; lire le pot de la fréquence et le ton nouveau
FreqOut (étapes [currentStep], durée) ; définir les paramètres de frequout ci-dessous et lisez-le
FreqOut (étapes [currentStep] + 64, durée) ; jouer une autre tonalité un peu différente de l’original pour donner
il un peu plus en profondeur. Cela peut être modifié à votre goût
FreqOut (étapes [currentStep] +128, durée) ; jouer une autre tonalité un peu différente de l’original pour donner
il un peu plus en profondeur. Cela peut être modifié à votre goût
}
else {//else jouer le ton
FreqOut (étapes [currentStep], durée) ; définir les paramètres de frequout ci-dessous et lisez-le
FreqOut (étapes [currentStep] + 64, durée) ; jouer une autre tonalité un peu différente de l’original pour donner
il un peu plus en profondeur. Cela peut être modifié à votre goût
FreqOut (étapes [currentStep] +128, durée) ; jouer une autre tonalité un peu différente de l’original pour donner
il un peu plus en profondeur. Cela peut être modifié à votre goût
}
tempo = (analogRead(tempoPot)/4) ; lire le pot de tempo
durée = tempo/8 ; définir les durées de tonalité séparée
Delay(tempo) ; attendre un peu
}
}
void freqout (int freq, int t)
{
int hperiod ;
cycles de temps, j’ai ;
hperiod = (500000 / ((freq-7) * pitchval)) ;
cycles = (freq (long) * t (long)) / 1000 ;
pour (i = 0; i < = cycles; i ++)
{
digitalWrite (speakerPin, HIGH) ;
delayMicroseconds(hperiod) ;
digitalWrite (speakerPin, basse) ;
delayMicroseconds (hperiod - 1) ;
}
}