Hola estoy trabado en un proyecto en el cual quiero controlar servos sg90 a traves de midi los servos leerán una partitura en cubase pero nol logro que se muevan. probé con ejemplos como el blink led y responde, pero cuando comienza a correr la partitura midi los motores no se mueven.
el codigo de ejemplo solo está para que se mueva un solo servo cuando en la partitura se lee la nota do (60).Muchas Gracias.
#include <Servo.h>
MIDI_CREATE_DEFAULT_INSTANCE ();
Servo myservo;
Servo myservo2;
Servo myservo3;
Servo myservo4;
Servo myservo5;
Servo myservo6;
int pos = 0; // una posicion de inicializacion
int led = 13;
void BlinkLed(byte num) { // blink led se usa para probar el funcionamiento del midi descomentar para utilizar
for (byte i = 0; i < num; i++) {
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(100);
}
}
/*
void tocarNotaOff(Servo motor) { // funcion de noteOff para el movimiento del servo
motor.write(10);
delay(50);
}
void tocarNotaON(Servo motor) { // funcion de note on
motor.write(37);
delay(50);
}
*/
void setup() {
pinMode(led, OUTPUT);
MIDI.begin(); // inicializa midi con opciones por defecto, canal 1
myservo.attach(2); // do nota 60
myservo.write(pos);
myservo2.attach(5);//la 69
myservo3.attach(6);// re 74
myservo4.attach(9); //mi 76
myservo5.attach(10);//sol 79
//Serial.begin(32000);
}
void loop() {
/*
myservo.write(100); //POSICION DEL SERVO
delay(200);
myservo.write(100); //POSICION DEL SERVO
delay(200);
*/
if (MIDI.read()) {
switch (MIDI.getType()) { // se captura el tipo de mensaje
case midi::NoteOn: // si es note on
BlinkLed(MIDI.getData1());
digitalWrite(led, HIGH); //
switch (MIDI.getData1()) {
case 60: // pregunto por la nota y llamo a la funcion que mueve el servo pasando por argunto el nombre del servo
myservo.write(100); //POSICION DEL SERVO
delay(100); // TIEMPO QUE DURA LA NOTA
myservo.write(0);
delay(100);
break;
//OTRA NOTA . PREGUNTAR NUMERO DE NOTA Y CAMBIAR EL SERVO
}
case midi::NoteOff:
switch (MIDI.getData1()) {
case 60:
myservo.write(0);
delay(100);
break;
case 69:
break;
}
}
}
}