Hallo zusammen,
ich bin gerade dabei mit dem Due Potiwerte abzufragen.
Der Stand gerade ist:
analogReadResolution(12); //im void setup()
...
potiWert[i] = analogRead(controllerPin[i]); // Werte zwischen 0 bis 4095 (due 12Bit)
...
controllerWert[i] = map (potiWert[i], 0, maxPotiWert, 0, 127); // mappen da, MIDI Controllerwert
Ich möchte also den Poti dafür verwenden um ControllerWerte (0-127) im Midi-Bereich zu verändern.
Die Abfrage funktioniert soweit. Alles 6 Potis können angezeigt werden.
Leider kommt es an machen Positionen zu Sprüngen, dann schwankt der Wert zwischen zwei Werten.
Da ich, wenn ein Poti bewegt wird, von der einen Anzeige (OLED) auf eine andere Anzeige umschalte.
benötige ich feste Werte zwischen 0-127, sonst kann ich nicht erkennen das der Poti nicht mehr bewegt wird.
Ich habe schon eine Abfrage drin, die erkennt ob der neue Wert vom Poti der gleiche ist oder nicht.
if (controllerWert[i] != controllerWertAlt[i])
{
...
controllerWertAlt[i] = controllerWert[i];
...
}
Hardwaretechnisch habe ich ein paar Kondensatoren, die bringen leider nicht den gewünschten Erfolg.
Habe softwaretechnisch verschiedenes versucht (wahrscheinlich alles blödsinn) und bin dann auf Hysterese gestoßen. Wie schaffe ich es eine Hysterese einzubauen? - Ich denke mal, das man den Potiwert (0-4095) durch(?) eine Hysterese schickt?
Hier nochmal ein Teil meines Codes, genau die Stelle wo die Potis abgefragt werden:
//
// ===================================================================== potis_abfragen
//
void potis_abfragen()
{
for (int i = 0; i<potiAnzahl; i++)
{
bit1 = bitRead(i, 0); // Werte von 0-7
bit2 = bitRead(i, 1);
bit3 = bitRead(i, 2);
//
digitalWrite(2, bit1); // Digitalausgänge einstellen
digitalWrite(3, bit2); // um 74HCT4051 umzuschalten
digitalWrite(4, bit3);
//
potiWert[i] = analogRead(controllerPin[i]); // Werte zwischen 0 bis 4095
//potiWert[i] >>=4; //Versuch die unteren Bits zu nullen, kein Erfolg
//potiWert[i] <<=4;
controllerWert[i] = map (potiWert[i], 0, maxPotiWert, 0, 127);
//
if (controllerWert[i] != controllerWertAlt[i])
{
Serial.write (midiBefehl);
Serial.write (controllerNummer[i]);
Serial.write (controllerWert[i]);
//
big_knob_timer = 0;
if (big_knob_aktiv == 0 )
{
big_knob(1,i);
big_knob_wert(1,i);
big_knob_aktiv = 1;
mini_knob_aktiv = 0;
}
if (big_knob_aktiv == 1){big_knob_wert(0,i);}
if (big_knob_aktiv == 0){mini_knobs_wert (2,i);}
info_text_unten (2,i);
controllerWertAlt[i] = controllerWert[i];
if (big_knob_aktiv == 0){mini_knobs_wert (3,i);}
if (big_knob_aktiv == 1){big_knob_wert(1,i);}
info_text_unten (3,i);
//
}
big_knob_timer ++;
if (big_knob_timer > 22000)
{
if (mini_knob_aktiv == 0)
{
big_knob_aktiv = 0;
big_knob(0,-1);
}
mini_knob_aktiv = 1;
mini_knobs(1);
mini_knobs_wert(1,-1);
}
}
}
//
Es funktioniert alles soweit, nur das öfters der Poti so steht, das Werte z.B. zwischen 5/6 od. 66/67 od. 91/92 schwanken und alles zu nicht machen, lach. HELP
Vielleicht kann mir jemand helfen hier weiter zu kommen, ich bekomme das gerade nicht hin.