代码逻辑感觉没有问题,但是代码运行之后ws2812灯带不按

2023-06-136283
AI 快速预览详细 收起
本文介绍了通过 Arduino 和 LM35 温度传感器实现温度感应并控制 WS2812 灯带颜色变化的方法。提供了具体的引脚设置、灯珠数量和故障排查步骤。首先,通过 LM35 读取温度值并通过公式转换为实际温度,然后根据温度控制 WS2812 灯带的颜色变化。如果温度大于37度,LED 亮起;否则,关闭 LED。每500毫秒通过串口输出一次温度值。
//共生
#include <Adafruit_NeoPixel.h>

#define LED_PIN    8// ws2812引脚设置
#define LED_COUNT 576//灯珠数量

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

float sinVal;            
int toneVal;
unsigned long tepTimer ;   

void setup(){
    Serial.begin(9600);        //设置波特率为9600 bps
    strip.begin();
    strip.show();
}

void loop(){
    int val;            //用于存储LM35读到的值
    double data;        //用于存储已转换的温度值
    val=analogRead(0);   //LM35连到模拟口,并从模拟口读值
    data = (double) val * (5/10.24);  // 得到电压值,通过公式换成温度

    if(data>37){        //  如果温度大于27,led亮  
          for (int i = 0; i < strip.numPixels(); i++) {
            strip.setPixelColor(i, strip.Color(4, 5, 10));
            strip.show();
            delay(0.05);
          }

    } else {          // 如果温度小于27,关闭蜂鸣器
          for(int i = 0; i < LED_COUNT; i++) {
            strip.setPixelColor(i, 10, 11, 20); // 设置蓝色
            strip.show(); // 更新LED状态
            delay(0.5); // 延迟50ms
            strip.setPixelColor(i, 0, 0, 0); // 关闭当前LED
          }
    }

    if(millis() - tepTimer > 500){     // 每500ms,串口输出一次温度值
             tepTimer = millis();
             Serial.print("temperature: ");     // 串口输出“温度”
             Serial.print(data);         // 串口输出温度值
             Serial.println("C");         // 串口输出温度单位
       }
}

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(1)
wxDGyLq0sSE6
wxDGyLq0sSE6
作者
感谢大家!解惑!
云天
云天回复wxDGyLq0sSE6
硬件也拍一下,发上来。及运行时[backcolor=rgb(250, 250, 250)][font=微软雅黑]串口输出情况。[/font][/backcolor]
- 没有更多了 -