Применение millis для нескольких процессов

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:

но это так тоже не работает))

Сцуко, я вот лично уже месяц Вам талдычу - Ну, мля, почитайте ж наконец учебник-то! Ну чего дебилом-то себя выставлять? Самому не противно?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

Posol88 пишет:

но это так тоже не работает))

Сцуко, я вот лично уже месяц Вам талдычу - Ну, мля, почитайте ж наконец учебник-то! Ну чего дебилом-то себя выставлять? Самому не противно?

а зачем? ...у него для этой самой штуки есть своя законная жена...он выше жеж озвучил )))

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

Когда вы учебник начнете читать? - полтора месяца прошло - а вы все спрашиваете, с чего начать... Начните уже с чего-нибудь

за эти полтора месяца я один учебник уже прочитал, и сейчас выбираю второй.

Posol88
Offline
Зарегистрирован: 14.11.2019

ЕвгенийП пишет:

почитайте ж наконец учебник-то! Ну чего дебилом-то себя выставлять? Самому не противно?

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

b707
Offline
Зарегистрирован: 26.05.2017

Posol88 пишет:

за эти полтора месяца я один учебник уже прочитал, и сейчас выбираю второй.

судя по успехам в конфе, первый был учебник по плетению макраме. Ждем выбора второго...

b707
Offline
Зарегистрирован: 26.05.2017

если вы реально пытаетесь учиться - вот вам домашнее задание - разобраться самому и потом обьяснить в ветке разницу между этими двумя условиями

if  (Time.minutes==49 ||10||15)

if  (Time.minutes==49 || Time.minutes==10 || Time.minutes==15)

 

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

если вы реально пытаетесь учиться - вот вам домашнее задание - разобраться самому и потом обьяснить в ветке разницу между этими двумя условиями

if  (Time.minutes==49 ||10||15)

if  (Time.minutes==49 || Time.minutes==10 || Time.minutes==15)

 

тут все просто  в первом варианте просим получить показания 1 раз и сравнить их с цифрами 49, 10,15. но за то время пока он сравнивает и показания меняются и вообще это так не работает.

а во втором варианте он на каждую цифру запрашивает показания по очереди, и когда оно оказывается правдой начинает выполнять программу дальше.

как то так мне думается.

Posol88
Offline
Зарегистрирован: 14.11.2019

Posol88 пишет:

 и вообще это так не работает.

 вот это мне и стало интересно, почему точно. А пока только предположения)) разберемСи)) 

b707
Offline
Зарегистрирован: 26.05.2017

Posol88 пишет:

в первом варианте просим получить показания 1 раз и сравнить их с цифрами 49, 10,15

неправильно, ищите  в учебнике правильный ответ

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:

в первом варианте просим получить показания 1 раз и сравнить их с цифрами 49, 10,15. но за то время пока он сравнивает и показания меняются 

Идиотизм №1

Posol88 пишет:

 во втором варианте он на каждую цифру запрашивает показания по очереди, 

Идиотизм №2

Posol88 пишет:

как то так мне думается.

Я сдаюсь и с позором удаляюсь. Не читайте ничего. Думайте и угадывайте, но уже без меня :(

Posol88
Offline
Зарегистрирован: 14.11.2019

ЕвгенийП пишет:

Posol88 пишет:

в первом варианте просим получить показания 1 раз и сравнить их с цифрами 49, 10,15. но за то время пока он сравнивает и показания меняются 

Идиотизм №1

Posol88 пишет:

 во втором варианте он на каждую цифру запрашивает показания по очереди, 

Идиотизм №2

Posol88 пишет:

как то так мне думается.

Я сдаюсь и с позором удаляюсь. Не читайте ничего. Думайте и угадывайте, но уже без меня :(


Не все так быстро и просто, Евгений Петрович, как Вам бы того хотелось.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Posol88][quote=ЕвгенийП пишет:

Не все так быстро и просто

Ну, это если книшку по слогам читать, шевеля губами и неспешно водя бородавчатым пальцем по затёртым до дыр страницам.  А если еще примеры не разбирать - можно и не открывать мудрый фолиант, не поможет. 

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

 вот вам домашнее задание 

я на пути к выполнению))

вопрос по сайту - по чему нет функции "поиска по форуму" ? в нужном мне разделе форума 330+ страниц. глаза устали ужо читать названия. 

