В процессе лечения больных часто возникает необходимость приема определенных лекарств или выполнения ряда медицинских процедур по расписанию. При этом больные или медицинский персонал не всегда имеют возможность выполнять (вспоминать) это строгое расписание. Чтобы помочь им в этом мы в данной статье рассмотрим проект автоматического умного медицинского напоминателя (Smart Medicine Reminder). Напоминание можно осуществлять следующими способами:
- Показывать сообщение на экране ЖК дисплея.
- Передавать уведомление на email или на телефон.
- Передавать уведомление при помощи мобильных приложений.
- Сигнализация при помощи звукового сигнала зуммера.
- С помощью Bluetooth/ Wi-Fi.
- С помощью звонка на мобильный телефон.
Мы можем комбинировать эти способы в зависимости от наших потребностей. В нашем проекте мы будем использовать напоминание о приеме лекарств 1, 2 или 3 раза в день. Время для напоминания можно будет выбирать с помощью кнопок. Этот проект можно объединить с системой удаленного контроля здоровья пациента на основе Arduino.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress). Можно использовать и другие типы плат Arduino.
- ЖК дисплей 16х2 (купить на AliExpress).
- Модуль часов реального времени DS3231 (RTC DS3231 module) (купить на AliExpress).
- Зуммер (Buzzer) (купить на AliExpress).
- Светодиод (купить на AliExpress).
- Макетная плата.
- Кнопки.
- Резисторы 1 кОм и 10 кОм (купить на AliExpress).
- Потенциометр 10 кОм (купить на AliExpress).
- Соединительные провода.
Работа схемы
Схема автоматического медицинского напоминателя на основе платы Arduino представлена на следующем рисунке.
В схеме необходимо сделать соединения, представленные в следующей таблице:
Контакт платы Arduino | Контакт периферийного устройства |
2 | D7 of 16x2 LCD Display |
3 | D6 of 16x2 LCD Display |
4 | D5 of 16x2 LCD Display |
5 | D4 of 16x2 LCD Display |
7 | 3-я кнопка |
8 | 2-я кнопка |
9 | 1-я кнопка |
11 | EN pin of 16x2 LCD Display |
12 | RS pin of 16x2 LCD Display |
13 | +Ve Pin of Buzzer and Led |
A0 | кнопка останова (стоп) |
A4 | SDA of DS3231 |
A5 | SCL of DS3231 |
3.3V | Vcc of DS3231 |
Gnd | Gnd |
В этом проекте мы будем использовать модуль часов реального времени DS3231, который будет подключаться по протоколу I2C к плате Arduino. Также можно использовать и модуль часов реального времени DS1307. Модуль DS3231 имеет встроенные 32 кБ памяти, которые можно использовать для хранения дополнительных данных. Модуль DS3231 запитывается от контакта 3.3V платы Arduino uno. ЖК дисплей 16x2 подключен с помощью протокола SPI. Зуммер используется для напоминания времени приема лекарства. Кнопки используются для задания времени напоминания. Первая кнопка используется для напоминания времени приема лекарства один раз в день, вторая кнопка – для напоминания времени приема лекарства дважды в день, а третья кнопка – для напоминания времен приема лекарства трижды в день. Четвертая кнопка используется для выключения сигнала зуммера.
Основные принципы работы проекта
При подаче питания на схему на экране ЖК дисплея высвечивается приветственное сообщение “Welcome to Circuit Digest” (с их сайта переведена данная статья). Далее ЖК дисплей переходит в цикл с 3-мя демонстрируемыми экранами. На 1-м экране показывается надпись “Stay Healthy, Get Well Soon” (будьте здоровы, скоро станет лучше). Второй экран – это экран помощи, который предлагает при помощи кнопок выбрать временной интервал для напоминания (один/два/три раза в день). Границы этих временных слотов можно в дальнейшем изменить самостоятельно в программе. По умолчанию в программе используются 3 временных слота: 8am, 2pm и 8pm.
Мы запрограммировали три режима работы напоминателя. Режим 1 активируется при нажатии 1-й кнопки и предусматривает прием лекарства один раз в день в 8am (в 8 часов утра). Режим 2 активируется при нажатии 2-й кнопки и предусматривает прием лекарства два раза в день - в 8am (в 8 часов утра) и 8pm (в 8 часов вечера). Режим 3 активируется при нажатии 3-й кнопки и предусматривает прием лекарства три раза в день - в 8am (в 8 часов утра), в 2pm (в 14:00 днем) и 8pm (в 8 часов вечера).
При желании вы можете добавить в проект (сейчас не реализовано) функцию отсрочки зуммера на 10 минут. При нажатии одной из кнопок происходит выбор соответствующего режима напоминания, происходит запоминание этого режима, а из модуля часов реального времени считывается текущее время. Когда текущее время будет равно времени срабатывания нашего напоминателя (в зависимости от выбранного режима) начинает звучать сигнал зуммера, который можно выключить нажатием 4-й кнопки (STOP). Сигнал зуммера будет включаться каждый раз когда текущее время будет равно времени напоминания. Более подробно эти процессы можно посмотреть на видео, приведенном в конце статьи.
Объяснение программы для Arduino
Кратко алгоритм работы нашего напоминателя можно представить следующим образом: пользователь получает инструкции на экране ЖК дисплея > пользователь с помощью кнопок выбирает режим напоминания (1/2/3 раза в день) > на ЖК дисплее система его просит подтвердить указанный выбор > старт отсчета времени > включаются зуммер и светодиод когда текущее время будет равно времени напоминания > пользователь прекращает подачу звукового сигнала при помощи нажатия на конку останова > конец.
При необходимости в проект можно легко добавить другие требуемые опции. Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим ее основные фрагменты.
Вначале в программе мы должны подключить необходимые нам библиотеки.
1 2 3 4 |
<LiquidCrystal.h> <RTClib.h> (https://github.com/adafruit/RTClib) <EEPROM.h> <Wire.h> |
Библиотека для работы с энергонезависимой памятью EEPROM используется для хранения выбранного пользователем режима напоминания в то время когда на схему не подается питание. Когда пользователь подаст питание на плату Arduino из EEPROM будет считываться значение последнего выбранного режима напоминания. Библиотека Wire.h используется для работы с протоколом I2C – с его помощью мы взаимодействуем с модулем часов реального времени DS3231.
Всегда проверяйте правильно ли работает модуль часов реального времени поскольку он играет ключевую роль в работе нашего проекта.
1 2 3 4 5 6 7 |
if (! rtc.begin()) { // check if rtc is connected Serial.println("Couldn't find RTC"); while (1); } if (rtc.lostPower()) { Serial.println("RTC lost power, lets set the time!"); } |
Настройку времени можно осуществить двумя способами: используя автоматически системное скомпилированное время или введя его вручную.
После того как вы установите нужное время закомментируйте следующую строку в программе до тех пор, пока у вас снова не возникнет необходимость установки времени.
1 2 |
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //rtc.adjust(DateTime(2019, 1, 10, 7, 59, 52)); |
Далее оператор switch будет использоваться для считывания предыдущего сохраненного режима и настройки проекта на этот режим.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
val2 = EEPROM.read(addr); // read previosuly saved value of push button to start from where it was left previously switch (val2) { case 1: Serial.println("Set for 1/day"); push1state = 1; push2state = 0; push3state = 0; pushVal = 01; break; case 2: Serial.println("Set for 2/day"); push1state = 0; push2state = 1; push3state = 0; pushVal = 10; break; case 3: Serial.println("Set for 3/day"); push1state = 0; push2state = 0; push3state = 1; pushVal = 11; break; } |
Следующая команда считывает текущее время работы системы – мы его используем для периодичности смены экранов ЖК дисплея.
1 |
currentMillisLCD = millis(); // start millis for LCD screen switching at defined interval of time |
Считываем значения контактов, к которым подключены кнопки.
1 2 3 4 |
push1state = digitalRead(push1pin); push2state = digitalRead(push2pin); push3state = digitalRead(push3pin); stopinState = digitalRead(stopPin); |
Следующая функция предназначена для проверки состояния первой кнопки и записи этого состояния в энергонезависимую память EEPROM. Всегда, когда нажимается одна из первых трех кнопок, производится запись текущего состояния системы в EEPROM. Также при этом печатается сообщение на экране ЖК дисплея с подтверждением выбора состояния. Аналогичным образом запрограммированы и функции push2() и push3().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
void push1() { // function to set reminder once/day if (push1state == 1) { push1state = 0; push2state = 0; push3state = 0; // pushPressed = true; EEPROM.write(addr, 1); Serial.print("Push1 Written : "); Serial.println(EEPROM.read(addr)); // for debugging pushVal = 1; //save the state of push button-1 lcd.clear(); lcd.setCursor(0, 0); lcd.print("Reminder set "); lcd.setCursor(0, 1); lcd.print("for Once/day !"); delay(1200); lcd.clear(); } } |
Следующая функция предназначена для выключения сигнала зуммера и светодиода. Также в ней на экран ЖК дисплея выводится сообщение “Take medicine with warm water” (примите лекарство с теплой водой).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void stopPins() { //function to stop buzzing when user pushes stop push button if (stopinState == 1) { // stopinState = 0; // pushPressed = true; pushpressed = 1; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Take Medicine "); lcd.setCursor(0, 1); lcd.print("with Warm Water"); delay(1200); lcd.clear(); } } |
Следующая функция не зависит от реального времени, но с помощью нее производится циклическое переключение экранов ЖК дисплея. Сначала на экран выводится сообщение с пожеланием хорошего здоровья - “Stay healthy, Get well soon”. Вы можете изменить это сообщение в программе на свое.
На втором экране пациенту даются инструкции как пользоваться данным напоминателем - “Press buttons for reminder..”. Третий экран используется для отображения текущей даты и времени.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
void changeScreen() { //function for Screen Cycling // Start switching screen every defined intervalLCD if (currentMillisLCD - previousMillisLCD > intervalLCD) // save the last time you changed the display { previousMillisLCD = currentMillisLCD; screens++; if (screens > maxScreen) { screens = 0; // all screens over -> start from 1st } isScreenChanged = true; } // Start displaying current screen if (isScreenChanged) // only update the screen if the screen is changed. { isScreenChanged = false; // reset for next iteration switch (screens) { case getWellsoon: gwsMessege(); // get well soon message break; case HELP_SCREEN: helpScreen(); // instruction screen break; case TIME_SCREEN: timeScreen(); // to print date and time break; default: //NOT SET. break; } } } |
Следующая функция предназначена для одновременного включения зуммера и мигания светодиода когда наступит время приема лекарства.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
void startBuzz() { // function to start buzzing when time reaches to defined interval // if (pushPressed == false) { if (pushpressed == 0) { Serial.println("pushpressed is false in blink"); unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; // save the last time you blinked the LED Serial.println("Start Buzzing"); if (ledState == LOW) { // if the LED is off turn it on and vice-versa: ledState = HIGH; } else { ledState = LOW; } digitalWrite(ledPin, ledState); } } else if (pushpressed == 1) { Serial.println("pushpressed is true"); ledState = LOW; digitalWrite(ledPin, ledState); } } |
Следующая функция используется для сравнения выбранного пользователем времени срабатывания напоминателя (зависит от выбранного режима) с 8am (8 часами утра) и вызова функции включения зуммера и мигания светодиода. Аналогичным образом работают и функции void at2pm() и void at8pm.
1 2 3 4 5 6 7 8 9 10 11 12 |
void at8am() { // function to start buzzing at 8am DateTime now = rtc.now(); if (int(now.hour()) >= buzz8amHH) { if (int(now.minute()) >= buzz8amMM) { if (int(now.second()) > buzz8amSS) { ///////////////////////////////////////////////////// startBuzz(); ///////////////////////////////////////////////////// } } } } |
Также в этот проект вы можете добавить модуль WiFi ESP8266 чтобы передавать пользователю Email когда наступит время приема лекарства.
Исходный код программы (скетча)
Код программы получился сравнительно объемный, но мы надеемся что с помощью представленного выше его объяснения вы с ним сможете разобраться без особых проблем.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 |
//Medicine Reminder using Arduino Uno // Reminds to take medicine at 8am, 2pm, 8pm /* The circuit: LCD RS pin to digital pin 12 LCD Enable pin to digital pin 11 LCD D4 pin to digital pin 5 LCD D5 pin to digital pin 4 LCD D6 pin to digital pin 3 LCD D7 pin to digital pin 2 LCD R/W pin to ground LCD VSS pin to ground LCD VCC pin to 5V 10K resistor: ends to +5V and ground wiper to LCD VO pin (pin 3)*/ #include <LiquidCrystal.h> #include <Wire.h> #include <RTClib.h> #include <EEPROM.h> int pushVal = 0; int val; int val2; int addr = 0; RTC_DS3231 rtc; const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; // контакты, к которым подключен ЖК дисплей LiquidCrystal lcd(rs, en, d4, d5, d6, d7); #define getWellsoon 0 #define HELP_SCREEN 1 #define TIME_SCREEN 2 //bool pushPressed; //flag to keep track of push button state int pushpressed = 0; const int ledPin = LED_BUILTIN; // buzzer and led pin int ledState = LOW; int Signal = 0; int buzz = 13; int push1state, push2state, push3state, stopinState = 0; // int push1Flag, push2Flag, Push3Flag = false; // флаги для работы с кнопками int push1pin = 9; int push2pin = 8; int push3pin = 7; int stopPin = A0; int screens = 0; // номер экрана, который будет показываться на ЖК дисплее int maxScreen = 2; // счетчик экранов bool isScreenChanged = true; long previousMillis = 0; long interval = 500; // buzzing interval unsigned long currentMillis; long previousMillisLCD = 0; // for LCD screen update long intervalLCD = 2000; // интервал смены экранов на ЖК дисплее unsigned long currentMillisLCD; // установка времен срабатывания напоминателя int buzz8amHH = 8; // HH - hours ##Set these for reminder time in 24hr Format int buzz8amMM = 00; // MM - Minute int buzz8amSS = 00; // SS - Seconds int buzz2pmHH = 14; // HH - hours int buzz2pmMM = 00; // MM - Minute int buzz2pmSS = 00; // SS - Seconds int buzz8pmHH = 20; // HH - hours int buzz8pmMM = 00; // MM - Minute int buzz8pmSS = 00; // SS - Seconds int nowHr, nowMin, nowSec; // to show current mm,hh,ss // All messeges void gwsMessege(){ // печатаем приветственное сообщение lcd.clear(); lcd.setCursor(0, 0); lcd.print("Stay Healthy :)"); // Give some cheers lcd.setCursor(0, 1); lcd.print("Get Well Soon :)"); // wish } void helpScreen() { // функция для отображения 2-го экрана на ЖК дисплее lcd.clear(); lcd.setCursor(0, 0); lcd.print("Press Buttons"); lcd.setCursor(0, 1); lcd.print("for Reminder...!"); } void timeScreen() { // функция для отображения времени и даты на ЖК дисплее DateTime now = rtc.now(); // считываем текущее время lcd.clear(); lcd.setCursor(0, 0); lcd.print("Time:"); lcd.setCursor(6, 0); lcd.print(nowHr = now.hour(), DEC); lcd.print(":"); lcd.print(nowMin = now.minute(), DEC); lcd.print(":"); lcd.print(nowSec = now.second(), DEC); lcd.setCursor(0, 1); lcd.print("Date: "); lcd.print(now.day(), DEC); lcd.print("/"); lcd.print(now.month(), DEC); lcd.print("/"); lcd.print(now.year(), DEC); } void setup() { Serial.begin(9600); // последовательная связь для отладки if (! rtc.begin()) { // проверяем подсоединен ли модуль часов реального времени Serial.println("Couldn't find RTC"); while (1); } if (rtc.lostPower()) { Serial.println("RTC lost power, lets set the time!"); } // rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // раскомментируйте эту строку для установления времени при следующей загрузке программы в Arduino rtc.adjust(DateTime(2019, 1, 10, 7, 59, 30)); // вручную устанавливаем время lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print("Welcome To"); // print a messege at startup lcd.setCursor(0, 1); lcd.print("Circuit Digest"); delay(1000); pinMode(push1pin, INPUT); // устанавливаем режимы работы контактов, к которым подключены кнопки pinMode(push2pin, INPUT); pinMode(push3pin, INPUT); pinMode(stopPin, INPUT); pinMode(ledPin, OUTPUT); delay(200); Serial.println(EEPROM.read(addr)); val2 = EEPROM.read(addr); // считываем из EEPROM предыдущее установленное состояние системы switch (val2) { case 1: Serial.println("Set for 1/day"); push1state = 1; push2state = 0; push3state = 0; pushVal = 1; break; case 2: Serial.println("Set for 2/day"); push1state = 0; push2state = 1; push3state = 0; pushVal = 2; break; case 3: Serial.println("Set for 3/day"); push1state = 0; push2state = 0; push3state = 1; pushVal = 3; break; } } void loop() { push1(); //режим срабатывания 1 раз в сутки push2(); // режим срабатывания 2 раза в сутки push3(); // режим срабатывания 3 раза в сутки if (pushVal == 1) { // если нажата кнопка 1 то напоминаем в 8am at8am(); // функция для запуска напоминания в 8am } else if (pushVal == 2) { // если нажата кнопка 2 то напоминаем в 8am и 8pm at8am(); at8pm(); //function to start uzzing at 8mm } else if (pushVal == 3) { // если нажата кнопка 3 то напоминаем в 8am, 2pm и 8pm at8am(); at2pm(); //function to start uzzing at 8mm at8pm(); } currentMillisLCD = millis(); // start millis for LCD screen switching at defined interval of time push1state = digitalRead(push1pin); // считываем состояние всех кнопок push2state = digitalRead(push2pin); push3state = digitalRead(push3pin); stopinState = digitalRead(stopPin); stopPins(); // остановка звучания зуммера changeScreen(); // функция для смены экранов ЖК дисплея } // push buttons void push1() { // функция для срабатывания напоминателя 1 раз в день if (push1state == 1) { push1state = 0; push2state = 0; push3state = 0; // pushPressed = true; EEPROM.write(addr, 1); Serial.print("Push1 Written : "); Serial.println(EEPROM.read(addr)); // для отладки pushVal = 1; //save the state of push button-1 lcd.clear(); lcd.setCursor(0, 0); lcd.print("Reminder set "); lcd.setCursor(0, 1); lcd.print("for Once/day !"); delay(1200); lcd.clear(); } } void push2() { // функция для срабатывания напоминателя 2 раза в день if (push2state == 1) { push2state = 0; push1state = 0; push3state = 0; // pushPressed = true; EEPROM.write(addr, 2); Serial.print("Push2 Written : "); Serial.println(EEPROM.read(addr)); pushVal = 2; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Reminder set "); lcd.setCursor(0, 1); lcd.print("for Twice/day !"); delay(1200); lcd.clear(); } } void push3() { // функция для срабатывания напоминателя 3 раза в день if (push3state == 1) { push3state = 0; push1state = 0; push2state = 0; // pushPressed = true; EEPROM.write(addr, 3); Serial.print("Push3 Written : "); Serial.println(EEPROM.read(addr)); pushVal = 3; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Reminder set "); lcd.setCursor(0, 1); lcd.print("for Thrice/day !"); delay(1200); lcd.clear(); } } void stopPins() { //функция для остановки звучания зуммера когда пользователь нажмет кнопку останова if (stopinState == 1) { // stopinState = 0; // pushPressed = true; pushpressed = 1; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Take Medicine "); lcd.setCursor(0, 1); lcd.print("with Warm Water"); delay(1200); lcd.clear(); } } void startBuzz() { // функция для начала звучания зуммера когда настанет время напоминания // if (pushPressed == false) { if (pushpressed == 0) { Serial.println("pushpressed is false in blink"); unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; // сохраняем последнее время когда был включен светодиод Serial.println("Start Buzzing"); if (ledState == LOW) { // если светодиод выключен, то включить его – и наоборот ledState = HIGH; } else { ledState = LOW; } digitalWrite(ledPin, ledState); } } else if (pushpressed == 1) { Serial.println("pushpressed is true"); ledState = LOW; digitalWrite(ledPin, ledState); } } void at8am() { // функция для включения зуммера в 8am DateTime now = rtc.now(); if (int(now.hour()) >= buzz8amHH) { if (int(now.minute()) >= buzz8amMM) { if (int(now.second()) > buzz8amSS) { ///////////////////////////////////////////////////// startBuzz(); ///////////////////////////////////////////////////// } } } } void at2pm() { // функция для включения зуммера в 2pm DateTime now = rtc.now(); if (int(now.hour()) >= buzz2pmHH) { if (int(now.minute()) >= buzz2pmMM) { if (int(now.second()) > buzz2pmSS) { /////////////////////////////////////////////////// startBuzz(); ////////////////////////////////////////////////// } } } } void at8pm() { // функция для включения зуммера в 8pm DateTime now = rtc.now(); if (int(now.hour()) >= buzz8pmHH) { if (int(now.minute()) >= buzz8pmMM) { if (int(now.second()) > buzz8pmSS) { ///////////////////////////////////////////////////// startBuzz(); ///////////////////////////////////////////////////// } } } } //Screen Cycling void changeScreen() { //функция для переключения экранов ЖК дисплея // Start switching screen every defined intervalLCD if (currentMillisLCD - previousMillisLCD > intervalLCD) // сохраняем последнее время когда мы сменяли экран { previousMillisLCD = currentMillisLCD; screens++; if (screens > maxScreen) { screens = 0; // если все экраны закончились начинаем снова с 1 экрана } isScreenChanged = true; } // Start displaying current screen if (isScreenChanged) // обновляем экран только если номер экрана изменился { isScreenChanged = false; // сброс для следующей итерации switch (screens) { case getWellsoon: gwsMessege(); // показываем приветственное сообщение break; case HELP_SCREEN: helpScreen(); // экран с инструкциями break; case TIME_SCREEN: timeScreen(); // экран с датой и временем break; default: //NOT SET. break; } } } |