ro0t 发表于 2013-5-31 10:51:21

我觉得是不是可以改成
digitalWrite(2,HIGH);   
delay(30)
digitalWrite(2,LOW);}

这样的形式

板子没在手边 没法试验。。。。

J.Li 发表于 2013-6-9 16:18:46

做成呼吸灯那样子的也还挺好的~

J.Li 发表于 2013-6-9 16:56:15

我晕,看这个有光的情况下的串口输出:



434, 21
429, 18
414, 8
397, 1
376, 15
354, 29
332, 43
312, 56
294, 67
277, 78
280, 76
289, 70
303, 61
324, 48
347, 33
370, 19
395, 3
415, 9
430, 19
436, 22
436, 22
426, 16
410, 6
390, 6
371, 18
349, 32
328, 45
310, 57
292, 68
282, 75
289, 70
305, 60
323, 49
347, 33
373, 17
400, 0

前一组数字是A0读数,后一个是处理之后要输出到 #11 脚的数值。灯光一直没有变化,但差异实在是太大了,怎么回事?

J.Li 发表于 2013-6-9 16:58:55

float top = 400.0;

int mapAnalogValue(int in)
{
return (int) abs(top-in)/top*255;
}

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

void loop()
{
int n = analogRead(A0);

Serial.print(n);
Serial.print(", ");
Serial.println(mapAnalogValue(n));


analogWrite(11, mapAnalogValue(n));
delay(50);
}直接使用上一个实验的光敏三极管;led随灯的强度变强而减弱。但问题就在于最后的光敏三极管在读数时候的抖动~见18楼。

chaoser 发表于 2013-8-10 14:27:38

本帖最后由 chaoser 于 2013-8-10 16:36 编辑

LZ老大,公用电阻的技巧多谢了。

有个小问题,电阻接在LED负极上真的可以吗?似乎看其他书,都强调要接在正极端,因为这是高电位的一侧。当然,我甚至冒险试过不接电阻,LED都没烧~~~不过还是感觉好危险。

下面是得瑟时间,先上电路图:


再上程序,功能一样,也是分级显示当前亮度,不过我用了六个灯,而且只选了亮度高的红蓝灯。
其实按我的接线方法,可以pwm输出的,不过懒得写程序了。。。。
/* 程序功能:Arduino作为光照度显示器,光线越强,LED会亮的越多 */

void setup () {
Serial.begin(9600);
for(int i=3;i<=12;i++) pinMode(i,OUTPUT);
}
void loop () {
int n=analogRead(A0);
Serial.println(n);
digitalWrite(3,(n>=1));
digitalWrite(5,(n>=5));
digitalWrite(6,(n>=20));
digitalWrite(9,(n>=50));
digitalWrite(10,(n>=100));
digitalWrite(11,(n>=800));
delay(200);
}

迷你强 发表于 2013-8-12 11:25:01

chaoser 发表于 2013-8-10 14:27 static/image/common/back.gif
LZ老大,公用电阻的技巧多谢了。

有个小问题,电阻接在LED负极上真的可以吗?似乎看其他书,都强调要接在 ...

没事的。。。只是规范,一般遵守规范不容易弄出问题,乱弄容易出问题

agaonet 发表于 2013-8-19 22:00:33

chaoser 发表于 2013-8-10 14:27 static/image/common/back.gif
LZ老大,公用电阻的技巧多谢了。

有个小问题,电阻接在LED负极上真的可以吗?似乎看其他书,都强调要接在 ...

好程序,很健康。赞一个。

1CSH1 发表于 2013-9-3 20:35:23

就源代码看,好像一个时间不止一个led灯亮,假设n=81,满足n>10、n>20、n>40、n>80,所以4盏灯都会亮,应该在if里面加上“与”语句吧:if(n>10&&n<20)......

AlfredLanning 发表于 2013-10-28 14:44:30

万马奔腾 发表于 2013-3-31 17:51 static/image/common/back.gif
/*
作者:极客工坊-迷你强
时间:2012年7月4日


这个比较亮是因为可以同时显示四个吗?

最后的醉 发表于 2013-12-9 00:39:31

int n =analogRead(A0);
怎么知道n的范围是多少呢?
为什么n就从n>=10开始了呢?

迷你强 发表于 2013-12-13 21:12:44

实际测量下,大概估算取值,差不多。。。就OK了。。。。

sinaydj2 发表于 2014-2-6 23:07:36

本帖最后由 sinaydj2 于 2014-2-6 23:48 编辑

http://v.youku.com/v_show/id_XNjY5OTE1NzI0.html强哥我改了一下。这样会亮一点。有没有更简练的代码呢?望高人指点。
void setup ()
{
Serial.begin(9600);
for(int i=2; i<=5;i++)          //使用循环方式创建2-5号数字口为输出模式
{
pinMode(i,OUTPUT);
}
}
void loop ()
{

int n =analogRead(A0);//读取光敏三极管的读数

if (n<650)             //各个颜色层级判断,各个层级数值,大家可根据自己的使用环境进行相应调整,最小0,最大1023
{
    digitalWrite(2,LOW);
    digitalWrite(3,LOW);
    digitalWrite(4,LOW);
    digitalWrite(5,LOW);

}
   if (n>120)            
{
    digitalWrite(2,HIGH);
    digitalWrite(3,LOW);
    digitalWrite(4,LOW);
    digitalWrite(5,LOW);
}


if (n>800)            
{
    digitalWrite(2,LOW);
    digitalWrite(3,HIGH);
    digitalWrite(4,LOW);
    digitalWrite(5,LOW);

}
if (n>900)            
{
   
    digitalWrite(2,LOW);
    digitalWrite(3,LOW);
    digitalWrite(4,HIGH);
    digitalWrite(5,LOW);

}
if (n>950)            
{
   
    digitalWrite(2,LOW);
    digitalWrite(3,LOW);
    digitalWrite(4,LOW);
    digitalWrite(5,HIGH);

}

Serial.println(n);

}

无泪夭邪 发表于 2014-3-8 21:15:17

楼主,为什么LED灯没有设置延迟,灯的亮的时间是怎么控制的?

春日迟迟n 发表于 2014-7-4 19:32:25

为什么给完高定平不延时就给低电平???

Black7 发表于 2014-10-10 20:27:30

绿灯看起来基本上不亮,可以把n的值适当的调高!!
页: 1 [2] 3
查看完整版本: Arduino入门教程--第十二课--Arduino光照指示器