Возможно от части однообразных вопросов удалось бы избавится, если бы проще было найти уже "перемолотую" интересующую "тебя" тему...

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Posol88 пишет:

b707 пишет:

 вот вам домашнее задание 

я на пути к выполнению))

вопрос по сайту - по чему нет функции "поиска по форуму" ? в нужном мне разделе форума 330+ страниц. глаза устали ужо читать названия. 

Возможно от части однообразных вопросов удалось бы избавится, если бы проще было найти уже "перемолотую" интересующую "тебя" тему...

Тут , конечно , уже все убедились в тупости и неадекватности отдельно взятых граждан.
Но зачем вам ещё и поиск по форуму ? Гугла не хватает ?
Запрос + адрес сайта в помощь, будет там искать, где укажут.
И да, поиск есть.
Смотреть в верхний правый угол страницы

Posol88
Offline
Зарегистрирован: 14.11.2019

Kakmyc пишет:
поиск есть. Смотреть в верхний правый угол страницы

там как раз гугловый поиск, а не по сайту. а в гугле "экспертов" ну очень много. мне интересно что говорят конкретно на этом сайте.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Posol88 пишет:

Kakmyc пишет:
поиск есть. Смотреть в верхний правый угол страницы

там как раз гугловый поиск, а не по сайту. а в гугле "экспертов" ну очень много. мне интересно что говорят конкретно на этом сайте.

а вы попробуйте сначала

Posol88
Offline
Зарегистрирован: 14.11.2019

andycat пишет:

а вы попробуйте сначала

понял. в прочем я как всегда...

спасибо

b707
Offline
Зарегистрирован: 26.05.2017

Posol88 пишет:

понял. в прочем я как всегда...

на двенадцатый день пути находчивый Чингачгук обнаружил, что забыл сесть на лошадь, а седло несет в руках...

на двенадцатой странице своей темы Posol88 обнаружил поиск на сайте...

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

если вы реально пытаетесь учиться - вот вам домашнее задание - разобраться самому и потом обьяснить в ветке разницу между этими двумя условиями

if  (Time.minutes==49 ||10||15)

if  (Time.minutes==49 || Time.minutes==10 || Time.minutes==15)

попытка №2.  логический оператор "или" сравнивает два аргумента, находищихся с лева и справа от себя, и если хоть один из них истина то возвращает управляющему оператору "if" значение истины, если оба ложны, то возвращает значение false. в первом случае аргумент находится только слева, а справа просто цифра(возможно бывают случаи когда цифра будет являться аргументом для оператора "или", но я что-то не придумал такого, и уж точно это не тот случай). Во втором и справа и слева аргументы, так как "Time.minutes" является командой для запроса цифры с модуля затем оператор  "==" сравнивает их и если есть совпадения , то возвращает значение true оператору "или" итд. по цепочке . 

b707
Offline
Зарегистрирован: 26.05.2017

очень слабые проблески видны, но пока очень далеко от реального понимания.

Да, цифра является точно таким же аргументом для логических операций. как и выражение Time.minutes == 0. Копайте в эту сторону, выход там.

напомню, что решением задания будет являтся четкий ответ, при каких значениях Time.minutes "сработает" первое условие - и при каких второе. И почему.

Пока же вместо ответа я читаю какое-то маловнятное бормотание..

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

 при каких значениях Time.minutes "сработает" первое условие - и при каких второе. И почему.

первое при значении 49.

второе 49, 10 , и 15.

по тому, что в первом условии только первый оператор "или" сравнивает изменяющееся значение Time.minutes с значением 49, а в остальных случаях цифру с цифрой, так как эти значения ни что не меняет, они никогда не будут истиной.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Posol88 пишет:

первое при значении 49.

Первое сработает всегда, сколько бы минут ни было.  Ответь на вопрос теперь: Почему? 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Пацказка, в Си логический тип это int, для которого false это ноль и true всё что не ноль

b707
Offline
Зарегистрирован: 26.05.2017

DetSimen пишет:

Первое сработает всегда, сколько бы минут ни было.  Ответь на вопрос теперь: Почему? 

ну вот :( - испортил всю вечеринку :)

Posol88
Offline
Зарегистрирован: 14.11.2019

DetSimen пишет:

Пацказка, в Си логический тип это int, для которого false это ноль и true всё что не ноль

