使用int + char编写uint8_t

时间:2016-04-07 18:11:43

标签: c++ arduino

我正在为Arduino编写一个库,我遇到了这个问题: 我需要创建一个uint8_t变量来定义一个模拟引脚(Ax),而我却无法轻松完成。

这或多或少说明了我的问题,_pinuint8_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问题:) 提前致谢

1 个答案:

答案 0 :(得分:2)

类型转换没有问题,您正在寻找的是:

_pin = pin + A0;

可选择进行范围检查。另外,如果_pinuint8_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作为最佳做法。