Theremin ultrasónico (3 / 4 paso)

Paso 3: Paso 3: código

Descargar los archivos adjuntos y copia y pasado el código a los correspondientes ficheros. Adición de keyClass.cpp y keyClass.h como nuevos archivos.

ofApp.cpp código

 #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{ 
teclas [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 código

 #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 código

 #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__) */ 


Artículos Relacionados

Medidor de distancia ultrasónico con pantalla LCD en el Arduino UNO

Medidor de distancia ultrasónico con pantalla LCD en el Arduino UNO

En este tutorial vamos a ver un uso distinto del módulo de ultrasonidos HC-SR04. Este módulo es de uso frecuente en coches de juguetes y robots para localizar obstáculos pero puede ser utilizado para medir distancias así.Distancias medidas por la HC-
YourDuino: HandBat - Radar ultrasónico portátil usando Arduino

YourDuino: HandBat - Radar ultrasónico portátil usando Arduino

HandBat es un dispositivo de Radar ultrasónico portátil que envía pulsos de ultrasonido y escucha los ecos, como un murciélago. Está diseñado para su uso por personas con problemas de visión o la navegación en la oscuridad.HandBAT se encuentra en una
Fácil sensor ultrasónico de 4 pines monitoreo (hc-sr04)

Fácil sensor ultrasónico de 4 pines monitoreo (hc-sr04)

Hola Instructables,He tenido algunos problemas con mi sensor de ultrasonidos barato (hc-sr04) y hoy he encontrado una solución muy fácil.Es una edición muy simple del código normal de 3 pines.He añadido el int 4 al principio del código, por lo que pu
Ultrasónico Robot evitando obstáculo

Ultrasónico Robot evitando obstáculo

Este es mi intento de diseñar y construir un obstáculo evitando robot! RekaBot (nombrada de un hada (:) puede detectar obstáculos con un sensor de ultrasonidos que puede moverse con la ayuda de un servo. Basado en las medidas que toma, las pistas son
Medida caja (sensor de distancia) usando el Sensor ultrasónico ~ la

Medida caja (sensor de distancia) usando el Sensor ultrasónico ~ la

¿Alguna vez has querido medir sin escala o cinta métrica?Mida la distancia sin problemas con este pequeño dispositivo!Alta precisión *Para más proyectos de interés visite: www.miymakers.comFacebook: www.facebook.com/miymakersPaso 1: Cómo funciona '¿C
Arduino - Sensor ultrasónico con LED y zumbador

Arduino - Sensor ultrasónico con LED y zumbador

Hola chicos este es mi primer tutorial, apenas he empezado a aprender electrónica hace unos meses (previamente he supe cómo programar en C y Python). Cuando he terminado este proyecto (me llevó unas 5 horas o algo) he decidido compartir para ayudar a
Araña-sentido ultrasónico

Araña-sentido ultrasónico

Todos queremos tener superpoderes. Pero probablemente no querrá exponerse a sustancias químicas tóxicas o radiación con el fin de conseguirlos. Afortunadamente, hay algunas habilidades que nos podemos aproximar de cerca con tecnología un poco.Por eje
Arduino - HC SR04 Sensor de distancia ultrasónico ultrasónico gama Sensor

Arduino - HC SR04 Sensor de distancia ultrasónico ultrasónico gama Sensor

¡Hola mundo! Hoy he hecho una cosa bastante útil. Un metro de distancia con un sensor de distancia ultrasónico. funciona perfecto y se puede utilizar para muchas cosas, como el robot posicionamiento etc.. No cuenta el teléfono y módulo Bluetooth no l
Medición con ftf 2,4 y un sensor ultrasónico de distancia

Medición con ftf 2,4 y un sensor ultrasónico de distancia

se trata de circuito de arduino muy simple con HC-SR04 ultrasónico sensor y 2.4 pulgadas de pantalla tft, con arduino uno.el arduino uno calcula la distancia y actualizar la pantalla cada 1 segundo.vea este vídeo para ver cómo funciona.Paso 1: Herram
La medición de distancia con sensor ultrasónico y Arduino

La medición de distancia con sensor ultrasónico y Arduino

Hola cada unoConseguí mi primer Aduino recientemente, aquí estoy ver gonne que mi primer proyecto que utiliza la medición de distancia sensor ultrasónico y Arduino, puede utilizar este proyecto muchas aplicaciones comoNivel 1-líquidoDetección de obje
Fabricación de Radar usando Arduino, sensor ultrasónico y MATLAB

Fabricación de Radar usando Arduino, sensor ultrasónico y MATLAB

En este proyecto vamos a hacer un simple radar para detectar obstáculos.Rango depende del rango del sensor ultrasónico utiliza (en este proyecto: 3 metros).Paso 1: componentesComponentes:1 - Arduino Uno2 - Sensor de distancia ultrasonidos (enlace: ht
Arduino Nano: Mide distancia con Ranger ultrasónico y registro para tarjeta MicroSD con Visuino

Arduino Nano: Mide distancia con Ranger ultrasónico y registro para tarjeta MicroSD con Visuino

Las tarjetas MicroSD son soporte de almacenamiento barato y fácil, y son muy convenientes para el almacenamiento de datos del sensor de Arduino . Hay también un número de baratos disponibles Módulos de tarjeta MicroSD para Arduino.En este Instructabl
Mejorar la precisión del Sensor ultrasónico gama

Mejorar la precisión del Sensor ultrasónico gama

Hola de nuevo comunidad de Instructables!Este instructable le mostrará cómo mejorar la precisión de un sensor de la gama ultrasónica. Se basa en el principio que el sonido se moverá a través del aire a diferentes velocidades dependiendo de la tempera
Piratería automotrices sensores ultrasónicos

Piratería automotrices sensores ultrasónicos

Este instructable le mostrará cómo hackear / reutilizar un común Bosch automotriz sensores ultrasónicos.  El sensor en este instructable es un sensor muy común que puede encontrarse en chatarrerías por todo el mundo.  La esperanza es que esta informa