Comment construire un Air Guitar avec Arduino, aka la guitare AIRduino (5 / 5 étapes)

Étape 5: Code

Voici le code Arduino requis :

La partie de la génération de sons en temps réel est tirée de ce tutoriel.

------------------------------------------------------
Un tableau contenant la forme d’onde
d’un son de guitare
Char [] de forme d’onde =
{125, 148, 171, 194, 209, 230, 252, 255,
253, 244, 235, 223, 207, 184, 169, 167,
163, 158, 146, 131, 126, 129, 134 et 127,
105, 80, 58, 51,38, 22, 12, 2, 10, 35,
58, 75, 89, 103, 120, 141, 150, 148, 145,
144, 140, 129, 116, 105, 95, 86, 75, 72,
73, 76, 88, 103, 117, 121, 120, 115, 120,
143, 159, 162, 156, 155, 163, 184, 202,
214, 215, 211, 213, 212, 205, 196, 182,
162, 142, 118, 99, 84, 68, 54, 40, 28,
19, 10, 7, 0, 0, 5, 9, 14, 21, 33,
49, 59, 65, 75, 92, 110} ;

Nous utilisons cette forme d’onde pour changer le
volume de la sortie
Char [] waveformVolume =
{125, 148, 171, 194, 209, 230, 252, 255,
253, 244, 235, 223, 207, 184, 169, 167,
163, 158, 146, 131, 126, 129, 134 et 127,
105, 80, 58, 51,38, 22, 12, 2, 10, 35,
58, 75, 89, 103, 120, 141, 150, 148, 145,
144, 140, 129, 116, 105, 95, 86, 75, 72,
73, 76, 88, 103, 117, 121, 120, 115, 120,
143, 159, 162, 156, 155, 163, 184, 202,
214, 215, 211, 213, 212, 205, 196, 182,
162, 142, 118, 99, 84, 68, 54, 40, 28,
19, 10, 7, 0, 0, 5, 9, 14, 21, 33,
49, 59, 65, 75, 92, 110} ;
Un tableau utilisé comme mémoire tampon afin d’éviter
distance de ponctuel erronée
mesures
unsigned int distance_buffer [] = {16000,
16000, 16000, 16000, 16000, 16000, 16000,
16000, 16000, 16000, 16000, 16000, 16000,
16000, 16000, 16000} ;

const int distance_length = 3 ;
int distance_index = 0 ;

Les valeurs de dépassement de capacité de 2 octaves
la fréquences d’int [] = {39, 42, 44, 47,
50, 52, 56, 59, 63, 66, 70, 74, 79,
84, 89, 94, 100, 105, 112, 118, 126,
133, 141, 149} ;

Hauteur d’origine
hauteur int = 160 ;

Accélération et volume initial
paramètre
int lastAcc = 0 ;
flotteur volume = 0 ;

lecture audio sur la broche 3
speakerpin octets = 3 ;

variable d’index pour la position des
forme d’onde
waveindex volatile octets = 0
currentvalue volatils octets = 0 ;

Broche utilisée pour capteur ultrasons
const int pingPin = 7 ;

Broches pour les potentiomètres
const int sustainPin = 1 ;
const int sensitivityPin = 2 ;

Broches pour chaque doigt de la gauche
main
const int finger1 = 9 ;
const int finger2 = 10 ;
const int finger3 = 11 ;
const int finger4 = 12 ;

int fingerValue = 0 ;

longue durée, pouces, cm ;

void setup() {}

pinMode(3,OUTPUT) ; Haut-parleur sur la broche 3

pinMode(finger1,INPUT) ;
pinMode(finger2,INPUT) ;
pinMode(finger3,INPUT) ;
pinMode(finger4,INPUT) ;

/**************************
Configuration audio PWM
****************************/
la valeur Timer2 rapide mode PWM
(double fréquence PWM)
bitSet (TCCR2A, WGM21) ;
bitSet (TCCR2B, CS20) ;
bitClear (TCCR2B, CS21) ;
bitClear (TCCR2B, CS22) ;

activer les interruptions maintenant qui enregistre
ont été mis en
SEI() ;

/*************************
Configuration d’interrupt Timer 1
*************************/
désactiver les interruptions tout en
registres sont configurés
CLI() ;

/ * Opération de port normal, épingles déconnectés
de fonctionnement de la minuterie (rupture pwm) * /
bitClear (TCCR1A, COM1A1) ;
bitClear (TCCR1A, COM1A1) ;
bitClear (TCCR1A, COM1A1) ;
bitClear (TCCR1A, COM1A1) ;

/ * Mode 4, CTC avec dessus valeur de Registre
OCR1A. Permet de régler le calage variable pour
l’interruption en écrivant de nouvelles valeurs à
OCR1A. */
bitClear (TCCR1A, WGM10) ;
bitClear (TCCR1A, WGM11) ;
bitSet (TCCR1B, WGM12) ;
bitClear (TCCR1B, WGM13) ;

