midi read, if header is, than do that

Arduino specifieke Software
Berichten: 1
Geregistreerd: 20 Jan 2022, 17:18

midi read, if header is, than do that

Berichtdoor djdeeno31 » 20 Jan 2022, 17:21

Hallo, ik heb een vraag waar ik niet uit kom, wellicht is het een kleine aanpassing. Ik eb MIDIUSB en de functie lezen aan proberen en lukt goed. Als i k vanuit de PC een midi opdracht geef zie ik netjes 9-90-0-F verschijnen, nu wil ik daar een event aan hangen, hoe doe ik dit, ALS rx.header 9-90-0-F is doe dan digitalWrite(LED_BUILTIN, HIGH) maar als rx.header 8-80-3-F is doen dan digitalWrite(LED_BUILTIN, LOW). an iemand mij daar in helpen hoe ik dit neer zet? Alvast bedankt

Afbeelding

Code: Alles selecteren
#include "MIDIUSB.h"

void noteOn(byte channel, byte pitch, byte velocity) {
  midiEventPacket_t noteOn = {0x09, 0x90 | channel, pitch, velocity};
  MidiUSB.sendMIDI(noteOn);
}

void noteOff(byte channel, byte pitch, byte velocity) {
  midiEventPacket_t noteOff = {0x08, 0x80 | channel, pitch, velocity};
  MidiUSB.sendMIDI(noteOff);
}

void setup() {
  Serial.begin(115200);
}

// First parameter is the event type (0x0B = control change).
// Second parameter is the event type, combined with the channel.
// Third parameter is the control number number (0-119).
// Fourth parameter is the control value (0-127).

void controlChange(byte channel, byte control, byte value) {
  midiEventPacket_t event = {0x0B, 0xB0 | channel, control, value};
  MidiUSB.sendMIDI(event);
}

void loop() {
  midiEventPacket_t rx;
  do {
    rx = MidiUSB.read();
    if (rx.header != 0) {
      Serial.print("Received: ");
      Serial.print(rx.header, HEX);
      Serial.print("-");
      Serial.print(rx.byte1, HEX);
      Serial.print("-");
      Serial.print(rx.byte2, HEX);
      Serial.print("-");
      Serial.println(rx.byte3, HEX);
    }
  } while (rx.header != 0);
  if (rx.header= 9-90-0-F ){
      digitalWrite(LED_BUILTIN, HIGH);
      }
        if (rx.header= 8-80-3-F ){
      digitalWrite(LED_BUILTIN, LOW);
      }
}

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: midi read, if header is, than do that

Berichtdoor shooter » 21 Jan 2022, 09:08

je stuurt een mix van hex en ascii er naar toe, als je wil ontvangen zul je dus elk karakter los van elkaar moeten doen en dan kijken of de ontvangen spul 9,90,0,F is als byte en kijk ook naar aanhalingstekens etc.
paul deelen
shooter@home.nl

Berichten: 68
Geregistreerd: 04 Sep 2021, 08:31

Re: midi read, if header is, than do that

Berichtdoor RobGood » 24 Jan 2022, 09:14

DJ, MIDI daar ben ik een tijdje niet mee bezig geweest. Oorspronkelijk een serieel protocol uit 1980 op een DIN5 plug. Nu wordt het protocol versleuteld en verstuurd via een USB, Com poort. Blijkbaar zijn daar libraries voor en ook veel muziekinstrumenten hebben een USB ipv. Een normale MiDI bv. Veel toetsen van Yamaha. Maar het blijft wel gewoon MIDI dus channel en system messages. En de hele rambam van toen.
Ik vermoed dat je met een specifieke MIDI message leds wil sturen?
De library werkt. De message moet je uitlezen, en daarna uitvoeren. Makkelijkste met switch case functies bv.

Switch (1eByte){
case channel message
Ga naar functie channel message, daar note nummer, welke toets en velocity of control change

Case system
Ga naar functie systedus timing metronoom start/stop of system exclusief
}

Enz enz succes Rob

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 20 gasten