Arduino 封裝庫

這裏是一個在Arduino平臺下將經常使用的代碼以庫的形式封裝的示例。oop

 

第一步:在Arduino的安裝目錄下的對應目錄創建文件夾 C:\Program Files (x86)\Arduino\libraries\CMRConfigui

第二部:添加2個文件 CMRConfig.h CMRConfig.cpp, 代碼以下。code

/*
 * 配置類,數據保存在 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));
	}
}

 

第三步:使用示例,代碼以下。blog

#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:

}
相關文章
相關標籤/搜索