arduino 串口命令解析
/*
DS3231_test.pde
Eric Ayars
4/11 Test/demo of read routines for a DS3231 RTC. Turn on the serial monitor after loading this to check if things are
working as they should. */ #include <DS3231.h>
#include <Wire.h>
#include <EEPROM.h> #define powerPin 7
DS3231 Clock; String ReceivedCache="";
String BTime="2010-07-24 11:15:00";
String ETime="2010-07-24 11:15:00";
boolean isFire=false; void setup() {
// Start the I2C interface
Wire.begin();
Clock.setClockMode(false);
Serial.begin();
pinMode(powerPin,OUTPUT);
digitalWrite(powerPin,LOW);
Clock.turnOnAlarm();
RetrieveFireSet();
} void loop() { handleCmd();
checkFire();
} void checkFire(){
String dateTime=GetTime();
if(dateTime>=BTime && dateTime<=ETime){
digitalWrite(powerPin,HIGH);
isFire=true;
}else{
digitalWrite(powerPin,LOW);
isFire=false;
}
} String formatNum(int a){
if(a<)return "" +(String)a;
return (String)a;
} String GetTime(){
bool Century=false;
bool h12=false;
bool PM=false;
int second,minute,hour,date,month,year,temperature;
second=Clock.getSecond();
minute=Clock.getMinute();
hour=Clock.getHour(h12, PM);
date=Clock.getDate();
month=Clock.getMonth(Century);
year=Clock.getYear(); String dateTime="" +formatNum(year) +"-"
+formatNum(month) +"-"
+formatNum(date) +" "
+formatNum(hour) +":"
+formatNum(minute)+":"
+formatNum(second);
return dateTime;
} void handleGetTime(){ String dateTime=GetTime();
Serial.println("OK:"+dateTime); }
void handleSetTime(){ int second,minute,hour,date,month,year,dayOfWeek;
String dateTime=ReceivedCache.substring(,); year =dateTime.substring(,).toInt();
month =dateTime.substring(,).toInt();
date=dateTime.substring(,).toInt(); hour=dateTime.substring(,).toInt();
minute=dateTime.substring(,).toInt();
second=dateTime.substring(,).toInt();
dayOfWeek=dateTime.substring(,).toInt();
Clock.setSecond(second);//Set the second
Clock.setMinute(minute);//Set the minute
Clock.setHour(hour); //Set the hour
Clock.setDoW(dayOfWeek); //Set the day of the week
Clock.setDate(date); //Set the date of the month
Clock.setMonth(month); //Set the month of the year
Clock.setYear(year); //Set the year (Last two digits of the year) Serial.println("OK:");
} void handleGetFire(){
String tmp=_ReadFireSet();
if(tmp==""){
Serial.println("EE:fire time not set!");
}else{
Serial.println("OK:" + tmp);
}
} void handleSetFire(){ for(int address=;address<;address++){
EEPROM.write(address,(byte)ReceivedCache[address]);
//Serial.print((char)EEPROM.read(address));
}
//Serial.println("");
String bTime=ReceivedCache.substring(,);
String eTime=ReceivedCache.substring(,);
bool flag=RetrieveFireSet();
// Serial.println("flag:" + (String)flag);
if(flag && (bTime==BTime && eTime==ETime)){
Serial.println("OK:");
}else{
Serial.println("EE:Set Fail");
}
} String _ReadFireSet(){
int address=;
String tmp="";
char readChar=' ';
for(int address=;address<;address++){
readChar=(char)EEPROM.read(address);
tmp +=readChar;
} if(tmp!="SetF:"){
return "";
} tmp="";
for(int address=;address<;address++){
readChar=(char)EEPROM.read(address);
tmp +=readChar;
}
//Serial.println(tmp);
return tmp;
} bool RetrieveFireSet(){
String tmp=_ReadFireSet();
if(tmp==""){
return false;
}else{
BTime=tmp.substring(,);
ETime=tmp.substring(,);
return true;
}
} //read Serial data and hand command
//
void handleCmd(){
char readChar=' '; while(Serial.available()>){
readChar=(char)Serial.read();
ReceivedCache =ReceivedCache+ (String)readChar;
//delayMicroseconds(10);
}
//Serial.println("ABC");
// Serial.println(ReceivedCache);
if(ReceivedCache.startsWith("GetT:")){
handleGetTime();
ReceivedCache=ReceivedCache.substring(); }else if(ReceivedCache.startsWith("SetT:")){
//like->SetT:2015-07-24 16:54:23,7
if(ReceivedCache.length()>=){
handleSetTime();
ReceivedCache=ReceivedCache.substring();
}
}else if(ReceivedCache.startsWith("GetS:")){
Serial.println("OK:"+(String)isFire);
ReceivedCache=ReceivedCache.substring();
}else if(ReceivedCache.startsWith("GetF:")){
handleGetFire();
ReceivedCache=ReceivedCache.substring();
}else if(ReceivedCache.startsWith("SetF:")){
if(ReceivedCache.length()>=){
handleSetFire();
ReceivedCache=ReceivedCache.substring();
}
}else if(ReceivedCache.startsWith("GetC:")){
int temperature=Clock.getTemperature();
Serial.println("OK:" +(String)temperature);
ReceivedCache=ReceivedCache.substring();
}
else{
if(ReceivedCache.length()>=){
ReceivedCache="";
}
} if(readChar=='\n')ReceivedCache="";
}
arduino 串口命令解析的更多相关文章
- 邵国际: C 语言对象化设计实例 —— 命令解析器
本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 邵国际 来源: 微信公众号linux阅码场(id: linuxdev) 内容简介 单片机工程师常常疑惑为什么 ...
- win10上使用php与python实现与arduino串口通信
注意: php 需要php7,安装及开启php_dio.dll com口按照实际的进行设置,如果不知道可以打开arduino编辑器进行查看 可以与用户实现命令行交互,但是效率过慢,不清楚如何优化,使用 ...
- linux mknod命令解析
linux mknod命令解析 http://www.cnblogs.com/cobbliu/archive/2011/07/05/2389014.html mknod:make node 生成设备 ...
- C#基础:命令解析
1.普通格式命令的解析 例如: RENA<SP>E:\\A.txt<SP>C:\\B.txt<CRLF> (SP -> 空格,CRLF -> 回车加换行 ...
- Appium Android Bootstrap源码分析之命令解析执行
通过上一篇文章<Appium Android Bootstrap源码分析之控件AndroidElement>我们知道了Appium从pc端发送过来的命令如果是控件相关的话,最终目标控件在b ...
- virsh的详细命令解析(一)
virsh的详细命令解析 virsh 有命令模式和交互模式如果直接在vrish后面添加参数是命令模式,如果直接写virsh,就会进入交互模式 virsh list 列出所有的虚拟机,虚拟机的状态有(8 ...
- IIC读写AT24C02代码2——串口命令控制多页读写
通过串口输入 R .W 进行控制程序读写IIC设备.波特率9600bps,晶振115200HZ. main.c /*------------------------------------------ ...
- (转)Linux命令:使用dig,nslookup命令解析域名
Linux命令:使用dig命令解析域名 Linux下解析域名除了使用nslookup之外,开可以使用dig命令来解析域名,dig命令可以得到更多的域名信息. dig的全称是 (domain infor ...
- angular-cli.json配置参数解析,常用命令解析
1.angular-cli.json配置参数解析 { "project": { "name": "ng-admin", //项目名称 &qu ...
随机推荐
- FDConnection
FDConnection 利用FDConnection获取信息,不用放query控件也可以. FDConnection1.GetTableNames('', '', '', List); FD ...
- xe7 c++builder 日期时间头文件函数大全 date
c++builde r时间日期函数大全,在头文件System.DateUtils.hpp,不过没有IncMonth,因为这个函数定义在System.SysUtils.hpp里头了,唉 date,dat ...
- jsfl 巧用获取jsfl绝对路径,导入配置文件,注意配置文件无法改变舞台宽高
//获取jsfl下的AS3.xml配置文件的路径 var jsflURL_arr=fl.scriptURI.split("/"); jsflURL_arr.splice(jsflU ...
- 基于OpenGL编写一个简易的2D渲染框架-12 重构渲染器-BlockAllocator
BlockAllocator 的内存管理情况可以用下图表示 整体思路是,先分配一大块内存 Chunk,然后将 Chunk 分割成小块 Block.由于 Block 是链表的一个结点,所以可以通过链表的 ...
- 傅里叶变换--MP3、JPEG和Siri背后的数学
http://blog.jobbole.com/51301/ 九年前,当我还坐在学校的物理数学课的课堂里时,我的老师为我们讲授了一种新方法,给我留下了深刻映像. 我认为,毫不夸张地说,这是对数学理论发 ...
- Unified shader model
https://en.wikipedia.org/wiki/Unified_shader_model In the field of 3D computer graphics, the Unified ...
- 行矩阵列矩阵D3D&GL&U3D
void Start () { //矩阵函数原型:Matrix4x4(Vector4 colum0, Vector4 colum1, Vector4 colum2, Vector4 colum3),这 ...
- [转]Gulp思维 —— Gulp高级技巧
感受过gulp.js带来的兴奋过后,你需要的不仅仅是它的光鲜,而是切切实实的实例.这篇文章讨论了一些使用gulp.js时常踩的坑,以及一些更加高级和定制化的插件和流的使用技巧. 基本任务 gulp的基 ...
- mysql 建库建表建用户
1.创建数据库 create database school; 2.使用数据库 Use school; 3.创建用户 create user jame@localhost identified by ...
- Ansible develop module
def cnf(action,configs,path): message = "Modify %s\n" %path changed = False if action == & ...