Wen du aber machst ohne Ausgabewert ++ funktioniert, das was du hier zeigst ist nicht die Antwort.
Ich kann kein Englisch, nur meine das das Wort const + variable hat andere Bedeutung als im normalem Leben, erwarte auch eine Antwort auf #4 , define darf man dafĂŒr nutzen, nur wo zu noch den preprocessor (oder precompiler) mitziehen wenn es geht ohne.
und es ist doch eine constante variable, schreibt dir doch der Compiler
read-only variable 'Ausgabewert'
In C++ hat const durchaus mehrere Bedeutungen/Einsatzzwecke,
const sagt durchaus nicht, dass etwas konstant ist.
In den meisten FĂ€llen sagt es nur, das etwas "read only" ist.
constexpr ist schon deutlich nÀher an konstant dran.
Und consteval noch ein StĂŒckchen
Beispiele:
const testA = 5;
Ist read only fĂŒr das Programm, kann aber von auĂen geĂ€ndert werden.
volatile const testA = 5;
Dann bekommt das Programm auch die Ă€uĂerliche Ănderung mit.
constexpr testA = 5;
Das macht es wirklich unverĂ€nderlich und spart, in den meisten FĂ€llen, auch den Platz fĂŒr das benannte Objekt ein.
Wenn man dem Optimizer wirklich auf die SprĂŒnge helfen will, und Dinge "konstant" machen möchte, dann constexpr fĂŒr Pins verwenden. Oder eben, wie schon vorgefĂŒhrt, die Pinnummer im Datentype versenken, denn Datentypen Ă€ndern sich nicht zur Laufzeit. Sind also auf ihre eigene Art durchaus konstant.
Ich weiĂ, ich bin da etwas pingelig an der Stelle......
Etwas nicht zu wissen, ist erstmal kein Drama. Werden wir doch alle mit nahe Null Wissen geboren. Das Drama beginnt, wenn man die WissenslĂŒcken mit Fantasie ausfĂŒllt. Also mit irrationalen Annahmen.
Merksatz:
Der Weg in die Hölle ist mit falschen Annahmen gepflastert.
Und ja: Der menschliche Geist neigt dazu, die weiĂen Flecken im Wissen bunt aus zu malen.
u.A. weil es fĂŒr viele echt unangenehm ist, sich Unwissen einzugestehen.
Dabei ist es doch gerade dieses EingestÀndnis, welches die eigene Entwicklung vorwÀrts treibt, treiben kann.
z.B. beim AVR, die ganzen Hardwareregister liegen im Adressraum, in dem auch das RAM liegt.
Diese Register können sich Ă€ndern, ohne dass das Programm dafĂŒr ursĂ€chlich ist.
Manche dieser Register dĂŒrfen nicht beschrieben werden. Sollten also read only fĂŒr das Programm sein.
Erst hier wird klar, was den Unterschied zwischen PIN und Wert ausmacht.
Und wie das ganz mÀchtg in die Hose gehen kann.
@herbk erst mit dem Aufruf der Funktion analogWrite() wird aus der Variablen (oder Konstanten) der jeweilige PIN und der zugewiesene Wert.
In Deinem Fall findest Du dazu das passende Ăquivalent in Arduino.h und wiring_analog.c
Hast du auch einen Vorschlag, wie man analogWrite() und digitalWrite() so absichert, dass ein vertauschen der Parameter nicht zu eine Fehlfunktion, sondern zu einer Meldung zur Kompilezeit fĂŒhrt?