сначала я подумал  - ну *** приехали. потом взял листочек с ручкой и выписал это "грЁбанное" условие.

и тут до меня дошло "или" возвращает истину когда один из аргументов истина, а если цифра  - просто цифра без каких либо условий так "или" и возвращает истину... по этому условие для if выполняется всегда! 

да.............

sadman41
Offline
Зарегистрирован: 19.10.2016

Коту сегодня Пурину не выдавать.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Posol88 пишет:

и тут до меня дошло "или" возвращает истину когда один из аргументов истина, а если цифра  - просто цифра без каких либо условий так "или" и возвращает истину... по этому условие для if выполняется всегда! 

БИНГАБ-ТЬ!!!   2 нужных нейрона у тебя уже сцепились.  Продолжай. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

sadman41 пишет:

Коту сегодня Пурину не выдавать.

Чойта?

Posol88
Offline
Зарегистрирован: 14.11.2019

я бы сам до скончания веков думал... что бы такое понять нужно мыслить по другому... а это по ходу годами вырабатывается 

не, все равно круто...  :-)

sadman41
Offline
Зарегистрирован: 19.10.2016

DetSimen пишет:

sadman41 пишет:

Коту сегодня Пурину не выдавать.

Чойта?

А зачем в тапки b707 ссал? ;)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

sadman41 пишет:

А зачем в тапки b707 ссал? ;)

Posol88
Offline
Зарегистрирован: 14.11.2019

ладно , одно выяснили. Но вопросы не закончились. подключаю RTC DS1302 к  arduino Pro mini которую в свою очередь к UNO через RX, TX.   

UNO к компуктеру.  

вешаю выводы RTC_DS1302,A4,A6,A5); //назначение пинов обмена данными RST, CLK, DAT

и загружаю скетч (он врятли нужен тут но на всякий)

#include <Servo.h>
#include <iarduino_RTC.h> 
iarduino_RTC Time (RTC_DS1302,A4,A6,A5); //назначение пинов обмена данными RST, CLK, DAT
Servo servo;                          //имя сервопривода
int pos = 0;                          //переменная хранящая угол поворота сервопривода 
unsigned long TimeWork;               //переменная хранящая время включения сервопривода
const char LED = 2;                  //номер пина светодиода(стадия разработки)
unsigned long r;                      //переменная хранящая время прошедшее с момента вывода даты и времени с RTC в порт
boolean qr = true;                    //переменная меняющая значение в момент включения и выключения сервопривода(служит для ограничения срабатывания по времени с RTC до одного раза за секунду)
void setup(){
   delay(300);                          //время на подумать
   Time.begin();                        //инициализация работы часов
   servo.attach(A3);                    //назначение пина управления сервоприводом                    
   Serial.begin(9600);                  //инициализация порта
   Time.settime(35,11,15,06,02,2020,4);  // 0  сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
   pinMode(LED, OUTPUT);                //назначение пина светодиода выходом (индикация работы)
   r = millis();                        
   pinMode(4,INPUT_PULLUP);
  // servoOpen();                            //выполнить функцию для изначального позицианирования
  // servoToClose();                         //выполнить функцию для изначального позицианирования
}
void loop(){
   boolean additional = !digitalRead(4);
   if (additional==HIGH){
    qr=false; 
    digitalWrite(LED,HIGH);
    TimeWork=millis();
    servoOpen();
//    Serial.println("BKЛ");
}
   if( millis()-r>=1000ul){             //оператор для настройки(выполнять раз в секунду)
      Serial.println (Time.gettime("H:i:s")); //выводить в серийный порт значения Час:Мин:Сек
      r=millis();                             //присвоить переменной значение millis
}    
   if (qr==true&&Time.Hours==7&&Time.minutes==00&&Time.seconds==10){ // если переменная qr имеет значение true и время 15:28:30 то
      qr=false;                                                       //присвоить переменной значение false
      TimeWork=millis();                                              //присвоить переменной значение millis
      digitalWrite(LED,HIGH);                                         //включить светодиод
      servoOpen();                                                    //выполнить функцию
//      Serial.println("BKЛ");                                          //вывести в серийный порт надпись ВКЛ (стадия настройки, отладки)
   }
  if (qr==true&&Time.Hours==18&&Time.minutes==00&&Time.seconds==10){  //если переменная qr имеет значение true и время 15:28:10 то
      qr=false;                                                       //присвоить переменной значение false
      TimeWork=millis();                                              //присвоить переменной значение millis
      digitalWrite(LED,HIGH);                                         //включить светодиод
      servoOpen();                                                    //выполнить функцию
//      Serial.println("BKЛ");                                          //вывести в серийный порт надпись ВКЛ (стадия настройки, отладки)
   }
  if (millis()-TimeWork>=5000ul&&qr==false){                          //если переменная qr имеет значение false, а с момента присвоения переменной TimeWork значения millis прошло 5 сек то
     qr=true;                                                         //присвоить переменной значение true
     digitalWrite(LED,LOW);                                           //вsключить светодиод
     servoToClose();                                                  //выполнить функцию
//     Serial.println("BыKл");                                          //вывести в серийный порт надпись ВыКл (стадия настройки, отладки)
   }
 }
 void servoOpen(){                                                    //создать функцию
      for (pos = 90; pos >= 0; pos -= 1) {                          //оператор:если переменная pos ровна нулю то: это меньше или ровно 90?: если да то прибавить к значению переменной pos единицу и выполнить функцию 
           servo.write(pos);                                          //повернуть вал сервопривода на градус равный значению переменной pos
           delay(10);                                                  //перерыв в работе 0.005сек
      }
}
void servoToClose(){                                                  //создать функцию
      for (pos = 0; pos <= 90; pos += 1){                         //оператор:если переменная pos ровна 90 то: это больше или ровно 0?: если да то отнять от значения переменной pos единицу и выполнить функцию
           servo.write(pos);                                          //повернуть вал сервопривода на градус равный значению переменной pos
           delay(10);                                                  //перерыв в работе 0.005сек
     }
}

