Forum: Mikrocontroller und Digitale Elektronik Analogwertänderung senden


von Pierre N. (littleangus)


Lesenswert?

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

von Harald W. (wilhelms)


Lesenswert?

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

von Pierre N. (littleangus)


Lesenswert?

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....

von ich (Gast)


Lesenswert?

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...

von Pierre N. (littleangus)


Lesenswert?

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....

von Marcel (Gast)


Lesenswert?

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?

von Thomas (Gast)


Lesenswert?

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.

von Moritz A. (moritz_a)


Lesenswert?

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
}

von Uwe (Gast)


Lesenswert?

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

von Pierre N. (littleangus)


Lesenswert?

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;

von Thomas E. (thomase)


Lesenswert?

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
von ich (Gast)


Lesenswert?

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.

von Marcel (Gast)


Lesenswert?

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.

von Pierre N. (littleangus)


Lesenswert?

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!

von Harald W. (wilhelms)


Lesenswert?

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
Noch kein Account? Hier anmelden.