Bautagebuch: Midifizierung Orgelpedal

  • Seite 2 von 2
05.04.2024 23:18
#16
avatar

Ja der flush ist wirklich noch drinnen. In dem Kontext ist das aber nicht so relevant. Mit zwei Beinen wirst du es nicht hinbekommen zu viele Ereignisse zu generieren. Auf einem Manual ist das viel problematischer. Aber danke für den Hinweis. Ich werde es entfernen.

Der Delay ist recht willkürlich gewählt, hat sich bei mir vom Gefühl bewährt. Das simuliert eine gewisse Trägheit. Ich hatte es auch einmal mit einem zufälligen Delay. Erstaunlich wie man Millisekunden dich spüren kann beim Spielen.

Naja und das nächste Projekt ist die Überarbeitung des Oberteil, da dieser nicht mehr zum Pedal passt... Ob ich den alten anpasse oder etwas simples neu baue weiß ich noch nicht... Aber das ist eben die unendliche Geschichte...


 Antworten

 Beitrag melden
06.04.2024 09:55
#17
So

Der Delay hält dir aber das komplette Programm an. Wenn du z.B. Doppelpedal spielst erklingen die Töne im Abstand von 100ms, weil die Verarbeitung des nächsten Tastendrucks angehalten wird. Je nachdem, was der Arduino noch so machen kann, ist er für die Zeit des Delays gelähmt. Ich habe für etwas vergleichbares daher mit millis() gearbeitet. Man setzt also bei Tastendruck einen Zeitstempel und überprüft anschließend im Loop wann die Bedingungen (Zeitverzögerung) stimmen. Dann erst wird im Loop die NoteOn-Funktion ausgelöst. Das habe ich sowohl für die Simulation eines "pneumatischen" Schwellers, als auch einer elektropneumatischen Register-/Setzeranlage.


 Antworten

 Beitrag melden
06.04.2024 10:43
#18
avatar

Hattest du den Code irgendwann man hochgeladen? Ich würde mir deine Lösung gerne mal anschauen wie du es gemacht hast.


 Antworten

 Beitrag melden
06.04.2024 11:05
#19
So

Hier mein momentan eingesetztes Setting. Der Code ist in Teilen alt, würde ich heute anders machen, wenn ich von Grund auf neu anfangen würde. Aber solange es tut, gab es keinen Grund, es zu ändern. Ignorier bitte den Midi-Flush.

Da es bei mir nur zwei Fuß-/Daumenpistons (sind parallel geschaltet) betrifft, habe ich es nicht generisch gelöst. Willst du das für die gesamte Klaviatur, wäre natürlich ein anderer Code schöner und übersichtlicher. Wobei mir da die Original-Verzögerung der Sample Sets reicht. Bei der Spieltraktur wollte ich mir keine Pneumatik installieren

Diese Art der Implementierung habe ich gemacht, weil diese Fußpistons über den Arduino laufen, auf dem auch die Pedaltasten hängen. Mir war klar, dass es sich stört, habe es aber trotzdem mal mit Delay probiert. Und da war es schon massiv. Gleichzeitiges Pedalspiel und mal schnell Setzer weiterdrücken ging nicht. Gut, ich habe da auch mit 150ms, und dann 175ms gearbeitet, aber das ist von deinen 100ms auch nicht so weit weg. Das merkt man schon.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
 
#include "MIDIUSB.h"
 

int delaypiston = 175; //Verzögerung in Millisekunden, die die Fußpistons haben sollen
int currentmillisPistonOn = 0;
int midikey88on = 0;
int midikey89on = 0;
 

 
/** Funktionen für MIDI ***************************************************/
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);
}
 
bool MidiButton(int pin, byte midisig, bool keyAlt) { //Button-Pin, Noten-Nummer
bool key = digitalRead(pin);
if (midisig == 88) {
if (keyAlt == HIGH && key == LOW) {
keyAlt = key;
midikey88on = 1;
currentmillisPistonOn = millis();
return keyAlt;
}
if (keyAlt == LOW && key == HIGH) {
keyAlt = key;
return keyAlt;
}
}
if (midisig == 89) {
if (keyAlt == HIGH && key == LOW) {
keyAlt = key;
midikey89on = 1;
currentmillisPistonOn = millis();
return keyAlt;
}
if (keyAlt == LOW && key == HIGH) {
keyAlt = key;
return keyAlt;
}
}
 
else {
if (keyAlt == HIGH && key == LOW) {
noteOn(0, midisig, 64);
MidiUSB.flush();
keyAlt = key;
delay(10);
return keyAlt;
}
 
if (keyAlt == LOW && key == HIGH) {
noteOff(0, midisig, 64);
MidiUSB.flush();
keyAlt = key;
delay(10);
return keyAlt;
}
}
}
 
void sendControlChange(byte channel, byte controller, byte value) {
midiEventPacket_t event = { 0x0B, 0xB0 | channel, controller, value };
MidiUSB.sendMIDI(event);
}
 
/****************************************************************************/
 

