hola,necesitaria ayuda de alguien con conocimiento de porque el potenciometro tiembla en algunas zonas del recorridos un controlador midi que maneja un plugin en logic x.el controlador es simplemente un potencio metro y un botón para activar y desactivar.
al botón le tuve que poner una resistencia de 10k punteando la señal y la corriente porque hacia como si se activara y desactivara solo, cosa que funciona muy bien, pero con el potencio metro no hay funcionado.
os paso el código por si hay algún fallo.muchas gracias.
* Prueba MIDI
* ===========
* Envía las pulsaciones del botón como control de encendido o apagado para
* algún módulo MIDI del programa al que esté conectado.
* El potenciómetro actúa como controlador analógico de volumen, pitch o a lo
* que se conecte en el sintetizador MIDI.
* Para simular un puerto MIDI en el ordenador conectado al USB de Arduino, uso [ttymidi](http://www.varal.org/ttymidi/)
* ```sh
* ./ttymidi -s /dev/ttyACM0 -v [-n my_MIDI_shit]
* ```
* Otro en modo gráfico para lo mismo: [Hairless MIDI<->Serial Bridge]http://projectgus.github.io/hairless-midiserial/
*
* [Documentación de la librería MIDI](http://fortyseveneffects.github.io/arduino_midi_library/a00041.html)
*/
#include <MIDI.h>
// Constantes
const int button_pin = 2; // Pin digital donde está el botón
const int pot_pin1 = A0; // Pin analógico del primer potenciómetro
const int BUTTON_CONTROLLER = 0; // Controlador MIDI sobre el que actuará el botón
const int BUTTON_CHANNEL = 1; // Canal MIDI sobre el que actuará el botón
const int POT1_CONTROLLER = 1; // Controlador MIDI asociado al potenciómetro
const int POT1_CHANNEL = 2; // Canal MIDI sobre el que actúa el potenciómetro
// Globales
int button = 0; // Inicializado a OFF
/* Para no saturar el MIDI enviando constantemente los valores, solo se enviará un comando MIDI
* si efectivamente ha cambiado el valor de los potenciómetros o se ha pulsado el botón. Para eso,
* guardamos el último valos enviado en las variables globales last_button y last_pot1. Si el valor
* leído en cada iteración ha cambiado respecto al que tenemos guardado, actualizamos el valor guardado
* y enviamos el nuevo.
*/
int last_button = 0; // Último valor enviado del botón
int last_pot1 = 0; // Último valor enviado del pot.
/* Crea y asocia la interfaz MIDI con la salida Serial1 (TX) de los pines de salida de Arduino
* bajo el nombre `puerto_midi`:
*/
MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, puerto_midi);
void setup() {
// Inicialización del led integrado:
pinMode(LED_BUILTIN, OUTPUT);
// Inicialización del puerto MIDI:
puerto_midi.begin(MIDI_CHANNEL_OMNI); // Inicializa el puerto MIDI y escucha en todos los canales.
}
void loop() {
// Bucle principal:
/* Leo los valores */
int val_button = digitalRead(button_pin);
int val_pot1 = analogRead(pot_pin1);
val_pot1 /= 8; // Convierto el valor leído de [0..1024) a [0..128)
/* Actualizo las variables */
last_button = button;
if (val_button == HIGH){
button = 1;
}else{
button = 0;
}
if (last_button != button){
/* Y finalmente mando la señal por el puerto serie siguiendo el protocolo MIDI*/
puerto_midi.sendControlChange(BUTTON_CONTROLLER, button, BUTTON_CHANNEL);
}
// Uso el LED integrado para indicar que he enviado alguna señal por MIDI:
digitalWrite(LED_BUILTIN,
(last_button != button or last_pot1 != val_pot1) ? HIGH : LOW);
if (val_pot1 != last_pot1){
last_pot1 = val_pot1;
/* Y finalmente mando la señal por el puerto serie siguiendo el protocolo MIDI*/
puerto_midi.sendControlChange(POT1_CONTROLLER, val_pot1, POT1_CHANNEL);
}
}
