该怎么才能只发一次数据?
本帖最后由 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 );
}
} 你的D7脚上接的是什么?有没有正确使用下拉电阻? 有的电阻 接 按钮 描述不清,打回重发! 在程序里面加一个循环判断引脚的改变,这样应该可以 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 );
}
} i7456 发表于 2013-12-19 22:11 static/image/common/back.gif
boolean flag = false;
void setup()
{
如果下拉电阻设置正确,完全无需这个flag变量来控制啊。
Simon 发表于 2013-12-19 22:44 static/image/common/back.gif
如果下拉电阻设置正确,完全无需这个flag变量来控制啊。
如果不用 flag ,你画的图,配楼主的程序, 当保持按钮按下的话,每次循环串口都会输出一次。
当然里面有个延时,保持按下的话,也是大概每秒输出一次。 以搞定 这是按下开关无反应(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]