frankpian 发表于 2016-4-19 13:30:32

打开串口为何会中断运行程序从头开始

本帖最后由 frankpian 于 2016-4-19 17:25 编辑

下面是主函数部分,主要是收集一些字符串写到SD卡里,正常上电运行后,程序走完setup()就在loop()里循环了,可是只要打开串口,又会跳到setup()从头运行一遍,这样导致我SD卡生成一个新的文件,我想让串口只作为单向监视功能,只要程序开始就发数据,不管有没有接受,有接受也不要影响程序正常运行。

#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>

SoftwareSerial senSerial(8,9); //软串口RX,TX

//******laserSensor模块,strDistance(),Proof_Test()******
const uint8_t CONT_MEASURE={0x80,0x06,0x03,0x77}; //定义发送连续测量命令
uint8_t count={0}; //接收传感器11位数据

//****** 用于SD卡设置******
const int chipSelect = 10;//设置片选CS,MEGA 53,NANO 10
String logname = ""; //用于存储日志文件名


//******用于序号******
unsigned int number = 0; //用于存储序号

void setup() {
    //******用于PWM******
    pinMode(4,INPUT); //D4设置为输入
   
    //打开串口调试
    Serial.begin(9600);//打开调试串口
    senSerial.begin(9600);//打开传感器串口
    /*
    while(!Serial){
      ;//等待调试串口连接
    }
    */
    //******SD卡初始化******
    Serial.print("Initializing SD card...");
    //判断SD卡是否正常
    if (!SD.begin(chipSelect)){
      Serial.println("Card failed, or not present");
      return;
    }
    Serial.println("card initialized.");
   
    logname = fileName(); //获取文件名
}

void loop() {

    //调用模块,序号+PWM+时间+激光高度
    String dataString = "";//用于存储和打印的字符串
    dataString = serialNumber() + receiver5CH() + currentTime() + strDistance();
   
    //打开创建一个文件,因此需要关闭之前打开的另一个
    File dataFile =SD.open(logname,FILE_WRITE);
    //如果文件可用,开始写入
    if(dataFile){
      dataFile.println(dataString);
      dataFile.close();
      //在调试串口打印相同内容
      Serial.println(dataString);
      }
    //如果文件不能打开,提示Erro
    else {
      Serial.println("error opening " + logname);
    }

}

johnsonzzd 发表于 2016-4-19 17:51:41

因为在电路设计上和复位连一块了

zjz5717 发表于 2016-4-19 18:14:01

Arduino芯片的话在实际上就是只要你打开串口就自动之行复位,目的是方便你能够完成的看到程序从头到尾的输出,解决方案就是你在setup里面开头加入一个符合你手速的delay就可以了,比如delay(5000),让程序等你到打开串口在开始工作

maxims 发表于 2016-4-20 08:27:46

不能用官方的ide自带的串口功能。你用别的串口软件试试?

frankpian 发表于 2016-4-20 16:55:34

zjz5717 发表于 2016-4-19 18:14 static/image/common/back.gif
Arduino芯片的话在实际上就是只要你打开串口就自动之行复位,目的是方便你能够完成的看到程序从头到尾的输出 ...

原来如此,可是我根本就不一定延迟五秒就够用,这有什么其他的解决办法吗

frankpian 发表于 2016-4-20 16:56:03

maxims 发表于 2016-4-20 08:27 static/image/common/back.gif
不能用官方的ide自带的串口功能。你用别的串口软件试试?

我一直没用过IDE上的那个,太简易了

frankpian 发表于 2016-4-20 16:58:12

zjz5717 发表于 2016-4-19 18:14 static/image/common/back.gif
Arduino芯片的话在实际上就是只要你打开串口就自动之行复位,目的是方便你能够完成的看到程序从头到尾的输出 ...

如果我使用蓝牙无线串口,拔掉ARDUINO上的RX,只留TX行不行,这样他就不知道我连上了没

zjz5717 发表于 2016-4-20 17:35:23

frankpian 发表于 2016-4-20 16:55 static/image/common/back.gif
原来如此,可是我根本就不一定延迟五秒就够用,这有什么其他的解决办法吗

这这这,实在不行你可以延时10秒,15秒

zjz5717 发表于 2016-4-20 17:36:26

frankpian 发表于 2016-4-20 16:58 static/image/common/back.gif
如果我使用蓝牙无线串口,拔掉ARDUINO上的RX,只留TX行不行,这样他就不知道我连上了没

TX是发送端口,Arduino向蓝牙,向PC都是用TX,RX是接收端。。。

zjz5717 发表于 2016-4-20 17:36:42

frankpian 发表于 2016-4-20 16:58 static/image/common/back.gif
如果我使用蓝牙无线串口,拔掉ARDUINO上的RX,只留TX行不行,这样他就不知道我连上了没

没有明白你想干什么

frankpian 发表于 2016-4-20 17:43:10

zjz5717 发表于 2016-4-20 17:36 static/image/common/back.gif
没有明白你想干什么

我只想串口作为监视作用,只收不发

zjz5717 发表于 2016-4-20 17:47:57

frankpian 发表于 2016-4-20 17:43 static/image/common/back.gif
我只想串口作为监视作用,只收不发

如果只收不发的话,你可以只接TX口,这没有问题

xiaozeng 发表于 2016-4-24 17:31:19

我的电机也是 在下载程式时 它就全速转动,或者当打开串口监视器的时候,也一样的全速转动一下
页: [1]
查看完整版本: 打开串口为何会中断运行程序从头开始