void setup() {
Serial.begin(115200); //Muss ggf. auskommentiert werden, wenn 0 und 1 belegt
pinMode(A0, INPUT_PULLUP);
pinMode(A1, INPUT_PULLUP);
 
}
 
void loop() {
 
//####Sequenzer vor und zurück############
key88Alt = MidiButton(A0, 88, key88Alt);
key89Alt = MidiButton(A1, 89, key89Alt);
 
if (millis() - currentmillisPistonOn >= delaypiston) { //diese Verzögerung imitiert eine elektropneumatische Setzeranlage, ohne das Programm via delay zu stoppen
if (midikey88on == 1) {
noteOn(0, 88, 64);
MidiUSB.flush();
midikey88on = 0;
delay(10);
noteOff(0, 88, 64);
MidiUSB.flush();
}
if (midikey89on == 1) {
noteOn(0, 89, 64);
MidiUSB.flush();
midikey89on = 0;
delay(10);
noteOff(0, 89, 64);
MidiUSB.flush();
}
}
}
 

 


 Antworten

 Beitrag melden
06.04.2024 11:37
#20
avatar

Danke, das ist eine gute Lösung.

Zitat von Soubasse im Beitrag #19
Hier mein momentan eingesetztes Setting. Der Code ist in Teilen alt, würde ich heute anders machen, wenn ich von Grund auf neu anfangen würde. Aber solange es tut, gab es keinen Grund, es zu ändern.

Never Change a running System kennen wir doch alle :) Der Wille etwas zu verbessern ist da, aber die Angst etwas, dass funktioniert kaputt zu machen ist größer :)

Ich experimentiere gerade mit einer Fassung, die Bounce2 nutzt. Einfach einen Button für jede Taste erstellen, dann im Loop die Tasten durchgehen. Gab es eine Änderung, dann bei Gedrückt NoteOn bei losgelassen NoteOFF. Der Code wird dadurch halbiert und man muss sich um nichts wie entprellen kümmern. Nachteil ist eben, wenn in der Bibliothek etwas fehlerhaft ist, dann ist man aufgeschmissen und natürlich auch abhängig von dieser.


 Antworten

 Beitrag melden
07.04.2024 13:00 (zuletzt bearbeitet: 07.04.2024 13:03)
#21
avatar

Nun ist es ja so gekommen, wie es kommen musste. Man baut einmal alles um und stolpert über ein Problem, welches die ganze Zeit da war, aber nicht aufgefallen ist.

Da ich inzwischen Sweelinq nutze, habe ich meine 40 Schalter einmal mit Sweelinq verbunden um endlich wieder ohne Display spielen zu können. Dabei musste ich aber feststellen dass einige Register sich ständige aktiviert und deaktiviert haben. Also habe ich mir die Midi Ausgabe einmal angesehen und was Sweelinq tut ist korrekt, was der Pi Pico tut hingegen nicht. Das Programm war augenscheinlich okay und dieses Zucken trat nur bei bestimmten Kombinationen auf.

Dann ist mir ein kleines Detail aufgefallen in meiner Schaltung. Ich nutze als Grundlage eine alte Platine eines Manuals, da hier bereits alle Dioden und so weiter enthalten waren und ich nur noch meine Kabel anlöten musste. Ich hatte das ganze fälschlich als 8x8 Matrix interpretiert, angeschlossen und programmiert. Es handelt sich jedoch um eine 8x5 Matrix. Die beiden anderen Pins sind zwar auch mit Schaltern verbunden, haben aber eine andere Funktion dir von dem Gerät aus dem die Platine kommt genutzt wird. Das lief jetzt auf einem Arduino so zwei Jahre ohne Probleme, auf meinem Pi Pico mit GrandOrgue ist es nicht aufgefallen (vermutlich weil GO es nicht so schnell umgesetzt hat)... Naja irgendwann fällt einem eben alles mal auf die Füße. Das war auch ein guter Zeitpunkt einmal die Steuerung neu zu schreiben :)

Warum das Problem auf meinem Arduino nicht aufgefallen ist, kann ich mir aber tatsächlich nicht erklären. Vermutlich weil ich die Matrix in einer Schleife so abgefragt habe, dass es keine Auswirkungen hatte. Die Keypad Funktion von Adafruit zum abfragen einer Matrix schein diese wohl anders abzufragen, so dass in jedem Durchgang zwei widersprüchliche Zustände ermittelt wurden und jedes Event dann gesondert gesendet wurde...

Bild entfernt (keine Rechte)


 Antworten

 Beitrag melden
20.09.2024 16:22
#22
So

Bei mir kündigt sich gerade auch ein Pedal-Midifizierungs-Projekt an. Meine bisherige Pedal-Midifizierung auf Basis der Alttechnik beginnt auszusteigen und ich will das auch über Reed-Schalter machen.

Die spannende Frage hinsichtlich Prellverhalten ist, ob lieber NO oder NC. Wie sind da deine Erfahrungen mit deinen (mutmaßlich) NO Schaltern?

