Arduino带领温度传感器

时间:2015-02-13 20:33:12

标签: c++ c arduino led temperature

我正在尝试构建一个简单的arduino温度计,根据温度点亮不同的LED。我正在使用adafruit 5v饰品和12个带有tmp36温度传感器的neopixel戒指。我的问题是只有LED 11亮起。我试过更改范围来测试温度,我知道我的房间比这更冷。这是我正在使用的代码:

#include <Adafruit_NeoPixel.h>
#include <avr/power.h>

#define PIN            3
#define NUMPIXELS      12
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

int delayval = 500; 
int sensorPin = 1;

void setup() {

#if defined (__AVR_ATtiny85__)
  if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif

  pixels.begin(); 
}

void loop() {

  int reading = analogRead(sensorPin);
  int voltage = reading * 5.0;
  voltage /= 1024; 
  int temp = (voltage - 0.5) * 100;
  temp = constrain(temp, 23, 35);
  temp = map(temp, 23, 35, 0, 11);

  pixels.setPixelColor(temp, 0, 255, 38);
  pixels.show();

  delay(100);

}

非常感谢帮助。 谢谢:))

1 个答案:

答案 0 :(得分:1)

您需要考虑用于计算的数字类型(int vs float)。使用整数完成的数学将截断浮点结果。 Math.round()函数可以帮助您从数学中获得更好的结果。

您可能需要考虑以下内容:

电压= Math.round(电压/ 1024.0);

除法运算将以浮点精度进行,然后您将得到舍入结果。如果结果更接近整数值,舍入将向上舍入(duh),否则向下舍入。

此外,AnalogRead()返回0到1023之间的值。如果将(用截断)除以1024,则永远不会得到1024.

我建议查看Adafruit或Sparkfun网站上的示例代码,它们提供了解释热敏电阻/热电偶传感器的良好示例。