AnzwerJ 发表于 2018-5-21 10:48:01

arduino 同时进行两个程序,求帮助!!!

想要做一个火情报警系统,但是发现闪灯的延时会影响串口的数据例如:
int led = 13;
int huoqing = A0;
void setup()
{
        pinMode(led,OUTPUT);
        pinMode(huoqing,INPUT);
        Serial.begin(9600);
}
void loop()
{
        fire();
        deng();
}
void fire()
{
        int a = analogRead(A0);
        Serial.println(a);
        if(a > 600)
        {
                deng();
        }
void deng()
{
        digitalWrite(led,HIGH);
        delay(2500);
        digitalWrite(led,LOW);
        delay(2500);
}
就是这样的代码,在有火的情况下,串口里的数据会每五秒刷新一次,但是我想让它一直刷新,该怎么做,求各位大佬!!

275891381 发表于 2018-5-21 10:59:00

你的灯这么大的延时肯定不行呀

hp198969 发表于 2018-5-21 11:11:18

你不会将刷串口数据的程序放到延时里面吗?

林定祥 发表于 2018-5-21 11:33:26

给灯里一个变量,每次到灯里+1,加到特定数字就让灯定量或熄灭,这样不至于在灯里面等5S钟,特定的周期试一下,满足闪亮快慢的要求。

275891381 发表于 2018-5-21 11:41:09

本帖最后由 275891381 于 2018-5-21 11:51 编辑

看你是新手给你改改,这样最简单,用个定时器读ad输出串口也可以
int led = 13;
int huoqing = A0;

void setup()
{
      pinMode(led,OUTPUT);
      digitalWrite(led,0);//灭灯
      pinMode(huoqing,INPUT);
      Serial.begin(9600);
}
void loop()
{
      fire();
      //deng();
}
void fire()
{
      int a = analogRead(A0);
      Serial.println(a);
      if(a > 600)
                deng();
      else
          digitalWrite(led,0);//灭灯
}
#define deng_time 2500
unsigned long deng_time_old=0;//和delay()返回值类型unsigned long一致
void deng(void)
{
      if(abs(millis()-deng_time_old)>deng_time)//9h22min溢出,加abs处理溢出
      {
            deng_time_old=millis();
            digitalWrite(led,!digitalRead(led));
      }
}

AnzwerJ 发表于 2018-5-21 15:21:56

275891381 发表于 2018-5-21 11:41
看你是新手给你改改,这样最简单,用个定时器读ad输出串口也可以

感谢大神 !!!

275891381 发表于 2018-5-21 15:51:46

AnzwerJ 发表于 2018-5-21 15:21
感谢大神 !!!

我没试,应该没问题

Stormer 发表于 2018-5-21 17:04:16

用 中断事件 来闪灯。 原理也是用计时器。 百度“arduino 中断”。

弘毅 发表于 2018-5-22 07:43:32

尽量避免使用delay,使用其他函数替代。delay影响太多。
页: [1]
查看完整版本: arduino 同时进行两个程序,求帮助!!!