Я довольно плохо знаком со встроенным c ++ за пределами Arduino, но до сих пор мне удавалось исправить все проблемы, с которыми я столкнулся, кроме этой.
Я использую Atmel Studio на Atmega 1284P, кодирование на C ++. Я использую следующие переменные для сравнения с последовательным входом TTL (последовательный вход между 0 и 255 передается в одном байте без знака):
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 или любой из перечисленных неподписанных символов, они получаются как 12. Я подтвердил, что моя программа видит это как 12, используя как средство просмотра симулятора Atmel Studio, так и распечатав его на ЖК-дисплее на встроенном устройстве. Я на самом деле придумал исправление для unsigned char, которое заключается в удалении const, но у меня есть 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 за пределами основного цикла не фиксирует значение. Я действительно в растерянности на данный момент. Единственное, что я могу попробовать на этом этапе, — это создать класс настроек со всеми этими константными переменными и посмотреть, исправляет ли это значения. Я буду пробовать это дальше и обновлять результаты.
Как насчет того, чтобы сделать их статичными?
static const unsigned char STEER_DEADZONE_MIN = 120;
static const unsigned char STEER_DEADZONE_MAX = 120;
static const unsigned char THROTTLE_DEADZONE_MIN = 136;
static const unsigned char THROTTLE_DEADZONE_MAX = 136;