Arduino 光控LED(根据光敏电阻模拟值)
2022-06-29 本文已影响0人
Charles2018
实验1 控制单个led
实验目的:光线亮led熄灭 光线暗led点亮 光线亮暗的阈值在程序中设置 也就是说在程序指定光线暗到什么程度时led点亮

代码
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);
}
}
演示


实验2 控制多个led
光线越暗 亮的led越多

代码
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 之间的数值。
演示


