我正在尝试构建一个简单的arduino温度计,根据温度点亮不同的LED。我用的是一个阿达水果5v饰品和一个带tmp36温度传感器的12像素戒指。我的问题是只有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);
}
非常感谢您的帮助。感谢:)
您需要考虑用于计算的数字类型(int与float)。使用整数进行数学运算会截断浮点结果。函数Math.round()可以帮助您从数学中获得更好的结果。
您可能需要考虑以下内容:
电压=数学四舍五入(电压/102.40);
除法运算将以浮点精度进行,然后您将得到四舍五入的结果。如果结果更接近该整数值,舍入将向上取整(duh),否则向下取整。
此外,Analog Read()返回0到1023之间的值。如果你把它(带截断)除以1024,你永远不会得到1024。
我建议查看Adafruit或Sparkfun网站上的示例代码,它们给出了解释热敏电阻/热电偶传感器的好例子。