2014/8/5
今天尝试用库文件对程序进行封装
在c++6.0上完成了一个小的c++工程之后,开始尝试对我们arduino项目的主程序进行封装,
我将调用的库、使用的宏、定义的对象和变量、函数与主程序分开,尝试进行封装。
最初我只是分别将他们挪到一个库文件中,再在主程序之中#include<> 结果失败了。
我发现四个分开的库文件中的一些数据没法互访导致某些定义失效了,于是 如果一库需要二库的数据 我就在一库这种使用 #include<二库.h>的方式进行试验,
从编译器返回的问题来看起到了一定作用但还是 失败了,
目前还在想解决办法,有大神吗 求助
2014/8/6
第二次补充 看了n多arduino的库文件 和网上教程 ,发现都使用类的方式来进行处理 难道一定要这样才行吗 ?
暂时没其他头绪,准备尝试一下 但问题是源程序由多个传感器代码构成 数据很多 还是只有尝试了
如果我走入误区请大家指出
2014/8/13
终于解决了
过程 首先新建个工程, 然后在这里右上角 新建一个标签,它会提示输入新建文件的名字
我这里写个 sd.h 然后点好 这样我们就有了一个头文件 就可以在里面编写你需要封装的程序
在头文件里我们要用到条件编译命令
#ifndef 标示符
#define 标示符
程序段
#endif
如:#ifndef sd_H
#define sd_H
#include “Arduino.h”
void fun()
{
Serial.print(“hello world”);
}
#endif
#ifndef sd_H 语句会查找标示符 sd_H 是否在程序的其他位置被 #define 定义过 ,若没有被定义过,则定义该标示符。(为了防止重复地包含某文件,避免程序编译出错)
在头文件里完成函数写入之后 回到主程序
通过 #include “sd.h” 把头文件包括进去 //这里有两种文件包含方式 #include<文件名>或#include"文件名" 书上说两者实际效果一样,当使用<文件名>形式时,系统会优先在Arduino库文件中寻找目标文件,若没找到,系统再到当前Arduino 项目文件夹中查找文件,若没有找到,再查找 Arduino库文件 我的创建方式是放在同一个项目文件中 所以我使用 #include“sd.h” 但我改成 #include<sd.h> 却找不到包含头文件 原因我暂时还不清楚//
一个试例程序
#include"sd.h"
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
fun();
}
头文件
#ifndef sd_H
#define sd_H
#include "Arduino.h"
void fun()
{
Serial.print("hello world");
}
#endif
以上方法能进行简单的函数 常量 变量 的封装
但对于封装 某些 (#include<> 包含方式 )的时候就失败了
我尝试封装我的程序时 也新建了一个头文件 然后把要包含的库放到里面 之后再在主程序里包含这个头文件 想法是美好的
结果 出现没法使用这些库的问题 好像是没包含一样 其他封装都正常 无赖 只好放弃