如何使电位器阻值变化时LED亮,不变化时LED不亮
如何使电位器阻值变化时LED亮,不变化时LED不亮比如说我转动电位器,阻值在向大变化时LED高电平,当我突然不转动电位器,且阻值停留在当前状态下时LED低电平不亮。 A=可调电阻
if (A!=B){
led=输出为高
}
else
{
led=low
}
B=A
PWW999前辈
我如果要用模拟0接电位器,数字5接LED。Arduino 的程序该如何写? 本帖最后由 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;
}
十分感谢谢谢 我这么写是否正确?
void setup()
{
pinMode( 5 , OUTPUT);
}
void loop()
{
if (( ( analogRead(A0) ) != ( analogRead(A0) ) ))
{
digitalWrite( 5 , HIGH );
}
else
{
digitalWrite( 5 , LOW );
}
} 本帖最后由 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;
}
http://www.geek-workshop.com/thread-1113-1-1.html 来个传送门。 我确定下面的代码可以满足你的要求。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:46 编辑
谢谢大家,如果要是把电位器换成鼠标里的光栅滚轮该如何做呢?我的目的是当光栅转动,红外接收器感知有变化,输出端输出变化的信号,在Arduino上的数字输出脚上就为高电平,光栅滚轮不动,接收器无变化,就为低电平。这个怎么弄呀。
我的想法是,当模拟口或数字口上的电平变化超过一定频率,则某个数字接口上的电平为高,否则为底。 http://www.geek-workshop.com/forum.php?mod=viewthread&tid=595
页:
[1]