再次谈一下串口,主要是因为前面遇到了一个小问题。现在,这个问题早已经解决,但是还是觉得可以总结整理一下。
我遇到的主要问题是:我把串口的功能分离到了一个独立的文件之后,发现串口对象无法使用了。
在描述问题之前,先看看最简单的串口使用方式:
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);
}
这个程序的执行效果:

这就是一个最简单的使用方式,这里我们用到了一个名称叫做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
编译效果:

很显然是少了一个头文件包含,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
再次编译,编译失败:

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
















