/*
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 串口命令解析的更多相关文章

  1. 邵国际: C 语言对象化设计实例 —— 命令解析器

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 邵国际 来源: 微信公众号linux阅码场(id: linuxdev) 内容简介 单片机工程师常常疑惑为什么 ...

  2. win10上使用php与python实现与arduino串口通信

    注意: php 需要php7,安装及开启php_dio.dll com口按照实际的进行设置,如果不知道可以打开arduino编辑器进行查看 可以与用户实现命令行交互,但是效率过慢,不清楚如何优化,使用 ...

  3. linux mknod命令解析

    linux mknod命令解析 http://www.cnblogs.com/cobbliu/archive/2011/07/05/2389014.html mknod:make node  生成设备 ...

  4. C#基础:命令解析

    1.普通格式命令的解析 例如: RENA<SP>E:\\A.txt<SP>C:\\B.txt<CRLF> (SP -> 空格,CRLF -> 回车加换行 ...

  5. Appium Android Bootstrap源码分析之命令解析执行

    通过上一篇文章<Appium Android Bootstrap源码分析之控件AndroidElement>我们知道了Appium从pc端发送过来的命令如果是控件相关的话,最终目标控件在b ...

  6. virsh的详细命令解析(一)

    virsh的详细命令解析 virsh 有命令模式和交互模式如果直接在vrish后面添加参数是命令模式,如果直接写virsh,就会进入交互模式 virsh list 列出所有的虚拟机,虚拟机的状态有(8 ...

  7. IIC读写AT24C02代码2——串口命令控制多页读写

    通过串口输入 R .W 进行控制程序读写IIC设备.波特率9600bps,晶振115200HZ. main.c /*------------------------------------------ ...

  8. (转)Linux命令:使用dig,nslookup命令解析域名

    Linux命令:使用dig命令解析域名 Linux下解析域名除了使用nslookup之外,开可以使用dig命令来解析域名,dig命令可以得到更多的域名信息. dig的全称是 (domain infor ...

  9. angular-cli.json配置参数解析,常用命令解析

    1.angular-cli.json配置参数解析 { "project": { "name": "ng-admin", //项目名称 &qu ...

随机推荐

  1. WebRTC内置debug工具,详细参数解读 chrome://webrtc-internals/

    为了确保这篇文章所写内容尽可能的准确,我决定请来Philipp Hancke来作为此篇文章的共同作者. 当你想要找到你WebRTC产品中的问题时,webrtc-internals是一个非常棒的工具,因 ...

  2. jd-eclipse反编译插件的在线安装和使用

    jd-eclipse反编译插件的在线安装和使用 JD-Eclipse是一个Eclipse平台的插件.它允许您调试所有的Java源代码,有了它,以后调试的时候ctrl键就可以一键到底啦.下面简单说说ec ...

  3. AES 加密256位 错误 java.security.InvalidKeyException: Illegal key size or default parameters

    Java发布的运行环境包中的加解密有一定的限制.比如默认不允许256位密钥的AES加解密,解决方法就是修改策略文件. 官方网站提供了JCE无限制权限策略文件的下载: JDK8的下载地址: http:/ ...

  4. Maven打包跳过测试,文档生成

    运行mvn install时跳过Test 方法一: <project> [...] <build> <plugins> <plugin> <gro ...

  5. Object-c 创建按钮

    @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //动态创建我们自己的按钮 //1.创建按钮(UIB ...

  6. 查询sql执行速度

    with QS as(      select cp.objtype as object_type            ,db_name(st.dbid)as [database]          ...

  7. hibernate中.常见的hql查询语句

    hql是非常有意识的被设计为完全面向对象的查询 基本规则: 1.hql语法类似于sql,但它后面跟的不是表名和字段名,而是类名和属性名 2.hql大小写不敏感.但是设计java类名,包名,属性名时大小 ...

  8. java 注解 基本原理 编程实现

    摘要: java 1.5开始引入了注解和反射,正确的来说注解是反射的一部分,没有反射,注解无法正常使用,但离开注解,反射依旧可以使用,因此来说,反射的定义应该包含注解才合理一些. java 1.5开始 ...

  9. 学习C++50条忠告

    1.把C++当成一门新的语言学习: 2.看<Thinking In C++>,不要看<C++变成死相>: 3.看<The C++ Programming Language ...

  10. 蚁群算法(Java)tsp问题

      1.理论概述 1.1.TSP问题 旅行商问题,即TSP问题(旅行推销员问题.货郎担问题),是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只 ...