dbwing520 发表于 2014-5-13 13:58:44

求助 用多个人体红外控制多个led 遇到问题

用多个人体红外控制LED

一个人体红外模块对应一个led
人体红外点亮LEDled亮10S
但是用delay() 就造成其他人体红外接收到信号 led也没有反应

有什么函数可以解决啊
就是灯亮的时候不影响其他工作

用的2560
看扩展库有个 Timer是什么利用millis()函数来模拟多线程

瘦网虫 发表于 2014-5-13 15:41:55

不要用delay好了,自己定义个变量,自己计数。

dbwing520 发表于 2014-5-13 17:35:52

自己人工置顶

dbwing520 发表于 2014-5-13 17:38:09

瘦网虫 发表于 2014-5-13 15:41 static/image/common/back.gif
不要用delay好了,自己定义个变量,自己计数。

计数器和定时器 差不多
我用定时函数一样

计时未完成就不会 响应其他信号

林定祥 发表于 2014-5-13 18:10:18

用millis(),不到点循环,到点处理。

dbwing520 发表于 2014-5-13 18:47:29

林定祥 发表于 2014-5-13 18:10 static/image/common/back.gif
用millis(),不到点循环,到点处理。

类似查询中断吗

dbwing520 发表于 2014-5-13 18:54:53

林定祥 发表于 2014-5-13 18:10 static/image/common/back.gif
用millis(),不到点循环,到点处理。

这个不影响其他传感器 响应吗

比如   人体红外1响应LED1亮(需要亮5分钟)
亮了一分钟    人体红外2响应LED2亮(需要亮五分钟)

按我的理解你说的函数millis()用于关灯
但读取系统时间也不能执行其他 响应吧

dbwing520 发表于 2014-5-13 19:27:12


自己人工置顶

dbwing520 发表于 2014-5-13 20:09:14



自己人工置顶

dbwing520 发表于 2014-5-13 20:43:31




自己人工置顶

eddiewwm 发表于 2014-5-13 21:39:10

把程序放上來,看看怎替你改吧!

林定祥 发表于 2014-5-13 21:44:02

dbwing520 发表于 2014-5-13 18:54 static/image/common/back.gif
这个不影响其他传感器 响应吗

比如   人体红外1响应LED1亮(需要亮5分钟)


他的原理是,在loop中在执行到millis时和需要延时的值比对,不对,继续执行下个指令,操作
值处理时间,因此使用millis不存在时间等待问题

林定祥 发表于 2014-5-13 21:44:27

dbwing520 发表于 2014-5-13 18:54 static/image/common/back.gif
这个不影响其他传感器 响应吗

比如   人体红外1响应LED1亮(需要亮5分钟)


他的原理是,在loop中在执行到millis时和需要延时的值比对,不对,继续执行下个指令,操作
值处理时间,因此使用millis不存在时间等待问题

dbwing520 发表于 2014-5-13 21:50:52

eddiewwm 发表于 2014-5-13 21:39 static/image/common/back.gif
把程序放上來,看看怎替你改吧!

int echo2=40;
int trig2=43;
int led2=7;
int echo1=32;
int trig1=35;
int led1=9;
void setup()
{
    Serial.begin(9600);
    pinMode(echo2, INPUT);
    pinMode(trig2, OUTPUT);
    pinMode(led2, OUTPUT);

    pinMode(echo1, INPUT);
    pinMode(trig1, OUTPUT);
    pinMode(led1, OUTPUT);
}

void loop()
{
sr1();
sr2();
}

void sr1()
{
    digitalWrite(trig1, LOW);
    delayMicroseconds(2);
    digitalWrite(trig1, HIGH);
    delayMicroseconds(10);
    digitalWrite(trig1, LOW);
    int d1 = pulseIn(echo1, HIGH);
    d1= d1/58;
    delay(10);
if(d1 <30 )   
{
    Serial.println(d1);
    Serial.println("sr1");
    digitalWrite(led1, HIGH);
    delay(5000);
}
else digitalWrite(led1, LOW);
}

void sr2()
{
    digitalWrite(trig2, LOW);
    delayMicroseconds(2);
    digitalWrite(trig2, HIGH);
    delayMicroseconds(10);
    digitalWrite(trig2, LOW);
    int d2 = pulseIn(echo2, HIGH);
    d2= d2/58;
    delay(10);
if(d2 <30 )   
{
    Serial.println(d2);
    Serial.println("sr2");
    digitalWrite(led2, HIGH);
    delay(5000);
}
else digitalWrite(led2, LOW);
}



改掉delay

dbwing520 发表于 2014-5-13 21:56:29

林定祥 发表于 2014-5-13 21:44 static/image/common/back.gif
他的原理是,在loop中在执行到millis时和需要延时的值比对,不对,继续执行下个指令,操作
值处理时间, ...

我看扩展库里有个 Timer就是没找到下载

页: [1] 2
查看完整版本: 求助 用多个人体红外控制多个led 遇到问题