【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);
}
编译下载后,实现效果如下:
正常舒适范围:
正常舒适
光照下:
光照
把板子放到空调下吹冷,然后温度上升到舒适
温度
|