主要内容

创建液晶附加

这个例子展示了如何创建一个LCD插件库和显示“Hello World !”“LCD。液晶显示器的更多信息,请参阅RGB背光液晶显示器

连接Arduino对液晶

这个例子向您展示了如何连接Arduino LCD显示®Uno董事会。你需要:

  • 一个Arduino Uno委员会

  • 这个设备从16 x2液晶相似Sparkfun

  • 10 k电位器

  • 电路试验板

  • 跨接电缆

你可以找到你Arduino的库文件对于本例支持包安装文件夹中金宝app\ arduinoio \ arduinoioexamples在哪里可以找到的完整路径使用命令吗

arduinoio。SPPKGRoot即fullfile (arduinoio。SPPKGRoot, arduinoioexamples)

连接液晶示意图所示:

确保你线针如下:

液晶销 Arduino销
1 (VSS) 地面
2 (VDD) 5伏
3 (V0) 中期销上的电位计
4 (RS) D7
5 (R / W) 地面
6 (E) D6
11 (DB4) D5 (PWM)
12 (DB5跑车) D4
13 (DB6) D3 (PWM)
推出(DB7 14日) D2
15(领导+) 5伏
16(领导) 地面

完成后,您的设置类似于:

创建c++头文件和包含第三方源文件

对于这个示例,创建一个头文件命名LCDAddon.h并将其保存+ arduinoioaddons / + ExampleLCD / src文件夹中。这个文件包中的所有方法库。

你可以找到你Arduino的库文件对于本例支持包安装文件夹中金宝app\ arduinoio \ arduinoioexamples在哪里可以找到的完整路径使用命令吗

arduinoio。SPPKGRoot即fullfile (arduinoio。SPPKGRoot, arduinoioexamples)

包括LibraryBase.h和第三方的头文件LiquidCrystal.h

# include“LibraryBase。h LiquidCrystal.h“# include

声明调试字符串使用const char。使用PROGMEM调试字符串存储到闪存设备,保存静态存储器

const char MSG_pLCD_CREATE_LCD_SHIELD [] PROGMEM = " Arduino: pLCD = new LiquidCrystal (% d % d % d % d % d % d); \ n”;const char MSG_pLCD_INITIALIZE_LCD_SHIELD [] PROGMEM = " Arduino: pLCD - >开始(% d % d); \ n”;const char MSG_pLCD_CLEAR_LCD_SHIELD [] PROGMEM = " Arduino: pLCD - >清除();\ n”;const char MSG_pLCD_PRINT [] PROGMEM = " Arduino: pLCD - >打印(% s); \ n”;const char MSG_SET_CURSOR_LCD_SHIELD [] PROGMEM = " Arduino: pLCD - > setCursor (% d % d); \ n”;const char MSG_pLCD_DELETE_LCD_SHIELD [] PROGMEM = " Arduino:删除pLCD; \ n”;

定义命令id匹配在MATLAB中定义的那些®类。

#定义LCD_CREATE 0 x00 # define LCD_INITIALIZE 0 x01 # define LCD_CLEAR 0 x02 # define LCD_PRINT 0 x03 # define LCD_DELETE 0 x04字节cursorRow = 0;

创建构造函数,定义了库的名字。声明库调试字符串和注册服务器。

