Como puedo hacer mi controlador midi en arduino uno

Cómo le pongo un sensor de aluminio `

#include <Keypad.h> // Cargarmos libreria "Keypad".

#include <MIDI.h>   // Cargarmos libreria "MIDI Library".

MIDI_CREATE_DEFAULT_INSTANCE();

const byte ROWS = 6; //base 6 Filas (Do,Fa#)(Do#,Sol)(Re,Sol#)(Re#,La)(Mi,La#)(Fa,Si)
const byte COLS = 11; //x 5 columnas (Octava_1a)(Octava_1b)(Octava_2a)(Octava_2b)(Octava_3a)

byte keys[ROWS][COLS];

byte rowPins[ROWS] = {14, 15, 16, 17, 18, 19}; //A0, A1, A2, A3, A4, A5
byte colPins[COLS] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; //Un Pin por cada 6 tonos

byte tecla_presionada;

int nota = 36;// nota inicial

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

String msg = "";

void setup() {
    MIDI.begin(); //iniciamos transmicion Midi.
    Serial.begin(115200);

  //llena matriz de teclas con los valores de las notas
    for (int c=0; c<COLS; c++){
      for (int r=0; r<ROWS; r++){
        keys[r][c]=nota;
        nota++;
      }
    }   
}

void loop() {
  //busca teclas precionadas (hasta 10 al mismo tiempo)
    if (kpd.getKeys())
    {
        for (int i=0; i<LIST_MAX; i++)   // Se escanea toda la Matriz.
        {
            if ( kpd.key[i].stateChanged )   // Si cambia de estado una tecla.
            {
                switch (kpd.key[i].kstate) {  // Pulsado or Soltado
                    case PRESSED:
                    msg = " PRESSED.";
                    tecla_presionada=kpd.key[i].kchar;
                    MIDI.sendNoteOn(tecla_presionada, 80, 1);
                break;
                    case RELEASED:
                    msg = " RELEASED.";
                    tecla_presionada=kpd.key[i].kchar;
                    MIDI.sendNoteOff(tecla_presionada, 20, 1);
                }
            }
        }
    }
}  // End loop

¿Qué es un "sensor de aluminio"?

1 Like

O como puedo hacer un sensor con aluminio

¿Puedes poner un ejemplo del sensor al que te refieres?

1 Like

Esque quiero hacerlo como este vídeo que no usa ningún sensor
Video

Te dejo un tutorial que te sirve de guía

Ocupo alguien que me ayude a corregir los errores en mi código soy nuevo en arduino

// define los pines
const int pin_boton1 = 2;
const int pin_boton2 = 3;
const int pin_boton3 = 4;
const int pin_boton4 = 5;
const int pin_boton5 = 6;
const int pin_boton6 = 7;
const int pin_boton7 = 8;
const int pin_boton8 = 9;
const int pin_boton9 = 10;
const int pin_boton10 = 11;
const int pin_octava = 12;
const int pin_midi = 13;

// configura los pines
void setup() {
  pinMode(pin_boton1, INPUT);
  pinMode(pin_boton2, INPUT);
  pinMode(pin_boton3, INPUT);
  pinMode(pin_boton4, INPUT);
  pinMode(pin_boton5, INPUT);
  pinMode(pin_boton6, INPUT);
  pinMode(pin_boton7, INPUT);
  pinMode(pin_boton8, INPUT);
  pinMode(pin_boton9, INPUT);
  pinMode(pin_boton10, INPUT);
  pinMode(pin_octava, INPUT);
  pinMode(pin_midi, OUTPUT);
}

// el bucle principal
void loop() {
  // lee los botones
  int boton1 = digitalRead(pin_boton1);
  int boton2 = digitalRead(pin_boton2);
  int boton3 = digitalRead(pin_boton3);
  int boton4 = digitalRead(pin_boton4);
  int boton5 = digitalRead(pin_boton5);
  int boton6 = digitalRead(pin_boton6);
  int boton7 = digitalRead(pin_boton7);
  int boton8 = digitalRead(pin_boton8);
  int boton9 = digitalRead(pin_boton9);
  int boton10 = digitalRead(pin_boton10);
  int boton_octava = digitalRead(pin_octava);

  // sube la octava
  if (boton_octava == HIGH) {
    octava++;
  }

  // baja la octava
  if (boton_octava == LOW) {
    octava--;
  }

  // limita la octava a 8
  if (octava > 8) {
    octava = 8;
  }
  if (octava < 0) {
    octava = 0;
  }

  // envía la nota MIDI
  if (boton1 == HIGH) {
    sendNoteOn(pin_midi, 60 + octava * 12, 127);
  }
  if (boton2 == HIGH) {
    sendNoteOn(pin_midi, 61 + octava * 12, 127);
  }
  if (boton3 == HIGH) {
    sendNoteOn(pin_midi, 62 + octava * 12, 127);
  }
  if (boton4 == HIGH) {
    sendNoteOn(pin_midi, 63 + octava * 12, 127);
  }
  if (boton5 == HIGH) {
    sendNoteOn(pin_midi, 64 + octava * 12, 127);
  }
  if (boton6 == HIGH) {
    sendNoteOn(pin_midi, 65 + octava * 12, 127);
  }
  if (boton7 == HIGH) {
    sendNoteOn(pin_midi, 66 + octava * 12, 127);
  }
  if (boton8 == HIGH) {
    sendNoteOn(pin_midi, 67 + octava * 12, 127);
  }

Esto es necesario:

int octava; // Comienzo del código
.
.
.
} // Esto es necesario - fin de 'loop()'

// una función llamada sendNoteOn
void sendNoteOn(int note, int velocity, int channel) {
  Serial.println(note);
  Serial.println(velocity);
  Serial.println(channel);
}

https://www.pjrc.com/teensy/td_midi.html

Antes que nada, este tema debería estar junto al otro que tienes abierto, tendrías que pedir a los moderadores que lo unan.

Por otro lado
Esto no es correcto

  // sube la octava
  if (boton_octava == HIGH) {
    octava++;
  }

  // baja la octava
  if (boton_octava == LOW) {
    octava--;
  }

Un pulsador puede esta en solo dos estados, pulsado o no pulsado, por lo que corresponde con HIGH y LOW (o LOW y HIGH, según como se conecte)
Entonces, si pulsas el botón va a incrementar la octava (y lo va a hacer varias veces mientras lo mantengas pulsado) pero si no lo pulsas, continuamente va a decrementar la octava porque va a leer siempre LOW. ¿Se entiende?
No puedes usar un solo pulsador para hacer ambas cosas, vas a tener que agregar otro.

Además los pulsadores, por ser mecánicos, generan rebotes (está lleno de explicaciones aquí y en internet) tienes que agregar alguna rutina antirrebotes para no tener repeticiones de notas.
También ten en cuenta que el código corre muy rápido, seguramente más rápido que lo que tardamos en dejar de pulsar un botón, por lo que lo va a leer varias veces y, otra vez, puedes tener tener repeticiones de notas no deseadas.

Moderador:
Por favor, lee las Normas del foro y edita tu titulo de acuerdo al punto 5 de las normas.
Retira el "Alguien me ayuda" y deja algo que explique tu proyecto o consulta.
Mucho cuidado con el doble posteo.
Tienes muchas advertencias en tu historial del foro.
A esta altura estos posteos cruzados no debería ocurrir.
Por favor comunícate por privado.

Resumen

EsteTexto en cursiva texto estará oculto

Cómo le añado sensores capacitivos

#include <Keypad.h> // Cargarmos libreria "Keypad".

#include <MIDI.h>   // Cargarmos libreria "MIDI Library".

MIDI_CREATE_DEFAULT_INSTANCE();

const byte ROWS = 6; //base 6 Filas (Do,Fa#)(Do#,Sol)(Re,Sol#)(Re#,La)(Mi,La#)(Fa,Si)
const byte COLS = 11; //x 5 columnas (Octava_1a)(Octava_1b)(Octava_2a)(Octava_2b)(Octava_3a)

byte keys[ROWS][COLS];

byte rowPins[ROWS] = {14, 15, 16, 17, 18, 19}; //A0, A1, A2, A3, A4, A5
byte colPins[COLS] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; //Un Pin por cada 6 tonos

byte tecla_presionada;

int nota = 36;// nota inicial

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

String msg = "";

void setup() {
    MIDI.begin(); //iniciamos transmicion Midi.
    Serial.begin(115200);

  //llena matriz de teclas con los valores de las notas
    for (int c=0; c<COLS; c++){
      for (int r=0; r<ROWS; r++){
        keys[r][c]=nota;
        nota++;
      }
    }   
}

void loop() {
  //busca teclas precionadas (hasta 10 al mismo tiempo)
    if (kpd.getKeys())
    {
        for (int i=0; i<LIST_MAX; i++)   // Se escanea toda la Matriz.
        {
            if ( kpd.key[i].stateChanged )   // Si cambia de estado una tecla.
            {
                switch (kpd.key[i].kstate) {  // Pulsado or Soltado
                    case PRESSED:
                    msg = " PRESSED.";
                    tecla_presionada=kpd.key[i].kchar;
                    MIDI.sendNoteOn(tecla_presionada, 80, 1);
                break;
                    case RELEASED:
                    msg = " RELEASED.";
                    tecla_presionada=kpd.key[i].kchar;
                    MIDI.sendNoteOff(tecla_presionada, 20, 1);
                }
            }
        }
    }
}  // End loop

Te dejé un tutorial en el post #6, ¿Lo leíste?

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.