如何将已编写的库包含到Arduino自定义库中

5
我正在创建一个新的库以同时控制键盘和LCD。大部分代码似乎都可以编译,但当它到达定义LiquidCristal变量的行时,它会显示以下信息:
'LiquidCrystal'在创建自定义库时未命名类型。
这是我LCDKeypad.h内容的摘录。
// Include types & constants of Wiring core API
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#include "WConstants.h"
#endif

// Include LCD library
#include <LiquidCrystal.h>

错误出现在这一行:
private:
LiquidCrystal lcd( 8, 9, 4, 5, 6, 7 ); // <<-- Error

该库可以正常工作,创建简单的测试也没有问题,但当我创建一个库时出现了问题。 - Snake Sanders
2个回答

5

好的,我阅读了很多内容,发现一篇关于这个主题非常有趣的文章:

包含多个库

它说编译器不会搜索未在sketch文件中包含的库。要解决这个问题,需要在加载您的库之前强制编译器链接它们,例如在我的sketch中包含LiquidCrystal.h。

假设我的库“LCDkeypad”需要LiquidCrystal。我的主程序(sketch)需要包含LiquidCrystal才能为“LCDKeypad”库加载它。

现在,一个有趣的事情是使用前向声明,在我的LCDKeypad.h中我将声明"Class LiquidCrystal",但不包括该库。我会在LiquidCrystal.cpp和sketch中完成它。希望这很清楚。


这种行为几乎不直观,违背了面向对象和封装的所有思想,但至少该链接定义了如何解决问题。 - andig

1

有两种方法可以实现

  • 如果您正在编写自己的代码,只需创建头文件.h扩展名和相关的c代码作为name_c。在将其添加到主程序时,您需要在双引号中指定头文件名称。

代码:

#ifndef LCD_H
#define LCD_H

//Declaration of variable /functions
#endif
  • 如果你试图从链接中下载,请将代码粘贴到 D:\arduino\arduino\libraries 中。

错误问题:

  • 变量多次声明重叠。

  • 库函数重叠。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接