249|0

39

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【Follow me第二季第1期】监测环境温度和光线,通过板载LED展示舒适程度 [复制链接]

  本帖最后由 流水源 于 2024-8-13 15:13 编辑

本次实现的是基础任务二(必做):监测环境温度和光线,通过板载LED展示舒适程度。

通过读取板上温度传感器和光线检测传感器。设定适宜的温度和光照范围。

当在适宜的范围内,10个彩灯为绿色呼吸状态。

当温度超过上限,一边显示红色呼吸,超出越多亮的灯越多。当温度低于下限时,显示蓝色呼吸,低的越多,亮的灯越多。

当光照超过上限,另一边显示红色呼吸,超出越多亮的灯越多。当光照低于下限时,显示蓝色呼吸,低的越多,亮的灯越多。

还是使用arduino开发,代码如下:

#include <Adafruit_CircuitPlayground.h>
#include <Adafruit_Circuit_Playground.h>
//基础任务二(必做):监测环境温度和光线,通过板载LED展示舒适程度
Adafruit_CircuitPlayground cplay = Adafruit_CircuitPlayground();
#define LED_PIN   13

uint32_t lightbress;
uint8_t  l_dir;
int  light_val;
int  temp_val;
int  g_state;
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(115200);
  cplay.begin();
  cplay.setBrightness(50);
  lightbress = 0;
  l_dir = 0;
  g_state = 0;
}
// the loop function runs over and over again forever
void loop() 
{
    light_val = cplay.lightSensor();
    temp_val  = cplay.temperature() * 100;
    Serial.println(light_val);
    Serial.println(temp_val);
    switch(g_state)
    {
      case  0:
          for (int i = 0; i < 10; i++) 
          {
            cplay.strip.setPixelColor(i, 0, lightbress * 10, 0); // 设置LED为green色
          }
          cplay.strip.show();
          if(l_dir == 0)
          {
            lightbress++;
            if(lightbress == 15) l_dir = 1;
          }else
          {
            if(lightbress) lightbress--;
            else l_dir = 0;
          }
          
          if((light_val > 510) || (light_val < 190) || (temp_val > 3250)||(temp_val < 2950))
          {
            lightbress = 0;
            g_state = 1;
          }
          break;
      case 1:
          //温度
          int level;
          uint8_t r_color,g_color,b_color;
          if(temp_val > 3200)
          {
              level = (temp_val - 3200)/100;
              r_color = lightbress * 10;
              b_color = 0;
              g_color = 0;
          }else if(temp_val < 3000)
          {
              level = (3000 - temp_val)/100;
              b_color = lightbress * 10;
              r_color = 0;
              g_color = 0;
          }else
          {
            g_color = lightbress * 10;
            r_color = 0;
            b_color = 0;
          }
          if(level >= 5)  level = 5;
          for (int i = 0; i < 5; i++) 
          {
              if(i<level)  cplay.strip.setPixelColor(i, r_color, g_color, b_color); // 设置LED为blue red色
              else  cplay.strip.setPixelColor(i, 0, g_color, 0); // 设置LED为blue red色
          }
          
          //光照
          if(light_val > 500)
          {
              level = (light_val - 500)/80;
              r_color = lightbress * 10;
              b_color = 0;
              g_color = 0;
          }else if(light_val < 200)
          {
              level = (200 - light_val)/30;
              b_color = lightbress * 10;
              r_color = 0;
              g_color = 0;
          }else
          {
            g_color = lightbress * 10;
            r_color = 0;
            b_color = 0;
          }
          if(level >= 5)  level = 5;
          for (int i = 5; i < 10; i++) 
          {
              if(i>=(10-level))  cplay.strip.setPixelColor(i, r_color, g_color, b_color); // 设置LED为blue red色
              else  cplay.strip.setPixelColor(i, 0, g_color, 0); // 设置LED为blue red色
          }
          cplay.strip.show();
          lightbress++;
          if(lightbress == 15)  lightbress = 0;
          
          if((light_val <= 500) && (light_val >= 200) && (temp_val <= 3250) && (temp_val >= 2950))
          {
            lightbress = 0;
            g_state = 0;
          }
          break;    
    }
    delay(100);
}

 

编译下载后,实现效果如下:

正常舒适范围:

正常舒适

光照下:

光照

把板子放到空调下吹冷,然后温度上升到舒适

温度

 

 

 

 

点赞 关注
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表