我正在为Arduino编写一个库,我遇到了这个问题:
我需要创建一个uint8_t
变量来定义一个模拟引脚(Ax
),而我却无法轻松完成。
这或多或少说明了我的问题,_pin
是uint8_t
:
sensortemp::sensortemp(int pin) // Constructor
{
// being _pin an uint8_t
// _pin = A0 if pin = 0;
// _pin = A1 if pin = 1;
// etc.
}
我找到的唯一可行的解决方案是我不想使用的解决方案......
sensortemp::sensortemp(int pin)
{
if(pin == 0)
_pin = A0;
else if(pin == 1)
_pin = A1;
else if(pin == 2)
_pin = A2;
else if(pin == 3)
_pin = A3
}
我希望有人可以帮我解决uint8_t
问题:)
提前致谢
答案 0 :(得分:2)
类型转换没有问题,您正在寻找的是:
_pin = pin + A0;
可选择进行范围检查。另外,如果_pin
为uint8_t
,那么pin
也一样。如果您收到警告,请投入static_cast
:
_pin = static_cast<uint8_t>(pin + A0);
Arduino引脚被定义为整数,从A0
常数开始(例如,对于Arduino Uno为14
或对于Arduino Mega为54
- 因为之前列出了更多数字引脚)。它们都被定义为连续的整数,因此您只需要使用第一个模拟引脚(pin
)添加偏移量(A0
)。
如果您不打算检查无效pin
,则可能需要使用member initializer list作为最佳做法。