本文介绍如何拆分多个文件来编译,文章后面包含一个实际案例;

首先明确的是,项目文件夹内,必须包含1个ino,1个.h文件,多个.cpp文件。

效果图

文件介绍

关于.ion文件: 必须要有。这个是创建项目后,保存即可生成。用来存放setup和loop的主要程序;

关于.h文件: 必须要有。没有这个,关联不了.cpp文件。所有.cpp文件都应包含这个头文件;

函数的声明,应当在.h里写好,这样可以省去cpp中函数的先后排序。因为ion里是可以乱序的,但是cpp不允许函数乱序!

关于.cpp文件: 不能是.c文件。c文件可以直接改后缀来使用;

经验1: 最好每个文件都包含#include “Arduino.h” 和 #include “config.h”,不需要的文件再注释掉,避免遗漏;

代码案例

main.ino

主程序,它无需包含Arduino.h头文件声明,自带了。但是需要声明config.h用来关联;

// #include "Arduino.h"#include "config.h"void setup(){Serial.begin (115200);pinMode (Led1, OUTPUT);pinMode (Key1, INPUT_PULLUP);}void loop(){ScanKey();if (KeyFlag == 1) {digitalWrite (Led1, !digitalRead (Led1) );Serial.println (str1[0]);Serial.println (str1[1]);}}

config.h

配置关联的头文件。除了.ion外,都应声明Arduino.h,否则一些指令API无法识别;

#include "Arduino.h"// #include "config.h"#define Led1 D8#define Key1 D7extern const char str1[][32];extern int KeyFlag;void ScanKey();

a.cpp

#include "Arduino.h"#include "config.h"int KeyFlag = 0;void ScanKey(){KeyFlag = 0;if ( !digitalRead (Key1) ) {delay (20);if ( !digitalRead (Key1) ) {KeyFlag = 1;}}while ( !digitalRead (Key1) );}

b.cpp

#include "Arduino.h"#include "config.h"const char str1[][32] = {"key1 is down", "led is change"};
  • 参考博文如何将Arduino的ino文件分解成多个.h和.cpp工程文件_一个ino文件一个cpp文件 烧录哪个_codalion的博客-CSDN博客