Arduino温度传感器负温度

Arduino温度传感器负温度,arduino,sensors,temperature,Arduino,Sensors,Temperature,测量负温度时,led输出上没有显示正确的值。我看到类似4983的东西。我需要关于代码的建议 我使用arduino uno。 senzor的类型:DS18B20 代码: #包括 #包括 #包括 #包括 #定义OLED_MOSI 9 #定义OLED_CLK 10 #定义OLED_DC 11 #定义OLED_CS 12 #定义OLED_重置13 Adafruit_SSD1306显示器(OLED_MOSI、OLED_CLK、OLED_DC、OLED_复位、OLED_CS); #定义NUMF10 #定义X

测量负温度时,led输出上没有显示正确的值。我看到类似4983的东西。我需要关于代码的建议

我使用arduino uno。 senzor的类型:DS18B20

代码:

#包括
#包括
#包括
#包括
#定义OLED_MOSI 9
#定义OLED_CLK 10
#定义OLED_DC 11
#定义OLED_CS 12
#定义OLED_重置13
Adafruit_SSD1306显示器(OLED_MOSI、OLED_CLK、OLED_DC、OLED_复位、OLED_CS);
#定义NUMF10
#定义XPOS 0
#定义YPO 1
#定义三角洲2
#定义LOGO16\u GLCD\u高度16
#定义LOGO16\u GLCD\u宽度16
静态常量无符号字符程序logo16\u glcd\u bmp[]=
{B00000000,B11000000,
B00000001,B11000000,
B00000001,B11000000,
B00000011,B11100000,
B11110011、B11100000、,
B11111110,B11111000,
B01111110,B11111111,
B001100111、B10011111、,
B00011111、B11111100、,
B0000110B01110000,
B00011011,B10100000,
B0011111,B11100000,
B0011111,B11110000,
B01111100,B11110000,
B01110000,B01110000,
B00000000,B0011000};
#如果(SSD1306_LCDHEIGHT!=64)
#错误(“错误,Adafruitssd1306.h!”);
#恩迪夫
#包括
单线ds(2);
无效设置(){
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
display.clearsdisplay();
}
空循环(){
字节i;
存在字节=0;
字节数据[12];
字节地址[8];
如果(!ds.search(addr)){
Serial.print(“\n”);
ds.reset_search();
返回;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1);
延迟(1000);
ds.reset();
ds.select(addr);
ds.write(0xBE);
对于(i=0;i首先,改变:

Data [i] = ds.read ();

然后看看你得到了什么样的结果

我不确定之后的计算结果。我使用以下代码将DS18B20的九个十六进制值转换为温度:

  int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract;
  LowByte = data[0];
  HighByte = data[1];
  TReading = (HighByte << 8) + LowByte;
  SignBit = TReading & 0x8000;  // test most sig bit
  if (SignBit) { // negative
    TReading = (TReading ^ 0xffff) + 1; // 2's comp
  }
  Tc_100 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25

  Whole = Tc_100 / 100;  // separate off the whole and fractional portions
  Fract = Tc_100 % 100;


  if (SignBit) { // If its negative
     Serial.print("-");
  }
  Serial.print(Whole);
  Serial.print(".");
  if (Fract < 10) {
     Serial.print("0");
  }
  Serial.print(Fract);

  Serial.print("\n");
int高字节、低字节、踏板、符号位、Tc_100、整体、分形;
低字节=数据[0];
HighByte=数据[1];

TReading=(HighByte欢迎使用Stack Overflow!您可能希望签出。正确设置问题的格式将大大有助于获得所需的答案。
data[i] = ds.read();
  int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract;
  LowByte = data[0];
  HighByte = data[1];
  TReading = (HighByte << 8) + LowByte;
  SignBit = TReading & 0x8000;  // test most sig bit
  if (SignBit) { // negative
    TReading = (TReading ^ 0xffff) + 1; // 2's comp
  }
  Tc_100 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25

  Whole = Tc_100 / 100;  // separate off the whole and fractional portions
  Fract = Tc_100 % 100;


  if (SignBit) { // If its negative
     Serial.print("-");
  }
  Serial.print(Whole);
  Serial.print(".");
  if (Fract < 10) {
     Serial.print("0");
  }
  Serial.print(Fract);

  Serial.print("\n");