скетч загружается без проблем, но в серийный порт вместо времени идут одни нули 00:00:00 (за то как и положено раз в секунду)

может ли это быть из за того, что на плате UNO нет пина "A6" а на Pro mini я его использую  как "CLK"?

sadman41
Offline
Зарегистрирован: 19.10.2016

A6/A7 - специализированные пины, их трогать запрещается.

Posol88
Offline
Зарегистрирован: 14.11.2019

sadman41 пишет:

A6/A7 - специализированные пины, их трогать запрещается.

понял))))

b707
Offline
Зарегистрирован: 26.05.2017

Posol88 пишет:

может ли это быть из за того, что на плате UNO нет пина "A6" а на Pro mini я его использую  как "CLK"?

судя по этой фразе, вы точно мыслите не алгоритмами... Вчитайтесь сами - "может ли схема на Про мини не работать из-за того, что на плате Уно нет пина А6" ??

Хотя человеку с ассоциативной гуманитарной логикой все понятно :)

bwn
Offline
Зарегистрирован: 25.08.2014

DetSimen пишет:

sadman41 пишет:

А зачем в тапки b707 ссал? ;)

Аха, щас. Пока, пердуперждение.))))

 

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

Posol88 пишет:

может ли это быть из за того, что на плате UNO нет пина "A6" а на Pro mini я его использую  как "CLK"?

судя по этой фразе, вы точно мыслите не алгоритмами... Вчитайтесь сами - "может ли схема на Про мини не работать из-за того, что на плате Уно нет пина А6" ??

Хотя человеку с ассоциативной гуманитарной логикой все понятно :)

я тоже так подумал, просто последнее время стал сомневаться в своих умозаключениях

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

Хотя человеку с ассоциативной гуманитарной логикой все понятно :)


Непонятно - комплимент это или наоборот...

Posol88
Offline
Зарегистрирован: 14.11.2019

Здравствуйте товарищи! залип в книге на системах счисления. пробовал пропустить этот раздел но дальше без его понимания вообще ни чего не понятно.

Если бы наша вычислительная система была заимствована у собак, то она бы была 
восьмеричной (еше один "разряд", находящийся на задней части каждой лапы, не 
учитывается). Эта система счисления работала бы не менее хорошо: 
123(основание 10) = 1 * 8(в степени 2) + 2 * 8(в степени 1) + 3 * 8(в степени 0) = 173(основание 8)
 Индексы 10 и 8 указывают систему счисления:10 — десятичная. 8 — восьмеричная.
 Основанием системы счисления может быть любое положительное число.

