极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13126|回复: 8

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

[复制链接]
发表于 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 );
}
}
回复

使用道具 举报

发表于 2013-12-19 17:51:18 | 显示全部楼层
你的D7脚上接的是什么?有没有正确使用下拉电阻?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-19 18:06:27 | 显示全部楼层
有的电阻            接 按钮
回复 支持 反对

使用道具 举报

发表于 2013-12-19 18:45:57 来自手机 | 显示全部楼层
描述不清,打回重发!
回复 支持 反对

使用道具 举报

发表于 2013-12-19 21:20:32 | 显示全部楼层
在程序里面加一个循环判断引脚的改变,这样应该可以
回复 支持 反对

使用道具 举报

发表于 2013-12-19 22:11:02 | 显示全部楼层
  1. boolean flag = false;
  2. void setup()
  3. {
  4.   Serial.begin(9600);
  5.   pinMode( 13 , OUTPUT);
  6. }

  7. void loop()
  8. {
  9.   if ((digitalRead(7) == HIGH)&&(flag == false))
  10.     {
  11.       flag = true;
  12.       Serial.println("HELLO");
  13.       digitalWrite(13, HIGH);
  14.       delay(1000 );
  15.     }
  16.   else
  17.     {
  18.       flag =false;
  19.       digitalWrite(13 , LOW );
  20.     }
  21. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-12-19 22:44:24 | 显示全部楼层
i7456 发表于 2013-12-19 22:11
boolean flag = false;
void setup()
{

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2013-12-20 00:39:51 | 显示全部楼层
Simon 发表于 2013-12-19 22:44
如果下拉电阻设置正确,完全无需这个flag变量来控制啊。

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

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

使用道具 举报

 楼主| 发表于 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 秒
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-10 14:46 , Processed in 0.047238 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表