/*
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. PadLeft 补零

    补零 PadLeft -Caption.Length())+Caption; UnicodeString __fastcall StringOfChar(WideChar Ch, int Count) ...

  2. VBA 判断单元格是否为公式,可用于数组

    Function ISFORMULA(ByVal rg As Object) As Variant      Dim temp As Variant      Dim i As Integer, j ...

  3. ADODB 调用存储过程

    追加参数法调用存储过程 追加参数通过CreateParameter方法,用来指定属性创建新的Parameter对象.具体语法如下: Set parameter = command.CreatePara ...

  4. Haskell语言学习笔记(41)Parsec(1)

    Parsec Parsec是一个词法及语法分析器. 匹配字符与字符串 Prelude Text.Parsec> parseTest anyChar "a" 'a' Prelu ...

  5. Numpy 常用函数

    保存文件i3 = eye(3) 创建一个3*3 的单位矩阵savetxt('eye.txt',i3) #保存矩阵 读取文件c,v=np.loadtxt('data.csv', delimiter=', ...

  6. ORACLE用户永不被锁

    alter profile default limit FAILED_LOGIN_ATTEMPTS UNLIMITED;

  7. ThreadPoolExecutor常识

    线程池技术在并发时经常会使用到,java中的线程池的使用是通过调用ThreadPoolExecutor来实现的.ThreadPoolExecutor提供了四个构造函数,最后都会归结于下面这个构造方法: ...

  8. 每月IT摘录201808--201809

    一.技术 海量数据的解决方案: 使用缓存: 页面静态化技术: 数据库优化: 分离数据库中活跃的数据: 批量读取和延迟修改: 读写分离: 使用NoSQL和Hadoop等技术: 分布式部署数据库: 应用服 ...

  9. 4. Median of Two Sorted Arrays(Array; Divide-and-Conquer)

    There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...

  10. Marriage Match IV(最短路+网络流)

    Marriage Match IV http://acm.hdu.edu.cn/showproblem.php?pid=3416 Time Limit: 2000/1000 MS (Java/Othe ...