大连林海 发表于 2016-5-1 08:16:51

arduino宏的应用实例5--用宏实现时间继电器(转)

直接上代码://宏名:delayRelay。返回值:bool 到达时间。输入值:enable使能,del延时时间。作用:延时继电器,当enable使能后,延时del毫秒后接通。
//static unsigned long tim = ({Serial.println("start"), millis();}); //这句用于测试是否能在static 变量设置的时候加入只执行一次的初始化代码块。
#define delayRelay(enable,del) ({\
    static unsigned long tim = millis();\
    if (!enable) {\
      tim = millis();\
    }\
    millis() - tim >= del;\
})
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(7, INPUT);            //pin7接led
pinMode(8, INPUT_PULLUP);   //pin8接按键
}
void loop() {
// put your main code here, to run repeatedly:
//当8口的按键按下后,延时1000ms接通led,中途断开则下次重新计时。
if (delayRelay(!digitalRead(8), 1000))
{
    pinMode(7, OUTPUT);
} else {
    pinMode(7, INPUT);
}

}
代码作用,实现plc中常见的时间继电器功能。
按键保持按下1s后led点亮。

dsweiliang 发表于 2016-5-4 09:36:07

学习啦
页: [1]
查看完整版本: arduino宏的应用实例5--用宏实现时间继电器(转)