假设有以下代码初始化Arduino板上的LCD显示屏:
#include <LiquidCrystal.h>
void LCDInit(){
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
}
void LCDPrint(String data){
lcd.print(data);
}
当我调用LCDInit()
时,它将初始化连接到Arduino的LCD显示器。
如果我尝试在一个单独的函数(例如LCDPrint()
)中打印一些文本到LCD上,它将不起作用,因为lcd
对象在一个单独的函数LCDInit()
中声明。
我的问题是如何使lcd
对象全局,以便在单独的函数中引用它将起作用?
global
关键字可以很容易地做到这一点,那么在c++中如何做到呢?#include <LiquidCrystal.h>
#include <memory>
std::unique_ptr<LiquidCrystal> lcd;
void LCDInit(){
lcd = std::make_unique<LiquidCrystal>(12, 11, 5, 4, 3, 2);
lcd->begin(16, 2);
lcd->setCursor(0, 0);
}
void LCDPrint(String data){
lcd->print(data);
}
:如果你不能使用std::unique_ptr
,那么就手动使用new
/delete
,例如:
#include <LiquidCrystal.h>
LiquidCrystal* lcd = nullptr;
void LCDInit(){
lcd = new LiquidCrystal(12, 11, 5, 4, 3, 2);
lcd->begin(16, 2);
lcd->setCursor(0, 0);
}
void LCDCleanup(){
delete lcd; lcd = nullptr;
}
void LCDPrint(String data){
lcd->print(data);
}