这里是一个在Arduino平台下将常用的代码以库的形式封装的示例。

第一步:在Arduino的安装目录下的对应目录建立文件夹 C:\Program Files (x86)\Arduino\libraries\CMRConfig

第二部:添加2个文件 CMRConfig.h CMRConfig.cpp, 代码如下。

/*
* 配置类,数据保存在 Mega2560 的EEPROM中。
*
* [0,63] 保存集中器的CID
* [64,127] 保存集中器上访的ServerIP地址和端口
* [2048,4095] 保存从机的ID列表
*/ #ifndef CONFIG_H
#define CONFIG_H #include <Arduino.h>
#include <EEPROM.h> class CMRConfig {
public:
String getCID();
void setCID(String value);
String getMBusIds();
void setMBusIds(String value);
String getServerInfo();
void setServerInfo(String value);
private:
String getString(int start, int end);
void setString(String value, int start, int end);
}; #endif
#include "CMRConfig.h"

String CMRConfig::getCID()
{
return getString(0, 64);
} void CMRConfig::setCID(String value)
{
setString(value, 0, 64);
} String CMRConfig::getMBusIds()
{
return getString(2048, 2048);
} void CMRConfig::setMBusIds(String value)
{
setString(value, 2048, 2048);
} String CMRConfig::getServerInfo()
{
return getString(64, 64);
} void CMRConfig::setServerInfo(String value)
{
setString(value, 64, 64);
} String CMRConfig::getString(int start, int maxLength)
{
String result = "";
for (int i = start; i < start + maxLength; i++) {
char c = (char)EEPROM.read(i);
if (c == '\n') break;
result += c;
}
return result;
} void CMRConfig::setString(String value, int start, int maxLength)
{
if(!(value.endsWith("\n") && value.length() <= maxLength))
{
value = value.substring(0, maxLength - 1) + '\n';
}
int len = value.length();
for (int i = start; i < start + len; i++) {
EEPROM.write(i, value.charAt(i));
}
}

第三步:使用示例,代码如下。

#include <CMRConfig.h>
#include <EEPROM.h> CMRConfig cfg; void setup() {
Serial.begin(9600);
String cid = "im cid";
cfg.setCID(cid);
Serial.println(cfg.getCID());
} void loop() {
// put your main code here, to run repeatedly: }

  

Arduino 封装库的更多相关文章

  1. 【iCore3 双核心板】iCore3封装库及使用说明V1.0

    iCore3封装库及使用说明下载链接: http://pan.baidu.com/s/1pLq23Qb iCore3 购买链接: https://item.taobao.com/item.htm?id ...

  2. 【原创】Capture CIS利用Access数据库建立封装库说明

    1.在服务器端建立新空间,方便封装库以及数据库的归档存放 服务器路径:\\192.168.1.234\Share\STG_LIB,文件夹内容如下,其中Datesheet存放物料数据手册,Pcb_Lib ...

  3. Protel封装库

    一.目录下面的一些封装库中,根据元件的不同封装我们将其封装分为二大类:一类是分立元件的封装,一类是集成电路元件的封装 1.分立元件类: 电容:电容分普通电容和贴片电容: 普通电容在Miscellane ...

  4. 打造属于自己的Altium Designer 3D封装库,不需要懂专门的三维设计软件

    看到Andy_2020发的帖子“Altium Designer专题”之后,对Altium Designer的3D功能很感兴趣,着手自己做一个AD的3D封装库.刚开始按照Andy介绍的方法,学了两天So ...

  5. QF——iOS中的数据库操作:SQLite数据库,第三方封装库FMDB,CoreData

    SQLite数据库: SQLite是轻量级的数据库,适合应用在移动设备和小型设备上,它的优点是轻量,可移植性强.但它的缺点是它的API是用C写的,不是面向对象的.整体来说,操作起来比较麻烦.所以,一般 ...

  6. Android 一个改进的okHttp封装库

    一.概述 之前写了篇Android OkHttp完全解析 是时候来了解OkHttp了,其实主要是作为okhttp的普及文章,当然里面也简单封装了工具类,没想到关注和使用的人还挺多的,由于这股热情,该工 ...

  7. 第一百三十五节,JavaScript,封装库--拖拽

    JavaScript,封装库--拖拽 封装库新增1个拖拽方法 /** tuo_zhuai()方法,将一个弹窗元素实现拖拽功能 * 注意:一般需要在css文件将元素里的某一个区块光标设置成提示可以拖拽, ...

  8. 第一百三十四节,JavaScript,封装库--遮罩锁屏

    JavaScript,封装库--遮罩锁屏 封装库新增1个方法 /** zhe_zhao_suo_ping()方法,将一个区块元素设置成遮罩锁屏区块 * 注意:一般需要在css文件将元素设置成隐藏 ** ...

  9. 第一百三十三节,JavaScript,封装库--弹出登录框

    JavaScript,封装库--弹出登录框 封装库,增加了两个方法 yuan_su_ju_zhong()方法,将获取到的区块元素居中到页面,chuang_kou_shi_jian()方法,浏览器窗口事 ...

随机推荐

  1. C#调用阿里云CDN API刷新缓存

    使用CDN必须要解决CDN缓存的问题,要么在每次更新文件时生成不同的URL,要么在每次更新文件时刷新CDN缓存.我们在一个实际应用场景中用到了后者,所以需要调用阿里云CDN的API进行缓存刷新的操作. ...

  2. [ACM_其他] Modular Inverse [a关于模m的逆 模线性方程]

    Description The modular modular multiplicative inverse of an integer a modulo m is an integer x such ...

  3. [游戏模版4] Win32 显示鼠标位置

    >_<:use MOUSE_MOVE message refresh the position information. >_<:use LOWORD(lParam) get ...

  4. jenkins插件 查看job修改历史

    文章来自:http://www.ciandcd.com文中的代码来自可以从github下载: https://github.com/ciandcd 插件jobConfigHistory(https:/ ...

  5. [Python爬虫] 在Windows下安装PhantomJS和CasperJS及入门介绍(上)

    最近在使用Python爬取网页内容时,总是遇到JS临时加载.动态获取网页信息的困难.例如爬取CSDN下载资源评论.搜狐图片中的“原图”等,此时尝试学习Phantomjs和CasperJS来解决这个问题 ...

  6. C语言实现二叉树-04版

    二叉树,通常应当是研究其他一些复杂的数据结构的基础.因此,通常我们应该精通它,而不是了解:当然,可能并不是每个人都认同这种观点,甚至有些人认为理解数据结构就行了!根本没有必要去研究如何实现,因为大多数 ...

  7. js运动:分享到

    定时器及运动函数的使用. <!-- Author: XiaoWen Create a file: 2016-12-14 09:41:11 Last modified: 2016-12-14 10 ...

  8. Python面试题(二)

    打印九九乘法表 思路:利用字符串的连接,梯形输出结果 >>> def st(num): ... l = [] ... for x in xrange(1, num + 1): ... ...

  9. 部分设备在微信内无法播放audio的解决方案

    临时接到一个紧急的需求,一个活动页面,在某台iPhone 5S设备上无法播放音频,其它设备均正常.我接到这个任务时,也是一脸懵逼,试过在audio标签上添加controls属性来显示audio,结果发 ...

  10. Javascript:常用函数封装

    //cookie function setCookie(name, value, iDay) { if(iDay!==false) { var oDate=new Date(); oDate.setD ...