计算Arduino制作nonsens数字

时间:2018-06-04 19:02:01

标签: time arduino int arduino-ide

我想将输入的时间日期转换为秒。

    case 1:
    lcd.setCursor(0, 0);
    lcd.print("Nastavte zacatek");
    lcd.setCursor(0, 1);
    lcd.print("                    ");
    lcd.setCursor(0, 1);
    lcd.print("Hodina: ");
    while (U == true && ch < 24) {
      ch++; //ch stands for hour variable, it is integer
      U = false;
      lcd.setCursor(9, 1);
      lcd.print(ch);
    }

我正在指望:

 zacatek = ((ch * 3600) + (cm * 60) + cs);

zacatek是无符号长整数,cm和cs的输入方式与ch相同(但在其他情况下)。 然后我使用Serial.println(zacatek);在Serial上打印它 但是例如,对于时间20:0:0(ch = 20,cm = 0,cs = 0),它返回6464。 或者,对于时间19:16:0,它返回3824。 有人能说我问题在哪里吗?

1 个答案:

答案 0 :(得分:0)

在大多数Arduino Boards上,int值为16位宽,因此如果你乘以3600*20,你的数字将大于65535,这是uint16_t的最大值。但是,如果您减去72000 - 65536,您将获得价值6464。顺便说一句:C ++规范(它依赖于平台)未定义有符号整数溢出行为,但它通常溢出为32767-1-327680 < / p>

如果您需要更大的值,请改用int32_tuint32_t。对于常量,可以使用INT32_C(3600) * chUINT32_C(3600) * ch - 如果您不想更改ch的数据类型。