いくつかのコードと奇妙な異常について質問があります。このコードはDigisparkに配置されます。Digispark のコード サイズは 6,010 バイトに制限されています。ネストされたif
ステートメントを使用する場合、テキストは LCD 画面に出力されません (以下のリンクを参照)。各セットを個別にコメントアウトすることで、再び機能させることができます。
基本的な LCD 機能:
- LCDは、内部ビール温度と周囲空気温度を出力します。http://imgur.com/S0rYvaa
- LCD クリア
- LCDは目標温度とヒーター(リレー)の状態を出力http://imgur.com/OtFXG1K
変数は float 型です。
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");
}
なぜこれが起こるのかわかりません。これは、最大サイズ制限に近づきすぎているために発生していますか? このようなコードを構築することはできませんか?