Theremin ultrasons (3 / 4 étapes)

Étape 3: Étape 3: Code

Télécharger les fichiers joints et copie et passé le code dans les fichiers pertinents. Ajout de keyClass.cpp et keyClass.h en tant que nouveaux fichiers.

ofApp.cpp Code

 #include "ofApp.h" //int for storing the byte data from Arduino. 
 int byteData; 
 //-------------------------------------------------------------- 
 void ofApp::setup(){ 
 //General setup of look of window. 
 ofBackground(255); 
 ofSetColor(0); 
 //serial port setup. using COM3 for Windows port. 
 //Also using baud rate 9600, same in Arduino sketch. 
 sampleRate = 44100; // setting up the sampleRate 
 bufferSize = 512; // setting up the bufferSize 
 for( int i = 0; i < n.size(); i ++) { // looping through the vector of notes 
 keys.emplace_back( new Key(n[i])); // because I'm using a uniqe_ptr I call emplace_back instead of push_back 
 } 
 ofSoundStreamSetup(2, 0, this, sampleRate, bufferSize, 4); // here I'm setting up the connection with the sound card using ofSoundStreamSetup 
 serial.setup("/dev/cu.usbmodem1421", 9600); // the port number will be different on every device and this is running on a Mac and that's why the port number is different. Make sure that the port number is correct before you run the code 
 } 
 //-------------------------------------------------------------- 
 void ofApp::update(){ 
 //Simple if statement to inform user if Arduino is sending serial messages. 
 if (serial.available() < 0) { 
 msg = "Arduino Error"; 
 } 
 else { 
 //While statement looping through serial messages when serial is being provided. 
 while (serial.available() > 0) { 
 //byte data is being writen into byteData as int. 
 byteData = serial.readByte(); 
 //byteData is converted into a string for drawing later. 
 msg = "cm: " + ofToString(byteData); 
 } 
 } 
 } 
 //-------------------------------------------------------------- 
 void ofApp::draw(){ 
 //drawing the string version pf byteData on oF window. 
 ofDrawBitmapString(msg, 50, 100); 
 //printing byteData into console. 
 cout << byteData << endl; 
 // These if statements checks the specific distance from the ultrasonic sensor and so depending in the distance a different note will be triggered 
 if(byteData >= 1 && byteData <= 2 ){ 
 keys[0]->on(); 
 }else{ 
 keys[0]->off(); 
 } 
 if(byteData >= 3 && byteData <= 4){ 
 keys[1]->on(); 
 }else{ 
touches [1] -> off() ; keys[1]->off(); } 
 if(byteData >= 5 && byteData <= 6){ 
 keys[2]->on(); 
 }else{ 
 keys[2]->off(); 
 } 
 if(byteData >= 7 && byteData <= 8){ 
 keys[3]->on(); 
 }else{ 
 keys[3]->off(); 
 } 
 if(byteData >= 9 && byteData <= 10){ 
 keys[4]->on(); 
 }else{ 
 keys[4]->off(); 
 } 
 if(byteData >= 11 && byteData <= 12){ 
 keys[5]->on(); 
 }else{ 
 keys[5]->off(); 
 } 
 if(byteData >= 13 && byteData <= 14){ 
 keys[6]->on(); 
 }else{ 
 keys[6]->off(); 
 } 
 if(byteData >= 15 && byteData <= 16){ 
 keys[7]->on(); 
 }else{ 
 keys[7]->off(); 
 } 
 } 
 void ofApp::audioOut( float * output, int bufferSize, int nChannels){ 
 for(int i = 0; i < bufferSize; i ++) { // you need to loop through the bufferSize 
 for(int j = 0; j < n.size(); j ++) { // looping through the vector of notes 
 notes += keys[j]->play() / n.size(); 
 } 
 myMix.stereo(notes, outputs, 0.5); 
 output[i * nChannels] = outputs[0]; 
 output[i * nChannels + 1] = outputs[1]; 
 } 
 } 
 <strong>ofApp.h</strong> 
 #pragma once<br> 
 #include "ofMain.h" 
 #include "ofxMaxim.h" 
 #include "keyClass.h" 
 class ofApp : public ofBaseApp{ 
 public: 
 //Standard oF functions. 
 void setup(); 
 void update(); 
 void draw(); 
 void audioOut( float * ouput, int bufferSize, int nChannels); 
 int bufferSize, sampleRate; 
 double notes; 
 double outputs[ 2 ]; 
 //array of frequencies 
 vector n {261.63, 293.66, 329.63, 349.23, 392.00, 440.00, 493.88, 523.25 }; 
 vector> keys; 
 maxiMix myMix; 
 //Custom variables for on screen string and font. 
 string msg; 
 //ofTrueTypeFont font; 
 //New serial object. 
 ofSerial serial; 
 }; 

keyClass.cpp Code

 #include "keyClass.h"<br> 
 Key::Key(double _f) { 
 freq = _f; 
 env.setAttack(1000); 
 env.setDecay(1); 
 env.setSustain(1); 
 env.setRelease(1000); 
 } 
 void Key::on() { 
 env.trigger = 1; 
 } 
 void Key::off() { 
 env.trigger = 0; 
 } 
 double Key:: play(){ 
 return env.adsr(osc.sinewave(freq), env.trigger); 
 } 

keyClass.h Code

 #ifndef __keyboardofxMaxim__keyClass__<br> #define __keyboardofxMaxim__keyClass__ 
 #include 
 #include "ofxMaxim.h" 
 class Key { 
 public: 
 maxiOsc osc; 
 maxiEnv env; 
 double freq; 
 Key( double _f); 
 double play(); 
 void on(); 
 void off(); 
 }; 
 #endif /* defined(__keyboardofxMaxim__keyClass__) */ 


