arduino uno 的奇怪数学

Wierd Math with arduino uno

我正在尝试用我的 arduino 发出警报,它总是在 0:00 激活并在 23:59 停用,因此变量会重置并且更容易制作。现在我想做的是,蜂鸣器在 1 分钟后启动。但是数学并没有真正起作用,或者我遗漏了一些东西。

代码:

/* Tutorial:
 * ---------
 * -Set the custom Variables
 * -Plug arduino at exact 0:00
 * 
 * 
 */

//Imports


//Custom Variables
int alarmMin = 1;

//Other Variables
boolean active = false;
int alarmMilli = alarmMin * 60000;

//Pins
int pBuzzer = 2;


//Start
void setup() {
  Serial.begin(9600);
  Serial.println("-------------------------------");
  Serial.println(alarmMin);
  Serial.println(alarmMilli);
}

//Loop
void loop() {
  Serial.println(active);
  Serial.println(millis()/1000);
  Serial.println(alarmMilli/1000);
  Serial.println("-----");
  
  //If alarm-time started
  if(millis()/1000 == alarmMilli/1000){
    active = true;
  }

  //Buzzer
  if(active){
    digitalWrite(2, HIGH);
  }
}

输出:

-------------------------------
1
-5536
0
0
-5
-----
0
0
-5
-----
0
0
-5
-----
0
0
-5
-----
...

为什么 1*6000 = -5536

Arduino Uno 上的 int 类型是一个 16 位整数,即它的范围是从 -32,768 到 327,67。因此,60,000 已经超出范围,导致数学看起来很奇怪。

而不是 int,使用 long。它的范围是从-2,147,483,648到2,147,483,647。