Arduino 封装库
这里是一个在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 封装库的更多相关文章
- 【iCore3 双核心板】iCore3封装库及使用说明V1.0
iCore3封装库及使用说明下载链接: http://pan.baidu.com/s/1pLq23Qb iCore3 购买链接: https://item.taobao.com/item.htm?id ...
- 【原创】Capture CIS利用Access数据库建立封装库说明
1.在服务器端建立新空间,方便封装库以及数据库的归档存放 服务器路径:\\192.168.1.234\Share\STG_LIB,文件夹内容如下,其中Datesheet存放物料数据手册,Pcb_Lib ...
- Protel封装库
一.目录下面的一些封装库中,根据元件的不同封装我们将其封装分为二大类:一类是分立元件的封装,一类是集成电路元件的封装 1.分立元件类: 电容:电容分普通电容和贴片电容: 普通电容在Miscellane ...
- 打造属于自己的Altium Designer 3D封装库,不需要懂专门的三维设计软件
看到Andy_2020发的帖子“Altium Designer专题”之后,对Altium Designer的3D功能很感兴趣,着手自己做一个AD的3D封装库.刚开始按照Andy介绍的方法,学了两天So ...
- QF——iOS中的数据库操作:SQLite数据库,第三方封装库FMDB,CoreData
SQLite数据库: SQLite是轻量级的数据库,适合应用在移动设备和小型设备上,它的优点是轻量,可移植性强.但它的缺点是它的API是用C写的,不是面向对象的.整体来说,操作起来比较麻烦.所以,一般 ...
- Android 一个改进的okHttp封装库
一.概述 之前写了篇Android OkHttp完全解析 是时候来了解OkHttp了,其实主要是作为okhttp的普及文章,当然里面也简单封装了工具类,没想到关注和使用的人还挺多的,由于这股热情,该工 ...
- 第一百三十五节,JavaScript,封装库--拖拽
JavaScript,封装库--拖拽 封装库新增1个拖拽方法 /** tuo_zhuai()方法,将一个弹窗元素实现拖拽功能 * 注意:一般需要在css文件将元素里的某一个区块光标设置成提示可以拖拽, ...
- 第一百三十四节,JavaScript,封装库--遮罩锁屏
JavaScript,封装库--遮罩锁屏 封装库新增1个方法 /** zhe_zhao_suo_ping()方法,将一个区块元素设置成遮罩锁屏区块 * 注意:一般需要在css文件将元素设置成隐藏 ** ...
- 第一百三十三节,JavaScript,封装库--弹出登录框
JavaScript,封装库--弹出登录框 封装库,增加了两个方法 yuan_su_ju_zhong()方法,将获取到的区块元素居中到页面,chuang_kou_shi_jian()方法,浏览器窗口事 ...
随机推荐
- 应用框架的设计与实现——.NET平台(10 授权服务.CodeAccessSecurityAttribute)
以下内容转载自:http://blog.csdn.net/dongma_yifei/article/details/1533124 CodeAccessSecurityAttribute 是 Prin ...
- 《Linux内核设计与实现》读书笔记(十九)- 可移植性
linux内核的移植性非常好, 目前的内核也支持非常多的体系结构(有20多个). 但是刚开始时, linux也只支持 intel i386 架构, 从 v1.2版开始支持 Digital Alpha, ...
- Android开发笔记
Android 中国SDK: http://wear.techbrood.com/ Android SDK Manager 代理设置: http://www.cnblogs.com/sunzn/p/4 ...
- 深入理解java虚拟机【Java虚拟机类生命周期】
C/C++等纯编译语言从源码到最终执行一般要经历:编译.连接和运行三个阶段,连接是在编译期间完成,而java在编译期间仅仅是将源码编译为Java虚拟机可以识别的字节码Class类文件,Java虚拟机对 ...
- MongoDB中的字段类型Id
众所周知,在向MongoDB的集合中添加一条记录时,系统会自动增加一个字段名为"_id",类型为ObjectId的字段,其值为24位字符串,可以使用此值作为记录的唯一标识. 项目中 ...
- [ACM_数学] Fibonacci Nim(另类取石子,2-4组合游戏)
游戏规则: 有一堆个数为n的石子,游戏双方轮流取石子,满足: 1)先手不能在第一次把所有的石子取完: 2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍). ...
- Null 与 “” 的区别
说明:很多人有时候对于 null 和 "" 不是很清楚,结合其他人的文章,今天做下解释. String str1 = null; str引用为空 String str2 = &qu ...
- 在Servlet使用getServletContext()获取ServletContext对象出现java.lang.NullPointerException(空指针)异常的解决办法
今天遇到了一个在servlet的service方法中获取ServletContext对象出现java.lang.NullPointerException(空指针)异常,代码如下: 1 //获取Serv ...
- 结构体快排回顾(sort)
一般来说,我做竞赛的时候排序一般用快排 很快很方便 普通sort(从小到大) sort(a,a+n); 直接贴一段代码吧,包含了vector,sort,结构体等简单东西综合 #include < ...
- 解决JS传参中文乱码
function PopupFK(cNum,type){ var url = "contract!Paying.action"; url = url + "?contra ...