/ * la valeur du diviseur d’horloge 8.  */
bitClear (TCCR1B, CS10) ;
bitSet (TCCR1B, CS11) ;
bitClear (TCCR1B, CS12) ;

/ * Désactiver Force sortie comparer pour
Canaux A et B. * /
bitClear (TCCR1C, FOC1A) ;
bitClear (TCCR1C, FOC1B) ;

/ * Initialise la sortie comparer
S’inscrire A à 160 pour définir le
premier pitch * /
OCR1A = 160 ;

désactiver l’interruption de la prise d’entrée
bitClear (TIMSK1, ICIE1) ;
désactiver la sortie
Comparer B interruption de Match
bitClear (TIMSK1, OCIE1B) ;
activer la sortie
Comparer une interruption du Match
bitSet (TIMSK1, OCIE1A) ;
désactiver le débordement interrompre
bitClear (TIMSK1, TOIE1) ;

Enable interrompt maintenant que
registres ont été établis
SEI() ;
}

Gestionnaire de débordement Timer
{ISR(TIMER1_COMPA_vect)}

/ * timer1 ISR.  Chaque fois qu’il
est appelé il affecte à speakerpin la
valeur suivante dans la forme d’onde []. Fréquence
modulation s’effectue en modifiant la
synchronisation entre les appels successifs de
Cette fonction, par exemple pour une tonalité de 1KHz,
régler l’allumage pour qu’il fonctionne
par le biais de forme d’onde [] 1000 fois
une seconde. */

réinitialiser le waveindex si elle a atteint
la fin du tableau

Si {(waveindex > 102)
waveindex = 0 ;
}

Définissez la valeur de sortie
Si {(volume > 0,03)
analogWrite (speakerpin,
waveformVolume[waveindex]) ;
}
waveindex ++ ;

Mise à jour le terrain
OCR1A = pitch ;
}

void loop()
{
Désactiver interputs, envoyer un ping
message et attendre la réponse.
CLI() ;
pinMode (pingPin, sortie) ;
digitalWrite (pingPin, basse) ;
delayMicroseconds(2) ;
digitalWrite (pingPin, HIGH) ;
delayMicroseconds(5) ;
digitalWrite (pingPin, basse) ;
durée = pulseIn (pingPin, haute, 2000) ;
SEI() ;
convertir l’heure dans un lointain
en centimètres
et le stocker dans la mémoire tampon
distance_buffer [distance_index ++
distance_length %] = Durée / 20 ;

Trouver dans la mémoire tampon la plus courte
distance mesurée
cm = 16000 ;
pour (int i = 0; i < distance_length; i ++) {}
cm = min (cm, distance_buffer[i]) ;
}

Vérifier quelles les doigts sont pressées
fingerValue = 5 ;
{if(!digitalRead(finger4))}
fingerValue = 4 ;
}
{if(!digitalRead(finger3))}
fingerValue = 3 ;
}
{if(!digitalRead(finger2))}
fingerValue = 2 ;
}
{if(!digitalRead(finger1))}
fingerValue = 1 ;
}

Mise à jour le sustain et
valeurs de sensibilité
flotteur soutenir =
Map(analogRead(sustainPin), 0,
1024, 101, 130) / 100,0 ;
sensibilité de l’int =
Map(analogRead(sensitivityPin),
0, 1024, 100, 200) ;

Mise à jour le volume
volume = volume / subir ;
Si (volume < 0) {}
volume = 0 ;
}

Vérifier l’accéléromètre
acc int = analogRead(0) ;
int accDiff = lastAcc - acc ;

Mise à jour la valeur du volume
Si (accDiff > 5 * (200 - sensibilité)) {}
volume = (float)
Pow (accDiff,
sensibilité / 100,0) / 50000 ;
}
lastAcc = acc ;

Vérifiez que le volume n’est pas supérieur à 1
Si {(volume > 95)
volume =. 95 ;
}

Mise à jour le volume dans la forme d’onde
pour (int i = 0; i < = 102; i ++) {}
waveformVolume [i] =
((forme d’onde [i] - 127) * volume) + 127 ;
}

La valeur du terrain selon la distance
entre les deux mains et la
doigts pressés
Si (cm < 102 & & cm > 0) {}
Si {(cm > 30)
hauteur = fréquences [7 +
(((cm-30) / 24) * 4 + fingerValue - 1)] ;
} else {}
hauteur = carte (cm, 0, 30, 39, 79) ;
}
} else {}
hauteur = fréquences [7 +
(((102-30)/24) * 4 + fingerValue - 1)] ;
}

Délai pour éviter le rebond de signaux
Delay(50) ;
}

------------------------------------------------------

Articles Liés

Comment construire votre propre guitare

Comment construire votre propre guitare

comment construire votre propre guitare à partir de zéro.Cette instructable vous aidera à apprendre comment personnaliser votre guitare, en commençant avec un corps vide.Étape 1: Mise en forme la guitare Façonner la guitare est une étape difficile. C
Comment construire un Longboard électrique avec commande de téléphone

