极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 迷你强

Arduino入门教程--第十二课--Arduino光照指示器

[复制链接]
发表于 2013-5-31 10:51:21 | 显示全部楼层
我觉得是不是可以改成
digitalWrite(2,HIGH);   
delay(30)
digitalWrite(2,LOW);  }

这样的形式

板子没在手边 没法试验。。。。
回复 支持 反对

使用道具 举报

发表于 2013-6-9 16:18:46 | 显示全部楼层
做成呼吸灯那样子的也还挺好的~
回复 支持 反对

使用道具 举报

发表于 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 脚的数值。灯光一直没有变化,但差异实在是太大了,怎么回事?
回复 支持 反对

使用道具 举报

发表于 2013-6-9 16:58:55 | 显示全部楼层
  1. float top = 400.0;

  2. int mapAnalogValue(int in)
  3. {
  4.   return (int) abs(top-in)/top*255;
  5. }

  6. void setup()
  7. {
  8.   Serial.begin(9600);
  9.   pinMode(11, OUTPUT);
  10. }

  11. void loop()
  12. {
  13.   int n = analogRead(A0);
  14.   
  15.   Serial.print(n);
  16.   Serial.print(", ");
  17.   Serial.println(mapAnalogValue(n));

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

使用道具 举报

发表于 2013-8-10 14:27:38 | 显示全部楼层
本帖最后由 chaoser 于 2013-8-10 16:36 编辑

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

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

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


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

  2. void setup () {
  3.   Serial.begin(9600);
  4.   for(int i=3;i<=12;i++) pinMode(i,OUTPUT);
  5. }
  6. void loop () {
  7.   int n=analogRead(A0);
  8.   Serial.println(n);
  9.   digitalWrite(3,(n>=1));
  10.   digitalWrite(5,(n>=5));
  11.   digitalWrite(6,(n>=20));
  12.   digitalWrite(9,(n>=50));
  13.   digitalWrite(10,(n>=100));
  14.   digitalWrite(11,(n>=800));
  15.   delay(200);
  16. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-12 11:25:01 | 显示全部楼层
chaoser 发表于 2013-8-10 14:27
LZ老大,公用电阻的技巧多谢了。

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

没事的。。。只是规范,一般遵守规范不容易弄出问题,乱弄容易出问题
回复 支持 反对

使用道具 举报

发表于 2013-8-19 22:00:33 | 显示全部楼层
chaoser 发表于 2013-8-10 14:27
LZ老大,公用电阻的技巧多谢了。

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

好程序,很健康。赞一个。
回复 支持 反对

使用道具 举报

发表于 2013-9-3 20:35:23 | 显示全部楼层
就源代码看,好像一个时间不止一个led灯亮,假设n=81,满足n>10、n>20、n>40、n>80,所以4盏灯都会亮,应该在if里面加上“与”语句吧:if(n>10&&n<20)......
回复 支持 反对

使用道具 举报

发表于 2013-10-28 14:44:30 | 显示全部楼层
万马奔腾 发表于 2013-3-31 17:51
/*
作者:极客工坊-迷你强
时间:2012年7月4日

这个比较亮是因为可以同时显示四个吗?
回复 支持 反对

使用道具 举报

发表于 2013-12-9 00:39:31 | 显示全部楼层
int n =analogRead(A0);
怎么知道n的范围是多少呢?
为什么n就从n>=10开始了呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-13 21:12:44 | 显示全部楼层
实际测量下,大概估算取值,差不多。。。就OK了。。。。
回复 支持 反对

使用道具 举报

发表于 2014-2-6 23:07:36 | 显示全部楼层
本帖最后由 sinaydj2 于 2014-2-6 23:48 编辑

强哥我改了一下。这样会亮一点。有没有更简练的代码呢?望高人指点。

  1. void setup ()
  2. {
  3. Serial.begin(9600);
  4.   for(int i=2; i<=5;i++)          //使用循环方式创建2-5号数字口为输出模式
  5.   {
  6.   pinMode(i,OUTPUT);
  7.   }
  8. }
  9. void loop ()
  10. {

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

  12.   if (n<650)             //各个颜色层级判断,各个层级数值,大家可根据自己的使用环境进行相应调整,最小0,最大1023
  13.   {
  14.     digitalWrite(2,LOW);
  15.     digitalWrite(3,LOW);
  16.     digitalWrite(4,LOW);
  17.     digitalWrite(5,LOW);
  18.   
  19.   }
  20.    if (n>120)            
  21.   {
  22.     digitalWrite(2,HIGH);
  23.     digitalWrite(3,LOW);
  24.     digitalWrite(4,LOW);
  25.     digitalWrite(5,LOW);
  26.   }
  27.   
  28.   
  29.   if (n>800)            
  30.   {
  31.     digitalWrite(2,LOW);
  32.     digitalWrite(3,HIGH);
  33.     digitalWrite(4,LOW);
  34.     digitalWrite(5,LOW);

  35.   }
  36. if (n>900)            
  37.   {
  38.    
  39.     digitalWrite(2,LOW);
  40.     digitalWrite(3,LOW);
  41.     digitalWrite(4,HIGH);
  42.     digitalWrite(5,LOW);

  43.   }
  44.   if (n>950)            
  45.   {
  46.    
  47.     digitalWrite(2,LOW);
  48.     digitalWrite(3,LOW);
  49.     digitalWrite(4,LOW);
  50.     digitalWrite(5,HIGH);

  51.   }
  52.   
  53.   Serial.println(n);
  54.   
  55. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2014-3-8 21:15:17 | 显示全部楼层
楼主,为什么LED灯没有设置延迟,灯的亮的时间是怎么控制的?
回复 支持 反对

使用道具 举报

发表于 2014-7-4 19:32:25 | 显示全部楼层
为什么给完高定平不延时就给低电平???
回复 支持 反对

使用道具 举报

发表于 2014-10-10 20:27:30 | 显示全部楼层
绿灯看起来基本上不亮,可以把n的值适当的调高!!
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-24 10:52 , Processed in 0.063818 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表