MIN MAX

Guten Abend, ich habe ein kleines Problem, das ich wie folgt beschreibe. Ich habe einen Code mit delay, die Zeit wird über ein Poti eingestellt. Nun mein Problem ich möchte einen MAX und einen MIN Wert festlegen der eingehalten wird egal wie hoch oder niedrig das Poti gedreht wird.
Danke für etwaige Tips im Voraus

const int MIN = ...;
const int MAX = ...;

if (value > MAX)
   value = MAX;
if (value < MIN)
   value = MIN;

Is anything to happen in these cases?
if (value == MAX)
or
if (value == MIN)
I would do this to cover those:
if (value >= MAX)
value = MAX;
if (value <= MIN)
value = MIN;

Hallo,

I mean, the result is the same. :slight_smile:

Alex875:
Guten Abend, ich habe ein kleines Problem, das ich wie folgt beschreibe. Ich habe einen Code mit delay, die Zeit wird über ein Poti eingestellt. Nun mein Problem ich möchte einen MAX und einen MIN Wert festlegen der eingehalten wird egal wie hoch oder niedrig das Poti gedreht wird.
Danke für etwaige Tips im Voraus

Da gibt es für verschiedene Fälle unterschiedliche Möglichkeiten, die mehr oder auch weniger elegant sind.

Die erste (wenn auch nicht unbedingt beste) Möglichkeit, auf die Arduino-Anfänger kommen (und dann gleich falsch anwenden) wäre typischerweise die map() Funktion, um den Bereich 0..1023 auf einen anderen Bereich abzubilden.

Erstmal müssen wir klären, was du erreichen willst.

Willst du, dass man das Poti auf 0 dreht (dann ist es der Min Wert), dann dreht man z.B. auf 20%, dann ist es immer noch der Min wert (weil man noch drunter ist), dann beginnt irgendwann der Regelbereich (Wert = Potiwert) und bei z.B. 80% Potidrehung ist Max erreicht.

Oder willst du, dass bei 0% Poti der Minwert anliegt und dann sofort die entsprechenden Messwerte reinkommen und bei 100% Poti liegt dann erst der Maxwert an.
In dem Fall ist die oben genannte Lösung nicht das passende, was du dann machen willst ist mappen.

PotiMesswert liegt zwischen 0 und 1023
Du willst aber Werte zwischen 20 und 100 erhalten.

int meinWert = map(potiMess, 0, 1023, 20, 100);

hi,

I mean, the result is the same. :slight_smile:

mi tu.

gruß stefan

Hallo,

@ TelosNox:
wenn man mit map anfängt, wird jeder Input Wert runtergerechnet und in den neuen Wertebereich gepresst. Das möchte er bestimmt nicht. Er möchte nur den min und max Wert begrenzen. Der Rest soll unverändert bleiben. Das ist ein sehr großer Unterschied.

Richtig, ich möchte z.B. da es um Delay geht das mein Minimum d.H. wenn das Poti ganz runter gedreht ist bei z.B. 30 ms liegt. und das Maximum bei 1000ms. ein möglichst einfacher aber funktionierender Vorschlag wäre gut. Danke euch für euere Vorschläge.

Dann willst du wahrscheinlich doch die map() Funktion

Alex875:
Richtig, ich möchte z.B. da es um Delay geht das mein Minimum d.H. wenn das Poti ganz runter gedreht ist bei z.B. 30 ms liegt. und das Maximum bei 1000ms. ein möglichst einfacher aber funktionierender Vorschlag wäre gut. Danke euch für euere Vorschläge.

int delayWert = map(analogRead(POTIPIN), 0, 1024, 30, 1001);

vielleicht wäre ja constrain() was für dich....

jurs:

int delayWert = map(analogRead(POTIPIN), 0, 1024, 30, 1001);

Hallo,

hat das einen tieferen Sinn? Kann ja sein.

Gewöhnlich schreibt man ja dann in dem Fall:

int delayWert = map(analogRead(POTIPIN), 0, 1023, 30, 1000);

"Gewöhnlich" machens die meisten falsch :wink:

bei 1023 willst du "1000" sehen, bei 0 die 0.
OK, das bildet 1024 Eingangs-Werte auf 1001 Ergebnis-Werte ab.

Klarer wird das Problem bei einem Ziel-Bereich 0 .. 100:
Wenn du wirklich 101 Ergebnisse, mit möglichst gleicher Breite, haben willst, wäre

map(in, 0, 1024, 0, 101) ;

durchaus sinnvoll, damit du die 100 nicht erst beim Eingang 1023 siehst.
( Jedes Ergebnis entspricht ca. 10 bit Eingangsänderung )

Eine andere Alternative wäre: Das Ergebnis auf 100 Schritte (0 .. 99) mappen :wink:

Hallo,

ach'so, hab verstanden. Ähnlich der Problematik beim A/D wandeln.
Hatte mir schon irgendwie gedacht das es einen tieferen Sinn hat. jurs schreibt sowas gewöhlich :wink: nicht umsonst.

Danke für die Erklärung.