Comment construire un Longboard électrique avec commande de téléphone

Longboards électriques sont awsome !IMAGES DE TEST DANS LA VIDÉO CI-DESSUSCOMMENT CONSTRUIRE UN LONGBOARD ÉLECTRIQUE COMMANDÉ DEPUIS UN TÉLÉPHONE AVEC BLUETOOTHMise à jour #1: Bande de Grip installé, quelques réglages sur le régulateur de vitesse ont
Comment construire un Ultimaker Original + avec une taille d’impression-lit Double (180 X 460)

Comment construire un Ultimaker Original + avec une taille d’impression-lit Double (180 X 460)

surtout pour les fabricants parmi nous (Fablabers, enseignants, apprentissage par la pratique étudiants et geeks) dans le but d'inspirer tout le monde non seulement voir l'imprimante 3D est un fantastique machine ainsi qu'une machine vous pouvez auss
Comment faire un Air Guitar !

Comment faire un Air Guitar !

Avez-vous jamais voulu faire une douce guitare pour rock sur aucun argent du tout ? Eh bien maintenant vous pouvez !Étape 1: matériaux Vous aurez besoin :Air guitar organesLa guitare pick gardesCordes de guitare aériensGuitare d'air tuning keysAir gu
Comment construire l’ampli guitare

Comment construire l’ampli guitare

maintenant je vais montrer comment construire un ampli de guitare facileÉtape 1: Pièces que nécessaires Étape 2: Les fils jusqu'à ce diagrammeÉtape 3: Construire un boxxet vous avez fait
Comment construire un simple fusil de Plasma aka électrothermique fusil

Comment construire un simple fusil de Plasma aka électrothermique fusil

dans ce Instructable nous vous montrerons comment construire un simple fusil électrothermique qui peut tirer des bbs en utilisant le plasma fait irruption d'une décharge capacitive. Cette conception est facilement évolutive. Si vous utilisez une tens
Comment construire Phénix armure avec Legos

Comment construire Phénix armure avec Legos

Aujourd'hui je vais enseigner vous comment créer une version personnalisée que j'aime à appeler : armure de Phoenix, de legos.Étape 1: Comment construire la trame Section :Pièces: (Voir le décroissant se déplaçant vers la droite) 2 bottes or 4 armure
Comment utiliser NeoPixel 16 bague avec Arduino Uno

Comment utiliser NeoPixel 16 bague avec Arduino Uno

Aujourd'hui, je vais vous montrer comment utiliser NeoPixel anneau avec Arduino Uno un type très basique. Comme vous le savez, nous aimons LED colorées, même il a été établi sur un ring !La nécessité liste :1. Arduino Uno2. NeoPixel anneau 16xWS2812
Comment utiliser un Module P10 avec arduino

Comment utiliser un Module P10 avec arduino

Salut tout le monde, dans ce projet, nous allons apprendre à utiliser un module P10 avec arduino nano. Vous devez acheter un module P10 et un bloc d'alimentation. Il y a quelques bonnes informations sur le freetronics.Étape 1: Module de P10 Caractéri
Comment dessiner sur un Oscilloscope avec Arduino !

Comment dessiner sur un Oscilloscope avec Arduino !

Tout d'abord, laisse aller sur quelques notions de base. Un oscilloscope est un outil de visualisation de changement des signaux électriques.Oscilloscope: Oscillation (changement), portée (visualisation). Ensemble, ils font « oscilloscope » !Un oscil
Comment construire, faire une guitare effets Pedal Board avec entrée sortie jacks - étape par étape

Comment construire, faire une guitare effets Pedal Board avec entrée sortie jacks - étape par étape

Il s'agit d'un guide complet sur la façon de concevoir et de construire votre propre pédalier pour vos pédales de guitare.Le bois utilisé était pin et teinté 4 fois pour créer la belle couleur sombre.J'ai acheté velctro dur de haute qualité, velcro d
Comment construire un étui à guitare

Comment construire un étui à guitare

d'abord éteint j'ai décidé de construire ce parce que j'étais fatigué de porter mon précieux Les Paul autour dans une housse stupide peur que je l'exécuter dans un mur ou quelque chose et fendre la tête d'attelage. Donc, j'ai construit un étui à guit
Comment construire une aire de jeux bateau Pirate

Comment construire une aire de jeux bateau Pirate

nous avons décidé de construire un bateau de pirate pour mon petit-fils... c'est comment nous l'avons fait.J'ai commencé en faisant ressortir quelques basic croquis de ce que je pensais serait un look cool et a travaillé sur quelques idées fondamenta
Comment utiliser Nokia 5110 LCD avec Arduino ?

Comment utiliser Nokia 5110 LCD avec Arduino ?

Aujourd'hui, je vais vous montrer comment utiliser l'affichage du Nokia 5110 avec cartes Arduino avec ces étapes faciles.La nécessité liste :1. Arduino UNO (avec câble)2. Nokia 5110 LCD (avec câbles minuscules)Étape 1: Les connexionsSuivre les connex