Bei der Recherche habe ich auch überlegt, ob fertigen Bausatz kaufen oder selber machen. Nur: die meisten fertigen Bausätze haben zwar eine 8x8 basierte 8x4 Matrix, aber keine Dioden. Entweder ist das Ghosting-Problem dann woanders gelöst oder diese Anbieter gehen davon aus, dass man brav höchstens 2 Pedaltasten gleichzeitig drückt. Auch in dem Pausch-Link von dir ganz oben kann ich auf keinem Bild Dioden erkennen.

Die Idee von Pausch, Kunststoff- statt Glas-Reed-Schalter zu nehmen, finde ich ganz elegant. Dass hier schnell mal was zu Bruch gehen kann, musste auch Tom Meyer feststellen.


 Antworten

 Beitrag melden
20.09.2024 16:35
#23
avatar

Zitat von Soubasse im Beitrag #22
Die spannende Frage hinsichtlich Prellverhalten ist, ob lieber NO oder NC. Wie sind da deine Erfahrungen mit deinen (mutmaßlich) NO Schaltern?


Sollte eigentlich eher eine untergeordnete Rolle spielen. Meine persönliche Erfahrung ist aber, dass beim öffnen nichts prellt, erst beim schließen. Meiner Meinung nach ist es nun unerheblich, da beide Vorgänge je gleich oft stattfinden.

Ich habe bei meinem Pedal NO, also normal geöffnet. Gleichzeitig befindet sich der Magnet bei der nicht gedrückten Taste am Reed und schließt diesen. Beim drücken der Taste entfernt sich der Magnet und öffnet diesen.

Alle denkbaren Kombinationen haben aber ihre Vorteile und Nachteile. Betreffend prellen kann man ja wunderbar entprellen, wobei ich tatsächlich nicht entprelle. Ich habe im Code recht hohe Delays und daher ist genügend Zeit bis zu nächsten Abfrage. Wer natürlich in Höchstgeschwindigkeit komplexe Pedal Solos spielen will, der sollte das Delay vielleicht niedriger ansetzen.

Achtung unqualifizierte Meinung eines Laien:
Meiner Erfahrung nach ist das Prellen bei Reed Kontakten eigentlich kein so großes Thema. Zumindest sind mir da noch keine Probleme aufgefallen. Normale Schalter sind da sehr viel problematischer. Bei Reeds ist diese Grenzbereich zwischen öffnen und schließen eigentlich die einzige Problematik. Da kann sich ein Schalter auch gerne mal spontan dutzende Male umentscheiden. Aber so was kann man mit der Software auch sehr schwer lösen. Da wären Hall Sensoren die beste Wahl, da man auch die Stärke des Magnetfeldes ermitteln kann um dann im Grenzbereich manuell einzugreifen mit seinem Programm. Bei einem Reed kann man eben nicht erkennen ob er nun zuckt weil er prellt, oder weil der Magnet eine denkbar ungünstige Position gerade hat.


 Antworten

 Beitrag melden
20.09.2024 16:52
#24
So

Na dann hast du dir mit einem NO-Schalter aber eine NC-Lösung gebaut 😅

Was muss man deiner Meinung nach beachten beim Magnet-Kauf? Also hinsichtlich Größe, Stärke, Maße etc.? Ich wollte gern runde nehmen und sie entweder in der Taste versenken (bisschen anbohren) oder aber welche mit Loch und die draußen draufschrauben. Muss nochmal gucken, welche Entfernungen zu überbrücken sind.

Bei mir werden die Schalter unter die Tasten müssen, sodass sich der Magnet von oben nähert, wenn die Taste gedrückt wird.


 Antworten

 Beitrag melden
20.09.2024 17:00
#25
avatar

Zitat von Soubasse im Beitrag #24
Was muss man deiner Meinung nach beachten beim Magnet-Kauf? Also hinsichtlich Größe, Stärke, Maße etc.? Ich wollte gern runde nehmen und sie entweder in der Taste versenken (bisschen anbohren) oder aber welche mit Loch und die draußen draufschrauben. Muss nochmal gucken, welche Entfernungen zu überbrücken sind.


Da bin ich der falsche Ansprechpartner. Ich habe nach gut Glück gekauft und Glück gehabt... Du musst daran denken, dass die Position der Magnete wichtig ist, da die Reeds nur auf bestimmte Magnetfelder wie gewünscht reagieren und da macht es eben den Unterschied wie man diese montieren kann. Die Befestigung ist aber allgemein doof. Magnete lassen sich schlecht kleben. Die Idee von dir mit einer Bohrung ist gut und setzt dann runde Magnete voraus. Aber du musst diese eben auch irgendwie im Loch befestigen. Da würde ich vielleicht Kleben und das Bohrloch mit z.B Kunststoff abdecken. Der Kleber hält meiner Erfahrung nach nicht sehr lange bei Erschütterungen.

Würde ich heute noch einmal mein Pedal midifizieren, ich würde Magnete mit einem Loch in der Mitte wählen und verschrauben. Auch wenn diese teurer sind, es macht keinen Spaß jeden Monat einen verlorenen Magneten zu befestigen....


 Antworten

 Beitrag melden
Bereits Mitglied?
Jetzt anmelden!
Mitglied werden?
Jetzt registrieren!