私は Arduino 以外の組み込み C++ にはかなり慣れていませんが、これまでに遭遇したすべての問題を修正できましたが、この問題は除きます。Atmega 1284P で Atmel Studio を使用し、C++ でコーディングしています。次の変数を使用して TTL シリアル入力と比較しています (シリアル入力は 0 ~ 255 で、単一の符号なし char バイトで転送されます)。
const unsigned char STEER_DEADZONE_MIN = 120;
const unsigned char STEER_DEADZONE_MAX = 120;
const unsigned char THROTTLE_DEADZONE_MIN = 136;
const unsigned char THROTTLE_DEADZONE_MAX = 136;
STEER_DEADZONE_MIN またはリストされている符号なし char のいずれかを使用しようとすると、それらは 12 として表示されます。Atmel Studio シミュレータ ウォッチ ツールと組み込みデバイスの LCD に出力することの両方を使用して、プログラムが 12 として認識していることを確認しました。const を削除するという unsigned char の修正を実際に思いつきましたが、値を変更したくないので、そこに const があります。次のように宣言します。
unsigned char TEST = 120;
unsigned char TEST1 = 136;
これにより、値は正しく 120 または 136 になりますが、値が誤って変更される可能性があります。また、メインループ内で次のように割り当てを行うと、次のようになります。
const unsigned char TEST = 120;
これにより値も修正されますが、他の関数がそれにアクセスできないため、他の問題が発生します。
const unsigned int に関しては、一見関連する問題もあります。メインループの外で宣言すると:
const unsigned int SERVO_ESC_SPEED = 200;
const unsigned int SERVO_STEER_SPEED = 200;
const unsigned int SERVO_DISTANCE_SENSOR_SPEED = 200;
値は 37900 になりますが、メイン ループ内で次のように宣言しようとしました。
const unsigned int TEST = 200;
これで値が修正されますが、上記のように、関数が値にアクセスできなくなったため、役に立ちません。この場合、メイン ループの外側で const を削除しても、値は修正されません。私はこの時点で本当に途方に暮れています。この時点で他に考えられる唯一のことは、これらすべての const 変数を使用して設定クラスを作成し、それが値を修正するかどうかを確認することです。次はそれを試して、結果を更新します。