// Урок про время ===================================================================
#include "RTClib.h"
#include <EEPROM.h>
uint32_t tmr;
uint32_t tmr_now;
bool flag;
#define period1 10*1000L
#define period2 10*1000L
const int LED = 25;
int sec = 0;
int minut = 0;
struct Datas
{
int hour;
int minut;
int sec;
};
Datas datas;
#define PARSE_AMOUNT 5 // число значений в массиве, который хотим получить
int intData[PARSE_AMOUNT]; // массив численных значений после парсинга
boolean recievedFlag;
boolean getStarted;
byte indexe;
String string_convert = "";
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup()
{
Serial.begin(9600);
pinMode(LED, OUTPUT);
EEPROM.begin(100);
if (! rtc.begin())
{
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
datas.hour = 5;
datas.minut = 5;
datas.sec = 5;
setDate();
}
void loop()
{
parsing(); // функция парсинга
if (recievedFlag) { // если получены данные
recievedFlag = false;
for (byte i = 0; i < PARSE_AMOUNT; i++) { // выводим элементы массива
Serial.print(intData[i]);
Serial.print(" ");
}
Serial.println();
}
//EEPROM.get(0, datas);
//EEPROM.commit();
//Serial.print("datas.hour = ");
//Serial.println(datas.hour);
//Serial.print("datas.minut = ");
//Serial.println(datas.minut);
//Serial.print("datas.sec = ");
//Serial.println(datas.sec);
DateTime now = rtc.now();
Serial.print("Current time: ");
//Serial.print(now.year(), DEC);
//Serial.print('/');
//Serial.print(now.month(), DEC);
//Serial.print('/');
//Serial.print(now.day(), DEC);
//Serial.print(" (");
//Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
//Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
tmr_now = (now.hour() * 60 * 60) + (now.minute() * 60) + now.second();
Serial.print("Curent second ");
Serial.println(tmr_now);
delay(2000);
if (tmr_now >= 34920)
Serial.print("OOKEY");
Serial.println();
sec = datas.sec * 1000;
minut = datas.minut * 1000;
if (millis() - tmr >= (flag ? sec : minut))
{
tmr = millis();
flag = !flag;
digitalWrite(LED, flag);
}
}
void parsing()
{
if (Serial.available() > 0) {
char incomingByte = Serial.read(); // обязательно ЧИТАЕМ входящий символ
if (getStarted) { // если приняли начальный символ (парсинг разрешён)
if (incomingByte != ' ' && incomingByte != ';') { // если это не пробел И не конец
string_convert += incomingByte; // складываем в строку
}
else { // если это пробел или ; конец пакета
intData[indexe] = string_convert.toInt(); // преобразуем строку в int и кладём в массив
string_convert = ""; // очищаем строку
indexe++; // переходим к парсингу следующего элемента массива
}
}
if (incomingByte == '$') { // если это $
getStarted = true; // поднимаем флаг, что можно парсить
indexe = 0; // сбрасываем индекс
string_convert = ""; // очищаем строку
}
if (incomingByte == ';') { // если таки приняли ; - конец парсинга
getStarted = false; // сброс
recievedFlag = true; // флаг на принятие
}
}
}
void setDate()
{
datas.hour = constrain(datas.hour, 0, 24); // ограничили
datas.minut = constrain(datas.minut, 0, 60); // ограничили
datas.sec = constrain(datas.sec, 0, 60); // ограничили
EEPROM.put (0, datas); // записали по адресу 0
EEPROM.commit();
}
//Урок Парсинга ======================================================================
/*char key;
int val = 0;
void setup() {
Serial.begin(9600);
//Serial.setTimeout(5);
}
void loop() {
if (Serial.available() > 1) {
key = Serial.read();
val = Serial.parseInt();
switch (key) {
case 'a': Serial.println(val);
//Serial.println(val);
break;
case 'b': Serial.println(val);
break;
case 'c': Serial.println(val);
break;
}
}
}
*/