我对Arduino之外的嵌入式c ++相当新,但到目前为止,我已经能够解决我遇到的所有问题,除了这个问题。 我在Atmega 1284P上使用Atmel Studio,用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.我已确认我的程序使用Atmel Studio模拟器监视工具将其视为12并将其打印到LCD上嵌入式设备。我实际上想出了一个修复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不会修复该值。在这一点上我真的很茫然。我在这一点上只能想到的其他事情是创建一个包含所有这些const变量的设置类,并查看是否更正了这些值。我将尝试下一步并更新结果。
答案 0 :(得分:0)
如何让它们变得静止呢?
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;