lyd_2005 发表于 2013-12-19 17:45:56

该怎么才能只发一次数据?

本帖最后由 lyd_2005 于 2013-12-19 18:55 编辑

串口发送数据,但串口不停的向外发数据,该怎么才能只发一次数据?
写了一个串口发送数据的函数,串口就不停的向外发数据,该怎么才能只发一次?已经试了多种方法,仍然没有解决。(目的:7脚有输入时,13脚灯亮,同时发送一次HELLO输出。
                                              7脚无输入时,13脚灯不亮,不发送HELLO输出)
void setup()
{
Serial.begin(9600);
pinMode( 13 , OUTPUT);
pinMode( 7 , INPUT);
}

void loop()
{
if (digitalRead( 7))
{
Serial.print( "HELLO" );
Serial.println("");
digitalWrite( 13 , HIGH );
delay( 1000 );
}
else
{
digitalWrite( 13 , LOW );
}
}

Simon 发表于 2013-12-19 17:51:18

你的D7脚上接的是什么?有没有正确使用下拉电阻?

lyd_2005 发表于 2013-12-19 18:06:27

有的电阻            接 按钮

maxims 发表于 2013-12-19 18:45:57

描述不清,打回重发!

王心诚 发表于 2013-12-19 21:20:32

在程序里面加一个循环判断引脚的改变,这样应该可以

i7456 发表于 2013-12-19 22:11:02

boolean flag = false;
void setup()
{
Serial.begin(9600);
pinMode( 13 , OUTPUT);
}

void loop()
{
if ((digitalRead(7) == HIGH)&&(flag == false))
    {
      flag = true;
      Serial.println("HELLO");
      digitalWrite(13, HIGH);
      delay(1000 );
    }
else
    {
      flag =false;
      digitalWrite(13 , LOW );
    }
}

Simon 发表于 2013-12-19 22:44:24

i7456 发表于 2013-12-19 22:11 static/image/common/back.gif
boolean flag = false;
void setup()
{


如果下拉电阻设置正确,完全无需这个flag变量来控制啊。

i7456 发表于 2013-12-20 00:39:51

Simon 发表于 2013-12-19 22:44 static/image/common/back.gif
如果下拉电阻设置正确,完全无需这个flag变量来控制啊。

如果不用 flag ,你画的图,配楼主的程序, 当保持按钮按下的话,每次循环串口都会输出一次。

当然里面有个延时,保持按下的话,也是大概每秒输出一次。

lyd_2005 发表于 2013-12-20 08:44:34

以搞定 这是按下开关无反应(60秒内),在松开时有一次发送数据
int pin = 7;//定义引脚为D7
int ledpin=13;
unsigned long duration;//定义duration变量为无符号长整数型变量
void setup()
{
Serial.begin(9600);//串口波特率为9600
pinMode(pin, INPUT); //设置引脚为输入模式
pinMode(ledpin, OUTPUT);
}
void loop()
{
duration = pulseIn(pin, HIGH,60000000); //读取引脚上的高电平脉冲,最大脉冲时间间隔为60秒,并且把结果赋值给duration变量
Serial.println("HELLO"); //通过串口输出
if (digitalRead(pin) == HIGH)
{digitalWrite(ledpin, HIGH);}
else
{digitalWrite(ledpin, LOW);}
delay(500); //延时1 秒
}
页: [1]
查看完整版本: 该怎么才能只发一次数据?