цифры в тексте книги отображены плохо, (сканер видимо и редактор который переводил отсканированное изображение в текст постарались) по этому кое какие цифры по собственной логике менял. вот оригинал:https://www.litmir.me/BookFileDownloadLink/?id=220715&inline=1 стр.№48.

считаю: 1*64 +2*8+3*1= 64+16+8 = 88

если двойку заменить на семерку как в примере, то получится : 1*64+7*8+3*1=123. но, тогда не понятно откуда

взялась эта 7 и почему ответ 173 а не 123... и вообще, нам же перевести нужно, а значит результат должен отличатся от начального числа

вот. смотрел как переводят с системы в систему в других местах, но те способы от приведенного в книге разительно отличаются.

P.S. помогите кто чем может... пожалуйста 

(самое время сказать что я взял не ту книгу и вообще тупой XD)

b707
Offline
Зарегистрирован: 26.05.2017

Posol88 пишет:

взялась эта 7 и почему ответ 173 а не 123... и вообще, нам же перевести нужно, а значит результат должен отличатся от начального числа

именно потому, что мы не меняем число, а просто переводим в дргую запись - результат НЕ ДОЛЖЕН отличаться от начального числа.

173 восьмеричное и 123 десятичное - это одно и тоже

цифры получаются так:

123/ 64 =1
(123 % 64) / 8 =7
123 % 8  = 3

итого 173 (восьмеричное)

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Ппц , маразм крепчал...
За все время работы с ардуино, НИ РАЗУ мне не понадобились восмеричные числа.
Несколько раз понадобилась хз какая система специально для часов придуманная, даже название не помню.

Но этому то чайнику зачем нужны эти системы счисления ?

Posol88
Offline
Зарегистрирован: 14.11.2019

ответ прост - для понимания дальнейших примеров приводимых в книге "С++ для чайников"

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Posol88 пишет:

ответ прост - для понимания дальнейших примеров приводимых в книге "С++ для чайников"

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

Posol88
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

 

цифры получаются так:

123/ 64 =1
(123 % 64) / 8 =7
123 % 8  = 3

итого 173 (восьмеричное)

я прошу прощения за свой непонятливый разум, а откуда взялось 64?  

сори, не отвечайте.. туплю....

 

Posol88
Offline
Зарегистрирован: 14.11.2019

это все гребаная лень... так всегда бывает когда сначала спрашиваешь, а потом думаешь...

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Posol88 пишет:

считаю: 1*64 +2*8+3*1= 64+16+8 = 88

А скажи мне, мил человек - ты всегда применяешь правила сложения/умножения в десятеричной системе к правилам сложения/умножения в другой системе? Я тебе больше скажу: в восьмеричной системе счисления - нет цифры 8, там только цифры [0,7].

К тому же - тут ошибка у тебя, надо не 64+16+8, а 64+16+3.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Вот, для понимания: https://calculatori.ru/perevod-chisel.html Там же есть и другие калькуляторы, для сложения, например. Разъясняют, как так получилось.

Posol88
Offline
Зарегистрирован: 14.11.2019

DIYMan пишет:

Вот, для понимания: https://calculatori.ru/perevod-chisel.html Там же есть и другие калькуляторы, для сложения, например. Разъясняют, как так получилось.

большое спасибо, за Ваше неравнодушие! как раз только что нашел этот же сайт и с его помощью разбераюсь))))

Posol88
Offline
Зарегистрирован: 14.11.2019

всех с масленицей! 

прошу Вас посмотреть код и сделать какие нибудь замечания по поводу использования одной кнопки для двух действий:

