我对一些代码和奇怪的异常有疑问。此代码放置在Digispark上。Digispark 的代码大小限制为 6,010 字节。使用嵌套if
语句时,文本不会输出到 LCD 屏幕(请参见下面的链接)。通过分别注释掉每个集合,我可以让它再次工作。
基本液晶功能:
- LCD 输出内部啤酒温度和环境空气温度。http://imgur.com/S0rYvaa
- LCD 清除
- LCD 输出目标温度和加热器(继电器)状态http://imgur.com/OtFXG1K
变量是浮点类型。
float inside_temp;
float outside_temp;
float target = 74.00;
//inside_temp and outside_temp are values from 2 ds18b20's
inside_temp = 70.70;
outside_temp = 70.81;
LCD 在使用此代码时工作,并像这样注释掉它。编译后的大小为 5,928 字节。
if(inside_temp < target){
//Create a limit so heater isn't crazy hot as 5 gallons takes a while to change temperature.
// float limit = target + 1;
// if(outside_temp > limit){
// digitalWrite(RELAY_PIN, LOW);
// lcd.print("OFF");
// }
// else{
digitalWrite(RELAY_PIN, HIGH);
lcd.print("ON");
// }
}
else{
digitalWrite(RELAY_PIN, LOW);
lcd.print("OFF");
}
LCD 也可以使用此代码。编译后的大小为 5,590 字节。
// if(inside_temp < target){
//Create a limit so the heater isn't crazy hot as 5 gallons takes a while to change temperature.
float limit = target + 1;
if(outside_temp > limit){
digitalWrite(RELAY_PIN, LOW);
lcd.print("OFF");
}
else{
digitalWrite(RELAY_PIN, HIGH);
lcd.print("ON");
}
// }
// else{
// digitalWrite(RELAY_PIN, LOW);
// lcd.print("OFF");
// }
未注释时 LCD 不工作。编译后的大小为 5,992 字节。它所做的只是坐在那儿,开着背光,没有文字。http://imgur.com/xPAzY0N,DdGdYoI
if(inside_temp < target){
//create a limit so heater isn't crazy hot as 5 gallons takes a while to change temperature.
float limit = target + 1;
if(outside_temp > limit){
digitalWrite(RELAY_PIN, LOW);
lcd.print("OFF");
}
else{
digitalWrite(RELAY_PIN, HIGH);
lcd.print("ON");
}
}
else{
digitalWrite(RELAY_PIN, LOW);
lcd.print("OFF");
}
我不明白为什么会这样。发生这种情况是因为我太接近最大尺寸限制了吗?我不能像这样构造代码吗?