极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 21939|回复: 10

如何使电位器阻值变化时LED亮,不变化时LED不亮

[复制链接]
发表于 2012-9-29 23:11:30 | 显示全部楼层 |阅读模式
如何使电位器阻值变化时LED亮,不变化时LED不亮

比如说我转动电位器,阻值在向大变化时LED高电平,当我突然不转动电位器,且阻值停留在当前状态下时LED低电平不亮。
回复

使用道具 举报

发表于 2012-9-29 23:18:50 | 显示全部楼层
A=可调电阻
if (A!=B){
led=输出为高
}
else
{
led=low
}
B=A
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-29 23:31:13 | 显示全部楼层

PWW999前辈
我如果要用模拟0接电位器,数字5接LED。Arduino 的程序该如何写?
回复 支持 反对

使用道具 举报

发表于 2012-9-30 00:03:51 | 显示全部楼层
本帖最后由 pww999 于 2012-9-30 00:17 编辑

我都不好意思F了  改好了

int A,B;
int LED=5;
void setup() {
   pinMode(LED,OUTPUT);
}
void loop() {
A = analogRead(A0);
if (A!=B){       //判断不等于
digitalWrite(LED, HIGH);
}
else
{digitalWrite(LED,LOW);}
B=A;
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-30 00:05:40 | 显示全部楼层
十分感谢谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-9-30 00:22:14 | 显示全部楼层
我这么写是否正确?
void setup()
{
pinMode( 5 , OUTPUT);
}

void loop()
{
if (( ( analogRead(A0) ) != ( analogRead(A0) ) ))
{
digitalWrite( 5 , HIGH );
}
else
{
digitalWrite( 5 , LOW );
}
}
回复 支持 反对

使用道具 举报

发表于 2012-9-30 01:34:54 | 显示全部楼层
本帖最后由 pww999 于 2012-9-30 01:37 编辑

经实验需要加入滤波
int A,B;
int LED=5;
void setup() {
   pinMode(LED,OUTPUT);
    digitalWrite(LED,LOW);
}
void loop() {
A = A*0.5+0.5*analogRead(A0); //滤波
delay(5);
if (B!=A){   
  //判断不等于
digitalWrite(LED,HIGH);

}
else{
digitalWrite(LED,LOW);
}
B=A;
}

回复 支持 反对

使用道具 举报

发表于 2012-10-1 08:37:00 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2012-10-1 21:52:42 | 显示全部楼层
我确定下面的代码可以满足你的要求。A0端电压变化超过30个AD数值的话,板子上面的d13灯就亮一秒。

  1. int prevdata = 0, nowdata = 0, mark = 0;  //prevdata上一次读到的AD数值,nowdata本次数值,mark是灯亮的标志
  2. unsigned long lighttime = 0;   //计算亮灯时间的存储
  3. int LED = 13;             //LED在13脚
  4. int ADIN = A0;
  5. void setup()
  6. {
  7.     //Serial.begin(9600);
  8.     pinMode(LED, OUTPUT);
  9.     pinMode(ADIN, INPUT);
  10.     prevdata = analogRead(ADIN); //读取一个初值
  11. }
  12. void loop()
  13. {
  14.     nowdata = analogRead(ADIN);  //读取当前的AD值
  15.     //Serial.println(nowdata);
  16.     if (mark == 0 && abs(nowdata - prevdata) > 30)  //如果灯没亮或者当前AD值比上次读取的超过30(数字越大,灵敏度越低)就执行“亮灯,置mark=1,记下亮灯时间”
  17.     {
  18.         digitalWrite(LED, HIGH);
  19.         mark = 1;
  20.         lighttime = millis();
  21.     }
  22.     if(mark == 1 && (millis() - lighttime > 1000))  //如果灯亮了,并且过了一秒以上,就执行“灭灯,置mark=0”
  23.     {
  24.         digitalWrite(LED, LOW);
  25.         mark = 0;
  26.     }
  27. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-10-4 10:10:32 | 显示全部楼层
本帖最后由 likunlaile 于 2012-10-4 10:46 编辑

谢谢大家,如果要是把电位器换成鼠标里的光栅滚轮该如何做呢?我的目的是当光栅转动,红外接收器感知有变化,输出端输出变化的信号,在Arduino上的数字输出脚上就为高电平,光栅滚轮不动,接收器无变化,就为低电平。这个怎么弄呀。
我的想法是,当模拟口或数字口上的电平变化超过一定频率,则某个数字接口上的电平为高,否则为底。
回复 支持 反对

使用道具 举报

发表于 2012-10-7 11:44:45 | 显示全部楼层
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-5-2 18:49 , Processed in 0.041392 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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