#include <Servo.h>
#include <iarduino_RTC.h>
iarduino_RTC Time (RTC_DS1302, A0, A2, A1); //назначение пинов обмена данными RST, CLK, DAT
Servo servo;                          //имя сервопривода
int pos = 0;                          //переменная хранящая угол поворота сервопривода
unsigned long TimeWork;               //переменная хранящая время включения сервопривода
const char LED = A3;                  //номер пина светодиода(стадия разработки)
unsigned long r;                      //переменная хранящая время прошедшее с момента вывода даты и времени с RTC в порт
boolean qr = true;                    //переменная меняющая значение в момент включения и выключения сервопривода(служит для ограничения срабатывания по времени с RTC до одного раза за секунду)
boolean QR = true; 
byte c = 0;
int i=1;
unsigned long TimeWait;
int W=1;
void setup() {
  delay(300);                          //время на подумать
  Time.begin();                        //инициализация работы часов
  servo.attach(A4);                    //назначение пина управления сервоприводом
  Serial.begin(9600);                  //инициализация порта
  //Time.settime(35,41,16,18,02,2020,2);  // 0  сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
  pinMode(LED, OUTPUT);                //назначение пина светодиода выходом (индикация работы)
  r = millis();
  pinMode(A5, INPUT_PULLUP);
}
void loop() {
  boolean additional = !digitalRead(A5);
     if(i==1&&additional==HIGH){
            c++;
            TimeWait = millis();
            i=0;
            TimeWork = millis();
            if(c>=2){
              c=2;
            }
            delay(20);                                               
         }
     if (additional==LOW){
         i=1;
         delay(20);
     }
  if(millis()-TimeWait>=1200&&c!=0){
     if(W==1){
       digitalWrite(LED, HIGH);
       servoOpen();
       QR = false;
       W = 0;
       }
      switch (c){
         case 1:
            if (millis() - TimeWork >= 7850ul && QR == false) {                 
                QR = true;                                                       
                digitalWrite(LED, LOW);                                          
                servoToClose();
                c=0;
                TimeWait=0;
                W=1;
            }
            break;
          case 2:
             if (millis() - TimeWork >= 4425ul && QR == false) {                 
                QR = true;                                                       
                digitalWrite(LED, LOW);                                          
                servoToClose();
                c=0;
                TimeWait=0;
                W=1;
             }
                break;
           default:
          TimeWait=0;
          c=0;
       }
  }
    // if ( millis() - r >= 1000ul) {       //оператор для настройки(выполнять раз в секунду)
   //    Serial.println (Time.gettime("H:i:s")); //выводить в серийный порт значения Час:Мин:Сек
  //  r = millis();                           //присвоить переменной значение millis
 //  }
    if (qr == true && Time.Hours == 7 && Time.minutes == 00 && Time.seconds == 10) { // если переменная qr имеет значение true и время 15:28:30 то
        qr = false;                                                     //присвоить переменной значение false
        TimeWork = millis();                                            //присвоить переменной значение millis
        digitalWrite(LED, HIGH);                                        //включить светодиод
        servoOpen();                                                    //выполнить функцию
  }
  if (qr == true && Time.Hours == 18 && Time.minutes == 00 && Time.seconds == 10) { //если переменная qr имеет значение true и время 15:28:10 то
    qr = false;                                                     //присвоить переменной значение false
    TimeWork = millis();                                            //присвоить переменной значение millis
    digitalWrite(LED, HIGH);                                        //включить светодиод
    servoOpen();                                                    //выполнить функцию
    //      Serial.println("BKЛ");                                          //вывести в серийный порт надпись ВКЛ (стадия настройки, отладки)
  }
  if (millis() - TimeWork >= 6850ul && qr == false) {                 //если переменная qr имеет значение false, а с момента присвоения переменной TimeWork значения millis прошло 5 сек то
    qr = true;                                                       //присвоить переменной значение true
    digitalWrite(LED, LOW);                                          //вsключить светодиод
    servoToClose();                                                  //выполнить функцию
    //     Serial.println("BыKл");                                          //вывести в серийный порт надпись ВыКл (стадия настройки, отладки)
  }
}
void servoOpen() {                                                   //создать функцию
  for (pos = 90; pos >= 0; pos -= 1) {                            //оператор:если переменная pos ровна 90 то: это больше или ровно 0?: если да то отнять от значения переменной pos единицу и выполнить функцию
    servo.write(pos);                                          //повернуть вал сервопривода на градус равный значению переменной pos
    delay(10);                                                 //перерыв в работе 0.005сек
  }
}
void servoToClose() {                                                 //создать функцию
  for (pos = 0; pos <= 90; pos += 1) {                            //оператор:если переменная pos ровна нулю то: это меньше или ровно 90?: если да то прибавить к значению переменной pos единицу и выполнить функцию
    servo.write(pos);                                          //повернуть вал сервопривода на градус равный значению переменной pos
    delay(10);                                                 //перерыв в работе 0.005сек
   }
    servoDo();
}
void servoDo(){
  for (pos = 90; pos >= 88; pos -= 1) {                            
    servo.write(pos);                                          
    delay(10);
   }
}

P.S. на испытаниях проблем не выявлено.