Hallo zusammen,
ich versuche grade per Arduino ein Midi-Signal zum synchronisieren auszulesen.

Hierbei kommt es mir nur auf die BPM, start/stop und das Synchronisieren an. Notenwerte und sonstige Controllerwerte können ignoriert werden.


Ich nutze Softserial um den Midiport abzufragen, da ich meinen Arduino Nano per USB zum debuggen/programmieren am Rechner habe.
Sollte der Sketch fertig sein, kann ich auch gerne auf den Hardware-RX-Pin umsatteln (kann per Jumper zwischen D0 und D4 wählen).

Code:
#include <MIDI.h>
#include <SoftwareSerial.h>

SoftwareSerial softSerial(4,5); // pin 4 = optocoupler from midi // pin 5 NC
MIDI_CREATE_INSTANCE(SoftwareSerial, softSerial, midiB);

int counter = 0;
int tempZahl = 0;
unsigned long lastMidiMsg = 0;
unsigned long newMidiMsg = 0;
unsigned long midiPeriod = 0;

float teilBar = 0;


void setup()
{
    // Initiate MIDI communications, listen to all channels
    midiB.begin(MIDI_CHANNEL_OMNI);
    // initiate serial connection
    Serial.begin(115200);

    midiB.read();
    //Serial.print(++counter); Serial.print(millis());
    lastMidiMsg = newMidiMsg;
    newMidiMsg = millis();
    midiPeriod = (newMidiMsg - lastMidiMsg);

    /*
    if (midiB.getType() == 250){
        Serial.println(midiB.getType());
        Serial.println(midiB.getData1());
        Serial.println(midiB.getData2());
        Serial.println(midiB.getChannel());
        Serial.println(" - - - ");
    }
    */

}

void loop(){
    if (midiB.read())
        tempZahl = midiB.getType();
        
        if (tempZahl == 250){
                Serial.println("Midi start");
        }
        
        if (tempZahl == 252){
                Serial.println("Midi stop");
        }
}
Mit dem Code bekomme ich scheinbar zuverlässig ein "Midi start" ausgespuckt.
Der Stop-Befehl wiederholt sich scheinbar immer wieder, während mein Synthie pausiert ist.

Die Ausgabe von 1x Star und 1x stop drücken sieht wie folgt aus:
Code:
Midi start
Midi stop
Midi stop
Midi stop
Midi stop
Midi stop
Midi stop
Midi stop
Midi stop
Midi stop
Midi stop
Midi stop
Midi stop
Midi stop
Midi stop
Midi stop
Midi stop
Midi stop
Ich verstehe noch nicht, warum hier mehrfach stop gesendet wird...Auch wenn mein ROland JD Xi eigentlich weiter läuft, wird ein Stop gesendet.

ber viel wichtiger:
Gesucht: Midi BPM
...damit ich das als ClickSync für einen Pocket Operator ausgeben kann (ClickSync = 2,5ms Impulse in doppelter BPM-Rate bei 1V, siehe: https://p0k3t0.wordpress.com/2017/10...rator-signals/).

Ich muss also nun irgendwie die BPM ermitteln und dann ein Click-Sync-Signal für meinen Pocket Operator erstellen.
Allerdings komm ich hier grade nicht weiter.

- - - Aktualisiert - - -

Okay, die BPM bekomme ich nun dank des Quellcodes dieses Beispiels zuverlässig ausgelesen:
https://www.youtube.com/watch?v=Su6NhtEoipg

Ich hau mich in die Falle und nacher muss ich noch das ClickSync-Signal berechnen und zum Midi synchronisieren.
Das sollte aber hoffentlich nicht mehr all zu schwer sein