Hallo, und zwar experimentiere ich momentan ein wenig mit einem Arduino und ich bin momentan auf den Trichter gekommen mir daten Per MIDI an meinen Rechner zu schicken... Nun möchte ich einen Analogwert Per Midi senden, das aber nur sobald dieser Sich ändert. Hat jemand eine idee wie das funktionieren könnte?! Habe es bis jetzt versucht mit EEprom zu beschreiben nur gelingt mir das Irgendwie nicht.... Danke schonmal für die Hilfe
Pierre Neumerkel schrieb: > Nun möchte ich einen Analogwert Per Midi senden, Da unsere Welt immer digitaler wird, musst Du den Analogwert wohl als erstes mit einem AD-Wandler digitalisieren. Gruss Harald
Nunja, meinen Wert bekomme ich ja schon gesendet... Sehe ihn auch auf dem Rechner... Nur ist es jetzt eben so das er den Wert sendet wenn ich Taste XY betätige... und nicht bei Wertänderung....
Mal eine vorsichtige Frage: Kann es sein, daß du hier irgendwas durcheinanderbringst? Was haben ein Analogwert, MIDI und ein EEPROM miteinander zu tun? Erläutere doch mal dein Anliegen genauer...
Nunja, ich möchte mittels eines Potis eine Lichtsteuerung (software) beeinflussen. Dort kann ich zum beispiel den Master des Lichtes zwischen 0 und 127 bewegen. Mit dem Arduino nehme ich meinen Analogwert also von 0 bis 1023 oder was der Ausspuckt, den Teile ich durch 8, somit komme ich auf meine Auflösung von 127. Diesen Wert sende ich dann über Midi an meinen PC welcher das signal über einen USB/MIDI adapter erkennt und auch umsetzt, heißt das ich mit dem Poti schon meinen Softwarefader bewegen kann. Problem daran ist eben das ich die ganze zeit Traffic habe, den ich eigentlich nicht möchte. Sondern soll der Arduino nur ein MIDI signal (0-127) senden, wenn sich der zuletzt gesendete wert verändert hat....
Einfach den neu eingelesenen Wert mit dem alten vergleichen und wenn diese unterschiedlich sind den neuen Wert senden und als alten Wert speichern. Oder verstehe ich da was nicht, dass das so kompliziert ist?
Hallo, ich hoffe ich habe dein Problem jetzt richtig verstanden... speicher deinen "alten Wert" doch einfach in einer Zwischenvariablen ab und Vergleiche dann per IF ob sich dein neuer Wert vom vorherhigen Wert unterscheidet. Die Übertragung startest du dann einfach nur in dem Fall, dass sich die Werte unterscheiden.
Du meinst aber nicht sowas triviales wie
1 | for(;;) { |
2 | wert = readwert(); |
3 | if ( wert != alterwert ) { |
4 | midi_send(wert); |
5 | alterwert = wert; |
6 | }
|
7 | }
|
So wie DU es auch machen würdest : 1. Du ließt einen Wert z.B. auf dem Bildschirm 2. Du merkst dir den Wert 3. Du ließt einen Wert auf dem Bildschirm 4. Wenn der Wert der gleiche ist wie der gemerkte Wert weiter bei 3 5. Du schreist : "der Wert hat sich geändert !" 6. weiter bei 1
Nur wie speicher ich den Alten wert? Ich glaube langsam das ich einfach nur in alle erdenklichen richtungen denke nur nicht in die richtige. AnalogValue= analogRead(poti); Wert = AnalogValue /8,0; if (Vergleichswert != Wert) { noteOn(0x90, Wert, 0x90); Wert = Vergleichswert;
Pierre Neumerkel schrieb: > Nur wie speicher ich den Alten wert? Das ist jetzt eine ernstgemeinte Frage? Wahrscheinlich ja: Pierre Neumerkel schrieb: > Habe es bis jetzt versucht mit EEprom zu beschreiben nur gelingt mir das > Irgendwie nicht.... > Ich glaube langsam das ich einfach nur in alle erdenklichen richtungen > denke nur nicht in die richtige. Das einzig richtige ist, dir ein C-Buch zu besorgen. > > AnalogValue= analogRead(poti); > Wert = AnalogValue /8,0; > > > if (Vergleichswert != Wert) { > > > noteOn(0x90, Wert, 0x90); > > Wert = Vergleichswert; Wert und Vergleichswert sind Variablen. Sofern sie global sind, bleibt der Inhalt erhalten, bis er überschrieben wird. Oder du dem Controller den Saft abdrehst. Aber dann interessiert das keinen mehr. mfg.
:
Bearbeitet durch User
Pierre Neumerkel schrieb: > Nur wie speicher ich den Alten wert? > > Ich glaube langsam das ich einfach nur in alle erdenklichen richtungen > denke nur nicht in die richtige. > > AnalogValue= analogRead(poti); > Wert = AnalogValue /8,0; > > if (Vergleichswert != Wert) { > > noteOn(0x90, Wert, 0x90); > > Wert = Vergleichswert; ^--- Vergleichswert = Wert; } //und die Schließende Klammer nicht vergessen! Bis auf die letzte Zeile stimmt das in etwa... Lies mal den Beitrag von Moritz.
Pierre Neumerkel schrieb: > AnalogValue= analogRead(poti); > Wert = AnalogValue /8,0; > > if (Vergleichswert != Wert) { > > noteOn(0x90, Wert, 0x90); > > Wert = Vergleichswert;
1 | neuer_wert = analogRead(poti) / 8; |
2 | if(neuer_wert != alter_wert) |
3 | {
|
4 | noteOn(0x90, Wert, 0x90); |
5 | alter_wert = neuer_wert; |
6 | }
|
Einfach mal drüber nachdenken und den Variablen vernünftige Namen geben. Du wirfst Wert und Vergleichswert durcheinander.
Ich bin davon ausgegangen das sich die beiden werte wenn ich wie marcel geschrieben hat alter_wert = neuer_wert; gleichzeitig ändern und nichts passiert, dies ist aber ja nicht der fall. Dankeschön!
Pierre Neumerkel schrieb: > alter_wert = neuer_wert; > gleichzeitig ändern und nichts passiert, dies ist aber ja nicht der > fall. Dankeschön! Das "=" Zeichen bedeutet in der Mathematik und innerhalb eines Programms etwas völlig anderes!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.