我正在尝试构建一个简单的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);
}
非常感谢帮助。 谢谢:))
答案 0 :(得分:1)
您需要考虑用于计算的数字类型(int vs float)。使用整数完成的数学将截断浮点结果。 Math.round()函数可以帮助您从数学中获得更好的结果。
您可能需要考虑以下内容:
电压= Math.round(电压/ 1024.0);
除法运算将以浮点精度进行,然后您将得到舍入结果。如果结果更接近整数值,舍入将向上舍入(duh),否则向下舍入。
此外,AnalogRead()返回0到1023之间的值。如果将(用截断)除以1024,则永远不会得到1024.
我建议查看Adafruit或Sparkfun网站上的示例代码,它们提供了解释热敏电阻/热电偶传感器的良好示例。