Articles Liés

Star Wars Adafruit flore Theremin LED Bra

Star Wars Adafruit flore Theremin LED Bra

utiliser la force, Luke. Fermez les yeux, tenez-vous bien à ton Sabre et...Ne pas toucher que le cadran.  Aucun peaufinage des boutons.  Des vagues juste vos mains devant les deux capteurs sensibles incorporés dans cette pièce sur mesure de portable
Intel IoT Edison Sonar Theremin

Intel IoT Edison Sonar Theremin

Intel® Edison est nouvelle merveille minuscule d'Intel, avec notamment un processeur d'Intel® Atom™ dual-core système sur une puce, 1Go de RAM, WiFi, LE Bluetooth qui vous permet d'exécuter un véritable système d'exploitation (linux!) sur elle et fai
Rappel de porte-fermeture de Arduino Theremin

Rappel de porte-fermeture de Arduino Theremin

Parfois, nous devons ajouter quelques assaisonnement à notre vie, afin que vous vous sentirez mieux et créer plus de plaisir pour inviter la vie deviennent étonnante.Mes collègues et moi toujours oublié de fermer la porte après notre rencontre, et il
Theremin arduino

Theremin arduino

En este instructable vamos un theremin ONU de hacer ne con arduino, la intención era hacer ONU arpa pero como aucuns vamos a usar lasers o algo que semeje cuerdas, thérémine de llamarlo es mas correcto.Étape 1: Materiales Arduino UNOProtoboardCâblesC
Arduino Nano : Ranger(Ping) ultrasons Distance I2C afficheur LCD 2 X 16 avec Visuino

Arduino Nano : Ranger(Ping) ultrasons Distance I2C afficheur LCD 2 X 16 avec Visuino

Dans ce Instructable, je vais vous montrer combien il est facile de connecter le Capteur à ultrasons pour Arduino et la distance d'affichage sur un Écran LCD.Veuillez noter que l'annotation sur certaines images dans ce Instructable fonctionnera corre
Boîte d’Ultrasone

Boîte d’Ultrasone

Boîte de UltrasoneIk ben op het idee van een ultrasone boîte terecht, omdat bij het bekijken van studentenkamers altijd onduidelijkheid a hoe groot de kamer nou precies est. Het lijkt mij handig om a rencontré 1 druk op de knop de dimensions te weten
Télémètre à ultrasons avec affichage à cristaux liquides sur Arduino UNO

Télémètre à ultrasons avec affichage à cristaux liquides sur Arduino UNO

Dans ce tutoriel nous allons voir une utilisation différente du module ultrasons HC-SR04. Ce module est souvent utilisé sur les robots et les voitures jouets pour localiser les obstacles, mais il peut être utilisé pour mesurer les distances aussi bie
Lumière-Theremin CD de Moldover (version DIY)

Lumière-Theremin CD de Moldover (version DIY)

Salut! Je suis Moldover. Je fais de la musique et je fais des instruments de musique.J'ai sorti mon premier album original (éponyme) comme Moldover en 2009. L'édition impressionnant de cet album est venu sur un CD monté sur un circuit conçu qui est a
Capteur de niveau d’eau à ultrasons Arduino pour machines à café Espresso

Capteur de niveau d’eau à ultrasons Arduino pour machines à café Espresso

J'ai une machine à café expresso de très bon mais assez vieux avec un réservoir d'eau amovible, le problème est qu'il ne fournit pas un voyant de niveau d'eau bas, donc je ne peux pas savoir à ce niveau avant de manquer d'eau ! OU au moins sans ouvri
Une jolie boîte pour un theremin

Une jolie boîte pour un theremin

Après les trucs de bricolage pour la saga de la musique, il était temps de créer une autre boîte, cette fois pour mon kit de theremin theremaniacs.J'ai eu le theremin dans une boîte en bois très laide et je voulais toujours lui donner une meilleure m
Mesure de la distance à l’aide de capteurs à ultrasons et Arduino

Mesure de la distance à l’aide de capteurs à ultrasons et Arduino

Salut tout le mondeJ'ai eu mon premier Aduino récemment, je suis ici voir la gonne, vous mon premier projetez qui utilise la mesure de la Distance capteur à ultrasons et Arduino, vous pouvez utiliser ce projet demande beaucoup aimeNiveau 1-liquideDét
Ajouter 6 capteurs ultrasons Distance à framboise existant Pi Robot

Ajouter 6 capteurs ultrasons Distance à framboise existant Pi Robot

Ce n'est pas un tutoriel pour faire un robot Raspberry Pi avec 6 capteurs à ultrasons.Il s'agit d'un tutoriel montre la meilleure méthode pour ajouter 6 capteurs à ultrasons directement à la framboise pi sans l'utilisation de n'importe quel microcont
Theremin Makey papier Makey

Theremin Makey papier Makey

C'est vraiment rapide projet qui illustre l'utilisation de la fonctionnalité « Pro » de la Makey Makey comme un micro contrôleur. Dans ce projet, nous utilisons l'un des 6 broches d'entrée analogiques sur le dessous de la Makey Makey. Il s'agit d'un
Analog ultrasons télémètre

Analog ultrasons télémètre

Quand j'ai commencé ma carrière en systèmes de contrôle, que j'ai été fasciné par les différentes manières que machines pourrait être relié à l'environnement en qu'ils agissaient. Fins de course (électriques et optiques), codeurs, résolveurs, jauges