likunlaile 发表于 2012-9-29 23:11:30

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

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

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

pww999 发表于 2012-9-29 23:18:50

A=可调电阻
if (A!=B){
led=输出为高
}
else
{
led=low
}
B=A

likunlaile 发表于 2012-9-29 23:31:13


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

pww999 发表于 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;
}

likunlaile 发表于 2012-9-30 00:05:40

十分感谢谢谢

likunlaile 发表于 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 );
}
}

pww999 发表于 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;
}

cnkids 发表于 2012-10-1 08:37:00

http://www.geek-workshop.com/thread-1113-1-1.html 来个传送门。

Ansifa 发表于 2012-10-1 21:52:42

我确定下面的代码可以满足你的要求。A0端电压变化超过30个AD数值的话,板子上面的d13灯就亮一秒。

int prevdata = 0, nowdata = 0, mark = 0;//prevdata上一次读到的AD数值,nowdata本次数值,mark是灯亮的标志
unsigned long lighttime = 0;   //计算亮灯时间的存储
int LED = 13;             //LED在13脚
int ADIN = A0;
void setup()
{
    //Serial.begin(9600);
    pinMode(LED, OUTPUT);
    pinMode(ADIN, INPUT);
    prevdata = analogRead(ADIN); //读取一个初值
}
void loop()
{
    nowdata = analogRead(ADIN);//读取当前的AD值
    //Serial.println(nowdata);
    if (mark == 0 && abs(nowdata - prevdata) > 30)//如果灯没亮或者当前AD值比上次读取的超过30(数字越大,灵敏度越低)就执行“亮灯,置mark=1,记下亮灯时间”
    {
      digitalWrite(LED, HIGH);
      mark = 1;
      lighttime = millis();
    }
    if(mark == 1 && (millis() - lighttime > 1000))//如果灯亮了,并且过了一秒以上,就执行“灭灯,置mark=0”
    {
      digitalWrite(LED, LOW);
      mark = 0;
    }
}

likunlaile 发表于 2012-10-4 10:10:32

本帖最后由 likunlaile 于 2012-10-4 10:46 编辑

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

pww999 发表于 2012-10-7 11:44:45

http://www.geek-workshop.com/forum.php?mod=viewthread&tid=595
页: [1]
查看完整版本: 如何使电位器阻值变化时LED亮,不变化时LED不亮