/* В этой программе сначала вводятся год, месяц, день, час, минута и секунда. Потом к введенным дате и времени прибавляется одна секунда и выводится на экран.
Программа не должна отслеживать в правильных ли рамках заданы год, месяц, число, час, минута и секунда. Предполагается, что пользователь будет вводить только легитимные значения. */
struct MyDateTime { // Создаем свой собственный тип данных (Мои Дата Время) в виде структуры состоящей из 6 чисел:
uint16_t Y; // Год - беззнаковое 2-байтное число (0..65535 )
uint8_t M, D, h, m, s; // Месяц, День, час, минута, секунда - беззнаковые 1-байтные числа (0..255)
};
MyDateTime dt_1, dt_2; // Декларируем две переменных нашего типа MyDateTime. dt_1 - это то, что задается, а dt_2 - это увеличенное на одну секунду
void setup() {
Serial.begin(9600); // Запускаем серийный порт
Serial.setTimeout(120000); // Задаем ограничение на ввод каждого параметра. Программа будет ждать ввода следующего параметра не более 2 минут (120 секунд)
}
void loop() {
Serial.println("Введите год:");
while (Serial.available() == 0) { // ожидаем ввода ...
}
dt_1.Y = Serial.parseInt(); // считываем значение "год" в соответствующее поле нашей переменной dt_1
Serial.println("Введите месяц:");
while (Serial.available() == 0) {
}
dt_1.M = Serial.parseInt();
Serial.println("Введите день:");
while (Serial.available() == 0) {
}
dt_1.D = Serial.parseInt();
Serial.println("Введите час:");
while (Serial.available() == 0) {
}
dt_1.h = Serial.parseInt();
Serial.println("Введите минуту:");
while (Serial.available() == 0) {
}
dt_1.m = Serial.parseInt();
Serial.println("Введите секунду:");
while (Serial.available() == 0) {
}
dt_1.s = Serial.parseInt();
Serial.println("Введенные дата и время:" + String(dt_1.D) + '/' + String(dt_1.M) + '/' + String(dt_1.Y) + ' ' + String(dt_1.h) + ':' + String(dt_1.m) + ':' + String(dt_1.s));
dt_2 = add_one_second (dt_1); // корректно увеличиваем заданные дату и время на одну секунду с помощью нашей функции "add_one_second"
Serial.println("Новые дата и время:" + String(dt_2.D) + '/' + String(dt_2.M) + '/' + String(dt_2.Y) + ' ' + String(dt_2.h) + ':' + String(dt_2.m) + ':' + String(dt_2.s));
delay(10000);
}
MyDateTime add_one_second (MyDateTime dt) { // наша функция, которая будет корректно увеличивать заданные дату и время на одну секунду
MyDateTime new_dt; // Декларируем переменную нашего типа MyDateTime. Это будет увеличенное на одну секунду значение, которое наша функция будет возвращать как результат
new_dt = dt;
/* тут нужен код, который корректно обработает все поля в new_dt как результат прибавления одной секунды
Подсказки:
- максимальное значение, которое принимает значение секунды = 59, то же самое и с минутами
- максимальное значение для часа = 23
- есть месяцы по 31 дню, по 30 дней и 28 или 29 дней, в зависимости от того високосный год или нет
- високосный год - который без остатка делится на 4, вот так задается это условие в ардуино: if (year % 4 == 0) {}
- используй разные операторы в зависимости от удобства их применения: if/else или switch/case
*/
return new_dt;
}