Piezo-Wert mappen für MIDI

Hi zusammen,

ich bin immer noch am Coden für mein Arduino edrum und auf ein neues kleines Problem gestoßen:

Die Sachlage ist ja die folgende:
Ein Piezo (der sich in einem Drum-Pad befindet) wird mehr oder weniger starkk angeschlagen.
mittels AnalogRead les ich den entsprechenden Wert aus.

Da es bei Midi nur die Anschlagsstärken 0 - 127 gibt, mappe ich den ausgelesenen Wert anschließend mittels

piezoWert=map(piezoHit, 0, 1023, 0, 127)

auf den entsprechenden MIDI-Wert um.

Nun möchte ich aber, dass das mapping nicht linear erfolgt sondern die mapping Kurve etwas "weicher", also weniger stark ansteigt, da mit diesem Standardmapping zu schnell laute Töne erzeugt werden.
Die Mapping-Kurve soll also etwas schwächer ansteigen.
Gibt es eine andere Mapping-Funktion, bei dem man ein paar "Zwischenstufen" definieren kann (ich weiß nicht Recht, wie ich mich ausdrücken soll).

Viele Grüße
Daniel

Gibt es eine andere Mapping-Funktion, bei dem man ein paar “Zwischenstufen” definieren kann (ich weiß nicht Recht, wie ich mich ausdrücken soll).

Sobald du sie schreibst (und genau weisst was du willst), gibt es sie.

Nach deiner angedeuteten Beschreibung könnte ein Quadrieren helfen:

byte piezoWert = (byte) ((unsigned long)piezoHit * piezoHit * 128 / (1024*1024));

Dein map war eigentlich sowieso “falsch”

Wenn das nicht das ist was du willst:
Am besten suchst du nicht nach einer komplizierten mathematischen Formel, sondern definierst eine Interpolationstabelle