В этом проекте мы создадим электронного тренера, который поможет вам в регулярном выполнении полезных для здоровья мероприятий.
Ваш тренер напомнит вам с утра заняться йогой, принять холодный душ, а вечером сходить в спортзал, поужинать овощным салатом и
сделать перед сном дыхательные упражнения.

Необходимые компоненты:

  • плата для прототипирования;
  • Arduino Nano; 
  • LCD экран; 
  • провода; 
  • модуль часов DS1302. 

Схема подключения:

Схема подключения приведена на рис. П3.1.

 

Порядок подключения:

 

  • Выводы экрана  GND, VCC, SDA, SCLподключаем к выводам GND, 5V, А4, А5Arduino соответственно.
  • Выводы часов  VCC, CLK, DAT, RSTподключаем к выводам GND, D2, D3, D4 Arduino соответственно.
  • Загрузите скетч, представленный в листинге П3.1. 

Программное обеспечение:

Листинг П3.1


#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DS1302.h>
#define countOfNotice 5 //Максимальное 
количество заметок
#define delayForNotice 2000 //Время показа 
заметки
int kCePin = 4; // Chip Enable (Reset)
int kIoPin = 3; // Input/Output (I/O)
int kSclkPin = 2; // Serial Clock (SCKL)
DS1302 rtc(kCePin, kIoPin, kSclkPin);
LiquidCrystal_I2C lcd(0x27,16,2); // 
0x20..0x27 Adress
unsigned long memTime;
int next = 0;
const int t = 0, endt = countOfNotice;
//TEXTS
const char* text_massive[endt] = { 
"Time to YOGA", 
"Cold shower time", 
"Go to sport gym",
"Eat vegetables!",
"Breathe exercise"
};
//TIMES DONT USE "08" or "09"!! only "8" or "9" 
and " 8" or " 9"!! 
const int time_massive[endt*3] = {
//hh,mm,ss
07,30,00,
08,10,00,
19,30,00,
20,50,00,
37
22,55,00
};
void rtcsettime(int _h, int _m, int _s){
rtc.halt(true);
rtc.writeProtect(false);
rtc.hour(_h);
rtc.minutes(_m);
rtc.seconds(_s);
rtc.halt(false);
}
void setup(){
Serial.begin(9600);
Serial.println("***Init LCD...");
// rtcsettime(21,04,00);
lcd.init(); 
lcd.backlight();
Serial.println("***LCD ready!");
next = t;
}
void loop(){
//BEGIN. Вывод текущего времени
lcd.setCursor(0,0);
lcd.print("Time");
if (rtc.hour() < 10){
lcd.setCursor(8, 0);
lcd.print("0");
lcd.setCursor(9, 0);}
else {
lcd.setCursor(8, 0);
}
lcd.print(rtc.hour());
lcd.setCursor(10, 0);
lcd.print(":");
if (rtc.minutes() < 10){
lcd.setCursor(11, 0);
lcd.print("0");
lcd.setCursor(12, 0);}
38
else {
lcd.setCursor(11, 0);
}
lcd.print(rtc.minutes());
lcd.setCursor(13, 0);
lcd.print(":");
if (rtc.seconds() < 10){
lcd.setCursor(14, 0);
lcd.print("0");
lcd.setCursor(15, 0);}
else {
lcd.setCursor(14, 0);
} 
lcd.print(rtc.seconds());
//END. Вывод текущего времени 
//BEGIN. Вывод времени следующей заметки
lcd.setCursor(0,1);
lcd.print("Next");
if (time_massive[next] < 10){
lcd.setCursor(8, 1);
lcd.print("0");
lcd.setCursor(9, 1);}
else {
lcd.setCursor(8, 1);
}
lcd.print(time_massive[next]);
lcd.setCursor(10, 1);
lcd.print(":");
if (time_massive[next+1] < 10){
lcd.setCursor(11, 1);
lcd.print("0");
lcd.setCursor(12, 1);}
else {
lcd.setCursor(11, 1);
}
lcd.print(time_massive[next+1]);
lcd.setCursor(13, 1);
lcd.print(":");
39
if (time_massive[next+2] < 10){
lcd.setCursor(14, 1);
lcd.print("0");
lcd.setCursor(15, 1);}
else {
lcd.setCursor(14, 1);
} 
lcd.print(time_massive[next+2]);
//END. Вывод времени следующей заметки
//Проверка совпадения текущего времени 
и времени всех заметок
for (int i=t; i<endt; i++){
if (rtc.hour()==time_massive[i*3]){
if (rtc.minutes()==time_massive[i*3+1]){
if (rtc.seconds()==time_massive[i*3+2]){
lcd.setCursor(0,0);
lcd.clear();
lcd.print(text_massive[i]);
Serial.println(text_massive[i]);
delay(delayForNotice);
lcd.clear();
next+=3;
if (next>=(endt*3)){next = 0;}
}
}
}
}
delay(100);
}

 


Описание работы:


На экран выводится текущее время, а также время, в которое записана
следующая заметка. При достижении этого времени на экране будет
отображено сообщение. После этого на экран снова будет выведено
текущее время и ближайшее событие.


Настройка:


Заметки разбиты на две группы: text_massive и time_massive — это два массива текста заметки и времени ее срабатывания. Во втором мас-сиве данные записаны следующим образом: ЧЧ, ММ, СС. В соответствии этому времени в том же порядке идет текст из первого массива. Добавляя новые записи в массивы, нужно убедиться, что:
строка текста соответствует нужной строчке времени;  
в #define countOfNotice стоит верное количество этих заметок.•
Так же для удобства время показа заметки вынесено в #define.
Далее необходимо не забыть включить и настроить часы. Процедура проделывается один раз, после чего часы будут полностью автономными (см. описание в уроке 5 «Подключение модуля часов» раздела «Начальная школа»).