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。
我正在尝试用我的 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。