类液晶:公共LibraryBase{公众:LiquidCrystal * pLCD;公众:液晶(MWArduinoClass&){库名=“ExampleShield / LCD”;a.registerLibrary(这个);}

覆盖设置方法重置光标在第一行初始化。

无效的设置(){cursorRow = 0;}

覆盖commandHandler和每个命令映射到相应的方法。对于这个示例,地图的命令:

情况下 命令 描述
0 x00 LCD_CREATE 定义针使用的液晶
0 x01 LCD_INITIALIZE 设置列和行
0 x02 LCD_CLEAR 清除液晶屏
0 x03 LCD_PRINT 打印信息在液晶上
0 x04 LCD_DELETE 删除LCD对象

创建一个LCD对象。初始化液晶和分配行和列的输入。使用debugPrint跟踪消息打印到MATLAB命令行帮助你调试代码Arduino设备上运行。

了解更多关于命令处理程序命令处理程序

公众:void commandHandler(字节cmdID,字节* dataIn, unsigned int payloadSize){开关(cmdID){案例LCD_CREATE: / / createLCD{字节* pinNumbers =新的字节[6];(字节= 0;我< 6;我+ 1)= {pinNumbers[我]= dataIn[我];}createLCDObject (pinNumbers [0], pinNumbers [1], pinNumbers [2], pinNumbers [3], pinNumbers [4], pinNumbers [5]);sendResponseMsg (cmdID, 0, 0);打破;}案例LCD_INITIALIZE: / / initializeLCD {unsigned int行= dataIn [0];无符号整数关口= dataIn [1];initializeLCD(行,关口); clearLCD(); sendResponseMsg(cmdID, 0, 0); break; }

清晰的LCD屏幕。

案例LCD_CLEAR: / / clearLCD {clearLCD ();cursorRow = 0;setCursor (0, cursorRow);sendResponseMsg (cmdID, 0, 0);打破;}

创建一个命令,需要一个输入并打印在液晶屏幕上。

案例LCD_PRINT: / / printLCD{字节* val = {dataIn};/ /最后一个字节的行数初始化/ /最后一个2字节的数量列初始化字符消息(payloadSize-1);(字节k = 0;k < (payloadSize-2);k = k + 1){消息[k] = val [k];消息[payloadSize-2]} = ' \ 0 ';字节关口=瓦尔(payloadSize-2);字节行=瓦尔(payloadSize-1);如果(cursorRow + 1 >行){cursorRow = 0;clearLCD (); } setCursor(0,cursorRow); printLCD(message); cursorRow++; sendResponseMsg(cmdID, 0, 0); break; }

删除LCD对象。

案例LCD_DELETE: / /删除{deleteLCDobject ();/ /重置鼠标位置上第一行删除cursorRow = 0;sendResponseMsg (cmdID, 0, 0);打破;默认}:{/ /不打破;}

包装LiquidCrystal方法添加调试信息。

公众:void createLCDObject (unsigned int rs, unsigned int启用,unsigned int d0, unsigned int d1, d2 unsigned int, unsigned int d3) {pLCD = new LiquidCrystal (rs,启用、d0 d1, d2, d3);debugPrint (MSG_pLCD_CREATE_LCD_SHIELD、rs、启用、d0 d1, d2、d3);}无效initializeLCD(无符号整数关口,unsigned int行){pLCD - >开始(关口、行);debugPrint (MSG_pLCD_INITIALIZE_LCD_SHIELD关口,行);}无效clearLCD () {pLCD - >明确();debugPrint (MSG_pLCD_CLEAR_LCD_SHIELD);}无效printLCD消息(char []) {pLCD - >打印(消息);debugPrint (MSG_pLCD_PRINT、消息);}无效setCursor(字节列,字节行){pLCD - > setCursor(列,行);debugPrint (MSG_SET_CURSOR_LCD_SHIELD、列、行); } void deleteLCDobject() { delete pLCD; debugPrint(MSG_pLCD_DELETE_LCD_SHIELD); } };

创建MATLAB附加包装

这个例子显示了如何创建LCDAddon.mMATLAB包装类文件并保存它C: \ \ + arduinoioaddons \ + ExampleLCD工作文件夹中。

你可以找到你Arduino的库文件对于本例支持包安装文件夹中金宝app\ arduinoio \ arduinoioexamples在哪里可以找到的完整路径使用命令吗

arduinoio。SPPKGRoot即fullfile (arduinoio。SPPKGRoot, arduinoioexamples)

创建MATLAB类,LCDAddon,继承自matlabshared.addon.LibraryBase

classdefLCDAddon < matlabshared.addon.LibraryBase

定义定制的命令id液晶类的所有公共方法发送到服务器。

属性(=私人访问,常数= true) LCD_CREATE = hex2dec (“00”)LCD_INITIALIZE = hex2dec (“01”)LCD_CLEAR = hex2dec (“2”)LCD_PRINT = hex2dec (“03”)LCD_DELETE = hex2dec (“04”)结束

覆盖常量属性类包括必要的头和第三方源文件。

属性(访问=保护,恒= true) LibraryName =“ExampleLCD / LCDAddon”DependentLibraries = {} LibraryHeaderFiles =“LiquidCrystal / LiquidCrystal.h”CppHeaderFile = fullfile (arduinoio.FilePath (mfilename (' fullpath ')),“src”,“LCDAddon.h”)CppClassName =“液晶”结束属性(访问=私人)ResourceOwner =“ExampleLCD / LCDAddon”;行,列结束
  • DependentLibraries必须包含所有其他库需要使用您的自定义库。

  • LibraryHeaderFiles必须是一个字符串,从库名称,后跟一个斜杠(/),然后头文件的名字。如果你需要多个头文件,指定一个字符串单元阵列。

  • CppHeaderFile必须是LCDAddon.h完整路径。取代LCDAddon.h与您的自定义文件名在您创建它,并将其保存到src文件夹中ExampleLCD文件夹中。

  • CppClassName必须确切的类名中定义吗LCDAddon.h

为每个方法指定附加组件支持的命令id创建金宝app。指定连接到液晶的针,并定义一个错误如果资源数多0。在这个示例中,您可以添加只有一个LCD,因此当务之急是你管理你的销资源计数。

方法(隐藏、访问=公共)% InputPins用户输入,并包含针连接LCD数据大头针和arduino函数obj = LCDAddon (parentObj变长度输入宗量)如果(输入参数个数< 7)matlabshared.hwsdk.internal.localizedError (MATLAB: narginchk: notEnoughInputs);elseif输入参数个数> 7 matlabshared.hwsdk.internal.localizedError (MATLAB: narginchk: tooManyInputs);结束试一试p = inputParser;addParameter (p,“RegisterSelectPin”[]);addParameter (p,“EnablePin”[]);addParameter (p,“DataPins”[]);解析(p,变长度输入宗量{1:结束});e throwAsCaller (e);结束obj。父母= parentObj;obj。RegisterSelectPin = p.Results.RegisterSelectPin;obj。EnablePin = p.Results.EnablePin;obj。DataPins = p.Results.DataPins;inputPins = [cellstr (obj.RegisterSelectPin) cellstr (obj.EnablePin) obj.DataPins];obj。Pins = inputPins; count = getResourceCount(obj.Parent,obj.ResourceOwner);%因为这个例子只允许实现1液晶%的盾牌,错误如果资源数大于0如果数> 0错误(“你只能有1液晶盾”);结束incrementResourceCount (obj.Parent obj.ResourceOwner);createLCD (obj inputPins);结束

设备(如Arduino Uno有限数量的针,需要你管理资源分配。因此,您最多只能创建一个LCD对象。有关更多信息,请参见getResourceOwner

写一个createLCD方法执行以下功能:

  • 储备Arduino的大头针连接到液晶和所使用的库。保留阻止其他函数使用这些针,让你的图书馆专用的别针。

  • 向服务器发送命令,包括销数据,使用sendCommand

函数createLCD (obj inputPins)试一试cmdID = obj.LCD_CREATE;iLoop = inputPins configurePinResource (obj.Parent, iLoop {:}, obj.ResourceOwner,“保留”);结束终端= getTerminalsFromPins (obj.Parent inputPins);sendCommand (obj obj。LibraryName cmdID,终端);e throwAsCaller (e);结束结束结束

重载析构函数删除液晶类方法释放保留针和减量液晶资源计数。

方法(访问=保护)函数删除(obj)试一试parentObj = obj.Parent;%明显的针被配置为LCD盾牌inputPins = [cellstr (obj.RegisterSelectPin) cellstr (obj.EnablePin) obj.DataPins];iLoop = inputPins configurePinResource (parentObj, iLoop {:}, obj.ResourceOwner,“设置”);结束%递减的资源数液晶decrementResourceCount (parentObj obj.ResourceOwner);cmdID = obj.LCD_DELETE;输入= [];sendCommand (obj obj。LibraryName cmdID,输入);%不把错误消灭。%,这可能导致一个不完整的建设。结束结束结束

请注意

不要把错误当你消灭的对象。

初始化液晶与特定的行和列的数量,和清晰的液晶显示屏。

方法(=公共访问)函数p = inputParser initializeLCD (obj,变长度输入宗量);p。PartialMatching = true;addParameter (p,“行”2);addParameter (p,“列”16);解析(p,变长度输入宗量{:});输出= p.Results;obj。行= output.Rows;obj。列= output.Columns;输入=[输出。列output.Rows];cmdID = obj.LCD_INITIALIZE; sendCommand(obj, obj.LibraryName, cmdID, inputs);结束

清晰的液晶。

函数clearLCD (obj) cmdID = obj.LCD_CLEAR;输入= [];sendCommand (obj obj。LibraryName cmdID,输入);结束

打印信息在液晶上。这个例子使用一个16 x2液晶屏,不能打印超过16个字符。

函数printLCD (obj,消息)cmdID = obj.LCD_PRINT;如果元素个数(消息)> 16个错误(“不能超过16个字符打印”)结束输入=[(消息)obj的两倍。列obj.Rows];sendCommand (obj obj。LibraryName cmdID,输入);结束结束结束

注册自定义库和运行MATLAB代码

使用头文件创建注册自定义库和运行示例。

你可以找到你Arduino的库文件对于本例支持包安装文件夹中金宝app\ arduinoio \ arduinoioexamples在哪里可以找到的完整路径使用命令吗

arduinoio。SPPKGRoot即fullfile (arduinoio。SPPKGRoot, arduinoioexamples)

添加工作文件夹,其中包含的位置+ arduinoioaddons到MATLAB路径。例如:

目录“C: \工作”);

确保ExampleLCD / LCDAddon图书馆是可用的。

listArduinoLibraries
ans = ' Adafruit / MotorShieldV2 ' ' ExampleLCD / LCDAddon I2C的SPI的“伺服”

提示

如果您没有看到您的插件库列表中,看到的定制Arduino库问题为更多的信息。

创建一个arduino对象指定ExampleLCD / LCDAddon图书馆。集ForceBuildOn真正的重组董事会。

一个= arduino (“com5”,“uno”,“库”,“ExampleLCD / LCDAddon”,“ForceBuildOn”,真正的);
= arduino的属性:端口:“COM5”:“Uno”AvailablePins: {‘D2-D13’,‘A0-A5} AvailableDigitalPins: {‘D2-D13’,‘A0-A5} AvailablePWMPins: {‘D3’,‘D5-D6’,‘D9-D11} AvailableAnalogPins: {“A0-A5”} AvailableI2CBusIDs:[0]库:{' ExampleLCD / LCDAddon '}

创建LCD对象,并指定你Arduino设备上配置的别针。

液晶=插件(,“ExampleLCD / LCDAddon”,“RegisterSelectPin”,“D7”,“EnablePin”,“D6”,“DataPins”,{“D5”,“D4”,“D3”,“D2”});

初始化液晶。

initializeLCD (lcd);

打印一个字符串到LCD。

printLCD (lcd,“Hello World !”);

如果您没有看到一个液晶显示,试着把旋钮电位器调整对比度。

清晰的液晶。

clearLCD (lcd);