在 Arduino 中计算无意义的数字

Counting in Arduino making nonsens numbers

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

    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) 它 returns 我 6464。 或者,时间 19:16:0 它 returns 我 3824。 有人能告诉我问题出在哪里吗?

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

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

的数据类型