再次谈一下串口,主要是因为前面遇到了一个小问题。现在,这个问题早已经解决,但是还是觉得可以总结整理一下。

         我遇到的主要问题是:我把串口的功能分离到了一个独立的文件之后,发现串口对象无法使用了。

         在描述问题之前,先看看最简单的串口使用方式:

void setup()

{

// put your setup code here, to run once:

Serial.begin(9600);

}



void loop()

{

// put your main code here, to run repeatedly:

Serial.println("arduino");

delay(1000);

}

         这个程序的执行效果:

097_再次尝试Arduino串口_#define

         这就是一个最简单的使用方式,这里我们用到了一个名称叫做Serial的对象。如果做一下代码分离,增加一个包含serial.cpp以及serial.h的模块。原来的文件内容如下:

#include "serial.h"



void setup()

{

// put your setup code here, to run once:

MySerialInit();

}



void loop()

{

// put your main code here, to run repeatedly:

Serial.println("arduino");

delay(1000);

}

         Serial.cpp内容如下:

#include "serial.h"



void MySerialInit(void)

{

Serial.begin(9600);

}



Serial.h内容如下:

#ifndef SERIAL_H

#define SERIAL_H



void MySerialInit(void);



#endif

         编译效果:

097_再次尝试Arduino串口_#include_02

         很显然是少了一个头文件包含,Arduino的IDE帮我们做好了很多工作。之前串口的时候记得还有几行代码:

#include "SoftwareSerial.h"



SoftwareSerial my_serial(10, 11);

         或许我该增加这个头文件的包含?如下修改:

Serial.cpp

#include "serial.h"



SoftwareSerial Serial(10, 11);



void MySerialInit(void)

{

Serial.begin(9600);

}

Serial.h


#ifndef SERIAL_H

#define SERIAL_H



#include "SoftwareSerial.h"



void MySerialInit(void);



#endif

         再次编译,编译失败:

097_再次尝试Arduino串口_#include_03

         后来,我查看了安装目录下的各种文件发现:其实我们一直用的Serial对象是HardwareSerial.h中的。这样,只需要修改一下头文件包含第一份代码便可以实现串口输出。至于软件串口,我自己目前还没有实现,或许还是需要继续探索下。

 ​