嵌入式

Arduino 光控LED(根据光敏电阻模拟值)

2022-06-29  本文已影响0人  Charles2018

实验1 控制单个led

实验目的:光线亮led熄灭 光线暗led点亮 光线亮暗的阈值在程序中设置 也就是说在程序指定光线暗到什么程度时led点亮

电路图.jpg

代码

int analog = A0; // 模拟值获取
int led = PD2;
int val = 0;

void setup()
{
    pinMode(led, OUTPUT);
    Serial.begin(9600);
}

void loop()
{
    val = analogRead(analog); // 读取光敏电阻模拟值
    Serial.println(val);
    if(val >= 800)
    {
        digitalWrite(led,LOW);
    }
    else
    {
        digitalWrite(led, HIGH);
    }
}

演示


有光环境.jpg 无光环境.jpg

实验2 控制多个led

光线越暗 亮的led越多

电路图.jpg

代码

int analog = A0; // 模拟值获取
int led[] = {2,3,4,5};
int val = 0;

void setup()
{
    for (auto i = 0;i < sizeof(led) / sizeof(led[0]);i++)
    {
        pinMode(led[i], OUTPUT);
    }
    Serial.begin(9600);
}

void loop()
{
    val = analogRead(analog); // 读取光敏电阻模拟值
    Serial.println(val);
    int num = map(val, 0, 800, 0, 4); // 数值变换
    Serial.println(num);
    for (auto i = 0;i < 4;i++)
    {
        if(i < num)
        {
            digitalWrite(led[i],LOW);
        }
        else
        {
            digitalWrite(led[i],HIGH);
        }
    }
}

等比映射函数map() 函数原型map(value,fromLow,fromHigh,toLow,toHigh) value:是需要映射的数值 将value数值依照fromLow与fromHigh范围对等转换至toLow与toHigh范围。 例如:int num = map(val,0,800,0,4) 将val所读取的值对等转换值0 ~ 4 之间的数值。

演示

有光环境.png 稍有光环境.jpg 完全遮挡.jpg
上一篇 下一篇

猜你喜欢

热点阅读