在 arduino 上的类中使用LiquidCrystal_I2C
Use LiquidCrystal_I2C in a class on arduino
我想在 cpp 中为 arduino uno 创建一个在显示器上写入的类。我正在使用LiquidCrystal_I2C库,但我不能在我的课堂上使用它。我知道如何在没有类的情况下做到这一点,但现在我想建立一个类,但我无法让它工作。
我的 .h 文件:
// WriteDisplay.h
#ifndef _WRITEDISPLAY_h
#define _WRITEDISPLAY_h
#if defined(ARDUINO) && ARDUINO >= 100
#include "arduino.h"
#else
#include "WProgram.h"
#endif
#include <Wire/Wire.h>
#include <LiquidCrystal_I2C2004V1/LiquidCrystal_I2C.h>
class WriteDisplayClass
{
public:
WriteDisplayClass();
void write(String text);
private:
LiquidCrystal_I2C lcd(0x27,20,4);
};
extern WriteDisplayClass WriteDisplay;
#endif
我.cpp:
#include "WriteDisplay.h"
WriteDisplayClass::WriteDisplayClass()
{
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
}
WriteDisplayClass::write(String text)
{
lcd.clear();
lcd.print(text);
}
WriteDisplayClass WriteDisplay;
我的 .ino:
#include "WriteDisplay.h"
WriteDisplayClass wdc;
void setup()
{
wdc.write("Hello World");
}
void loop()
{
}
我正在使用带有Visual Micro的AtmelStudio。当我只使用我的 .ino-file 时,我让它工作,但我不能在 cpp 中做同样的事情。我收到找不到 LiquidCrystal_I2C.h 之类的错误。我应该怎么做才能让它按照我想要的方式工作?或者甚至可能吗?
谢谢你的回答。
对不起,我第一次看错了这个问题。
要在 Arduino 草图的.cpp文件中使用库,还必须将它们包含在主 .ino 文件中。只有在 .ino 中找到它们才会被编译
您可以手动添加包含或使用"项目>添加/导入草图库"菜单项,这会将它们添加到 .ino 中。
根据这篇文章,你的代码问题与被实例化为全局的类有关。问题来了,编译器不保证全局变量处理的顺序,所以为了保证与显示相关的对象在所有库对象之后最后执行,你必须在 setup()
函数中实例化它!
.ino 代码的解决方案是设置一个全局指针,然后在 setup()
函数中分配对象,如下所示:
#include "WriteDisplay.h"
WriteDisplayClass *wdc;
void setup()
{
wdc = new WriteDisplayClass();
wdc->write("Hello World");
}
void loop()
{
}
相关文章:
- 使用 C++ 和 i2c 工具从虚拟 i2c 写入和读取
- 当 I2C 值在C++中发生变化时收到通知
- I2C 文件描述符上的 I2C 总线可写/可读标志
- 两种访问I2C总线的方法有什么区别?
- 如何获取引脚 4 的值,以便也发送到从站并使用 I2C 显示?
- 我想使用 I2C 接收从 arduino 到 raspberry pi 的多个数据
- I2C 错误:"i2c_smbus_read_byte_data"未在此范围内声明
- ESP8266 I2C 从站不确认数据
- Raspberry Pi Arduino I2C communication
- ATMega328P 和 ESP8266ex 之间的 I2c 通信只能发送 8 个字节,错误?
- 快速 I2C 连接,迁移到新磁带库
- 正确格式化I2C的数据(Wire.write)
- 带有SoftWire(I2C Emulator)库的多个tcs34725 arduino颜色传感器
- I2C SMBUS滤波器功能损坏变量
- C I2C芯片读取MCP9800突然开始失败
- I2C dev:更改写入和读取参数
- Raspberry Pi和I2C在c++中与PCF8591的布线Pi
- 通过I2C增加传感器采样率
- 使用运算符进行I2c操作
- i2c中的字节指针数组