Arduino LCD带2个DS18B20。循环电源时更改

时间:2016-02-19 13:04:43

标签: arduino sensor lcd

我有一个奇怪的问题,我希望有人可以帮忙。我的草图在上传到我的UNO时效果很好,但当我拔掉它并将其重新插入时,它无法正常工作。如果我重新上传它,它会再次工作,直到电源循环。 上传后,液晶显示屏显示:

Ferm:73.4  73/75
Room:75.1  75/75

循环动力后:

Ferm:73.45 73/18
Room:74.83 75/18

因此,在循环上电之后,我现在得到2位小数和“#34;高位”#34;温度停留在" 18"。

 /*
  The circuit:
 * 5V to Arduino 5V pin
 * GND to Arduino GND pin
 * CLK to Analog #5
 * DAT to Analog #4
*/

// include the library code:
#include "Wire.h"
#include "Adafruit_LiquidCrystal.h"
#include <OneWire.h>
#include <DallasTemperature.h>

//variables for temp readings
float fermTemp;
float fermTempL=100;
float fermTempH=5;
float roomTemp;
float roomTempL=100;
float roomTempH=5;

// set OneWire bus to digital PIN 4 on the Arduino
#define ONE_WIRE_BUS 4

// Setup OneWire instance
OneWire oneWire(ONE_WIRE_BUS);

// Pass oneWire reference to Dallas Temp
DallasTemperature sensors(&oneWire);

// Connect via i2c, default address #0 (A0-A2 not jumpered)
Adafruit_LiquidCrystal lcd(0);

void setup() 
{
  // set up the LCD's number of rows and columns: 
  lcd.begin(16, 2);
  // turn on backlight
  lcd.setBacklight(HIGH);
}

void loop() {
 readtemp();
 LCDPrint(); 
}

void readtemp()
{
  // get data from sensors
  sensors.requestTemperatures();
  fermTemp = (sensors.getTempFByIndex(0));
  roomTemp = (sensors.getTempFByIndex(1));
  // check/set High and Low temp
  if (fermTemp<fermTempL) {
    fermTempL=fermTemp;
  }
  if (fermTemp>fermTempH) {
    fermTempH=fermTemp;
  }
  if (roomTemp<roomTempL) {
    roomTempL=roomTemp;
  }
  if (roomTemp>roomTempH) {
    roomTempH=roomTemp;
  }
}
  void LCDPrint() 
  {
  lcd.setCursor(0,0);  
  lcd.print("Ferm:");
  lcd.print(fermTemp,1);
  lcd.setCursor(11,0);
  lcd.print(fermTempL,0);
  lcd.print("/");
  lcd.print(fermTempH,0);
  lcd.setCursor(0,1);
  lcd.print("Room:");
  lcd.print(roomTemp,1);
  lcd.setCursor(11,1);
  lcd.print(roomTempL,0);
  lcd.print("/");
  lcd.print(roomTempH,0);
 }

1 个答案:

答案 0 :(得分:0)

我计算了你的角色,每行16个。如果您有16X2显示屏,则可能会在屏幕外打印字符。我怀疑它不是真的18,而是更大,比如180或1800.这可能是因为首次尝试读取温度失败。这个读数就像你一样高温。在您的代码中,您应该定义一个合理的高温,例如125.如果它高于合理的温度,请不要更新temp。

要确认,请将temp temp打印到串口并检查该值。