打开串口为何会中断运行程序从头开始
本帖最后由 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);
}
}
因为在电路设计上和复位连一块了 Arduino芯片的话在实际上就是只要你打开串口就自动之行复位,目的是方便你能够完成的看到程序从头到尾的输出,解决方案就是你在setup里面开头加入一个符合你手速的delay就可以了,比如delay(5000),让程序等你到打开串口在开始工作 不能用官方的ide自带的串口功能。你用别的串口软件试试? zjz5717 发表于 2016-4-19 18:14 static/image/common/back.gif
Arduino芯片的话在实际上就是只要你打开串口就自动之行复位,目的是方便你能够完成的看到程序从头到尾的输出 ...
原来如此,可是我根本就不一定延迟五秒就够用,这有什么其他的解决办法吗 maxims 发表于 2016-4-20 08:27 static/image/common/back.gif
不能用官方的ide自带的串口功能。你用别的串口软件试试?
我一直没用过IDE上的那个,太简易了 zjz5717 发表于 2016-4-19 18:14 static/image/common/back.gif
Arduino芯片的话在实际上就是只要你打开串口就自动之行复位,目的是方便你能够完成的看到程序从头到尾的输出 ...
如果我使用蓝牙无线串口,拔掉ARDUINO上的RX,只留TX行不行,这样他就不知道我连上了没 frankpian 发表于 2016-4-20 16:55 static/image/common/back.gif
原来如此,可是我根本就不一定延迟五秒就够用,这有什么其他的解决办法吗
这这这,实在不行你可以延时10秒,15秒 frankpian 发表于 2016-4-20 16:58 static/image/common/back.gif
如果我使用蓝牙无线串口,拔掉ARDUINO上的RX,只留TX行不行,这样他就不知道我连上了没
TX是发送端口,Arduino向蓝牙,向PC都是用TX,RX是接收端。。。 frankpian 发表于 2016-4-20 16:58 static/image/common/back.gif
如果我使用蓝牙无线串口,拔掉ARDUINO上的RX,只留TX行不行,这样他就不知道我连上了没
没有明白你想干什么
zjz5717 发表于 2016-4-20 17:36 static/image/common/back.gif
没有明白你想干什么
我只想串口作为监视作用,只收不发 frankpian 发表于 2016-4-20 17:43 static/image/common/back.gif
我只想串口作为监视作用,只收不发
如果只收不发的话,你可以只接TX口,这没有问题 我的电机也是 在下载程式时 它就全速转动,或者当打开串口监视器的时候,也一样的全速转动一下
页:
[1]