Вопрос про МИЛЛИС()
- Войдите на сайт для отправки комментариев
Вс, 17/09/2017 - 16:12
В програмировании новичек.Прошу обьяснить на человеческом языке как пользоваться миллись, данный код будет работать так-при получении смс с текстом ОН переходим к функции старт в ней включаем зажигание,ждем пару секунд,включаем стартер на пару секунд,считываем пришел ли положительный сигнал со стартера(если нет то выключаем зажигание) если да то через заданное время например через 10 минут выключаем зажигание.Если приходит смс со словом ОФФ все выключаем.
String numberSMS_1 = "+79111310441"; // Номер абонента №1 для СМС (отличается только знаком +) String text_1 = "ENGINE START"; // Меняем название зоны на свое, на латинице. String text_2 = "ENGINE STOP"; // Меняем название зоны на свое, на латинице. String text_3 = "ENGINE NO START,RESTART"; String text_4 = "ENGINE NO START"; #include <SoftwareSerial.h> SoftwareSerial gprsSerial(2,3); // установка контактов 2 и 3 для программного порта (для микроконтроллера ардуино убать букву D) // (для микроконтроллера ардуино убать букву D) byte engine=11; byte starter=12; byte generator=8; byte parking=7; char* adminNumber[]={"+79111310441", "+79111310441"}; int8_t i; void setup() { digitalWrite(engine,!LOW); // выключаем ING 1 digitalWrite(starter,!LOW); // выключаем STARTER //ВХОДЫ pinMode(engine,OUTPUT); //зажигание pinMode(starter,OUTPUT); //стартер //ВЫХОДЫ pinMode(generator,INPUT); //вход генератора pinMode(parking,INPUT); //вход положения селектора акпп Serial.begin(19200); gprsSerial.begin(19200); // настройка приема сообщений gprsSerial.print("AT+CMGF=1\r"); // устанавливаем текстовый режим смс-сообщения delay(500); // gprsSerial.print("AT+IFC=1, 1\r"); // устанавливаем программный контроль потоком передачи данных delay(500); gprsSerial.print("AT+CPBS=\"SM\"\r"); // открываем доступ к данным телефонной книги SIM-карты delay(500); gprsSerial.print("AT+CNMI=1,2,2,1,0\r"); // включает оповещение о новых сообщениях, новые сообщения приходят в следующем формате: +CMT: "<номер телефона>", "", "<дата, время>", //на следующей строчке с первого символа идёт содержимое сообщения delay(700); gprsSerial.println("AT+CLIP=1"); delay(300); gprsSerial.println("AT+CMGF=1"); delay(300); gprsSerial.println("AT+CSCS=\"GSM\""); delay(300); gprsSerial.println("AT+CNMI=2,2,0,0,0"); delay(300); } String currStr = ""; // если эта строка сообщение, boolean isStringMessage = false; // то ставим флаг на разрешение оброботки SMS /* Функция отправки SMS */ void sendSMS(String text, String phone) { gprsSerial.println("AT+CMGS=\"" + phone + "\""); delay(500); gprsSerial.print(text); delay(500); gprsSerial.print((char)26); delay(2500); } void loop() { if (!gprsSerial.available())// если не данных от модуля SIM800l, то дальше не идем. return; char currSymb = gprsSerial.read(); // записываем в переменую символы, которые получили от модуля. if ('\r' == currSymb) // если получили символ перевода коректи в начало строки, это означает что передача сообщения от модуля завершена. { if (isStringMessage) // если текущая строка – сообщение, то… { if (!currStr.compareTo("On")) // если текст сообщения совпадает с "on", { start(); } //---------------------------------------------------------------------------------------- if (!currStr.compareTo("Off")) // если текст сообщения совпадает с "off", { stop(); } isStringMessage = false; } else { if (currStr.startsWith("+CMT")) { // если текущая строка начинается с "+CMT", то следующая сообщение for (i = 0; i <= 1; i++) { // число 3 - это количество заданных тел.номеров. if (currStr.indexOf(adminNumber[i])) //сверяем номер с номером прешедним SMS { Serial.println(adminNumber[i]); isStringMessage = true; break; } } } } currStr = ""; } else if ('\n' != currSymb) { // игнорируем второй символ в последовательности переноса строки: \r\n , и currStr += String(currSymb); //дополняем текущую команду новым сиволом } } //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void start() { digitalWrite(engine,LOW); // включаем ING 1 delay(2000); digitalWrite(starter,LOW); // включаем STARTER delay(2000); if(digitalRead(generator)==1) //ЕСЛИ ДВИГАТЕЛЬ ЗАВЕЛСЯ { digitalWrite(starter,!LOW); // выключаем STARTER } else //ЕСЛИ НЕТ { digitalWrite(starter,!LOW); // выключаем STARTER digitalWrite(engine,!LOW); // включаем зажигание } delay(5000); //-----------------------КАК В ЭТОМ МЕСТЕ СДЕЛАТЬ ЗАДЕРЖКУ НА 10 МИНУТ С ПОМОЩЬЮ МИЛЛИС КАК НИ ЛОМАЛ ГОЛОВУ НИКАК НЕ ПОБЕДИТЬ МИЛЛИС ЧТО БЫ ЧЕРЕЗ 10 МИН // ВЫКЛЮЧАЛСЯ СТАРТЕР И ВЫКЛЮЧАЛОСЬ ЗАЖИГАНИЕ //-----------------------ЕСЛИ МОЖНО ПОПОДРОБНЕЕ РАСПИСАТЬ ДЕЙСТВИЯ С МИЛЛИС { digitalWrite(engine,!LOW); // выключаем ЗАЖИГАНИЕ } } //_____________________________________________________________________________________________________________________________________________________ void stop() { digitalWrite(engine,!LOW); // выключаем ING 1 digitalWrite(starter,!LOW); // выключаем STARTER }
Строка 139 кода
Найдите blink without delay.
Уже все просмотрел,каким образом вставить в мой скетч,пробывал различные вариации с миллисом,либо все выключается либо ничего не выключается,а что бы выключалось через определенное время никак не получается,с этим миллисов весь мозг вывернул,сижу неделю с ним никак не разобраться.
Сделал по вашему совету и получается что вклучается зажигание включается стартер проверяется пришло ли с генератора 1 выключается стартер по идее дальше должен работать миллис но все выключается.
Разбирайтесь, как Ваша программа работает. Вот прямо идите по тексту от строчки к строчке и вникайте, что, зачем и в каком случае выполняется. Сейчас Вы время проверяете только один единственный раз. Получили нужную смс, что-то сделали, посмотрели не пора ли сделать следующее действие, не пора? - ну и ладно. Всё, дальше ждёте СМС. Про время забыли. На время-то надо глядеть постоянно, а что у Вас постоянно выполняется - цикл loop! Вас же посылали изучать Мигаем светодиодом без delay(). Изучили плохо. Обратите внимание где в примере расположена проверка прошедшего времени и на комментарий "здесь будет код, который будет работать постоянно". У Вас постоянно работающий код это получение и разбор СМС.
Проникайтесь и попробуйте ещё раз переделать Ваш скетч. Сейчас Вы непонятный Вам кусок кода скопипастили не думая куда попало, в другой непонятный Вам код. Всё работает правильно, а то, что не так как Вам хотелось - неудивительно.
Так обьясните нормально если хотите помочь,то что отправили смотреть как диодики моргают так они и у меня моргают,так смотрю уже целую неделю,глаза закрываю а они все моргают),не понимаю я как этот миллис работает и тем более как его применить в моем случае и куда вставить в коде,а обьяснить толком никто не может,скетч переписать-зачем мне его переписывать???если к примеру с delay он работает.
millis() - это просто количество миллисекунд от включения питания ардуино. Часы на башне видели? - вот это тоже самое.
Если не понятно - в дворники,там с IQ 70 можно нормально зарабатывать.
Спасибо,желаю вам всего хорошего.
Такие все умные но никто обьяснить не может.
Так обьясните нормально если хотите помочь,то что отправили смотреть как диодики моргают так они и у меня моргают,так смотрю уже целую неделю,глаза закрываю а они все моргают),не понимаю я как этот миллис работает и тем более как его применить в моем случае и куда вставить в коде,а обьяснить толком никто не может,скетч переписать-зачем мне его переписывать???если к примеру с delay он работает.
Епст, если с делаями все устраивает, зачем вопрошать о миллис?
Если хочешь все таки понять с миллис, скопипасти сюда код мигания без делей и потом построчно расскажи, что он делает с твоей точки зрения (своими словами). Где неверные выводы, поправим.
На моей памяти на форуме объясняли множество раз. Почитайте форум. Просто в лом писать еще раз. Всё должно быть так же, как если бы это делали сами глядя на цифровые часы, миллис это текущее время. Опишите все действия для себя, а потом в программе.
В програмировании новичек.
Вот, знаете, как Вы (и остальные новички) не можете понять простую вещь по поводу этой фразы? Вы пришли в некое сообщество. Будьте интереснм этому сообществу и люди к Вам потянтуся. А попытка поставить себя в привилегированное положение на таком стрёмном основании, ничего акромя батхерта не порождает.
Вот Вы хотите понять миллис. Но программа в 150 строк слишком сложна для отработки на ней понимания миллис. Вам дали ОТЛИЧНЫЙ совет
Если хочешь все таки понять с миллис, скопипасти сюда код мигания без делей и потом построчно расскажи, что он делает с твоей точки зрения (своими словами). Где неверные выводы, поправим.
Сделайте это и Вам помогут. Это работа. Если же Вы не хотите работать, а хотите качать права типа
В програмировании новичек.
Такие все умные но никто обьяснить не может.
то, помочь Вам смогут только вот на этом сайте.
УВАЖАЕМЫЙ Евгений у вас правильный аватар
Так обьясните нормально если хотите помочь,то что отправили смотреть как диодики моргают так они и у меня моргают,так смотрю уже целую неделю,глаза закрываю а они все моргают),не понимаю я как этот миллис работает и тем более как его применить в моем случае и куда вставить в коде,а обьяснить толком никто не может,скетч переписать-зачем мне его переписывать???если к примеру с delay он работает.
Епст, если с делаями все устраивает, зачем вопрошать о миллис?
Если хочешь все таки понять с миллис, скопипасти сюда код мигания без делей и потом построчно расскажи, что он делает с твоей точки зрения (своими словами). Где неверные выводы, поправим.
Смотрите,это будет автозапуск,скетч на данный момент упрощен для того чтобы не путать Вас с лишней информацией,на данный момент будет работать так-при получении смс с текстом "On" переходим к функции void start (строка 124) в ней включаем зажигание,ждем пару секунд,включаем стартер на пару секунд,считываем пришел ли положительный сигнал со стартера(если нет то выключаем зажигание) если да то (вот здесь если вставляем delay,строка 139 в первом сообщении) через заданное время например через 10 минут выключаем зажигание (а мне нужно сюда вставить миллис для того что бы если мне нужно заглушить авто раньше я мог сделать это и для того что будет еще одно условие,что если во время прогрева(void start() ) автомобиль будет снят с Parking или нажата педаль тормоза то он будет заглушен ( void stop() ) .А delay не устраивает потому-что смогу сделать прогрев 10 минут(к примеру)но не смогу в это время контролировать Parking и нажатие педали тормоза(это для того что бы если к примеру машина работает на автозапуске,кто-то захочет на ней уехать сняв с Parking или нажав педаль тормоза она глохла).
УВАЖАЕМЫЙ Евгений у вас правильный аватар
Спасибо. Я тоже так считаю.
А вам даже сказать нечего,с Вами все и так ясно...
всё, что я мог сказать о миллис - сказано здесь:
класс титановый велосипед для тактовой кнопки.
класс титановый велосипед StopWatch.
класс титановый велосипед для delay без delay().
больше мне сказать нечего. :D
Дорогой гость! Тут сто раз разбирали этот самый, *************** тобой невесть откуда, скетч автозапуска. И сто раз помогали переделывать его в неблокирующую форму (то есть без делеев). Ты просто та соломинка, которая переломила спину верблюду.
- Вот понимаешь? - не повезло именно тебе. Ты оказался тем, кто всех ***************! ;)
Тебе предложили вариант - действительно учиться. Не скажу за других, но тут есть очень грамотные програмисты с серьезным педагогическим опытом. Это и я, уж простите мою скромность, и, конечно, ЕвгенийП, и еще люди. Тебе сказали с чего начинать: с попытки понять как именно работает "блинк без делей". Ты решил *************** на тему того, что тебе, в твоих влажных фантазиях, кто-то, что-то должен (объяснять?). Твой выбор. Не разделяю, но уважаю...Хотя вру, нет, не уважаю.
Мне тоже такие новички нравяца.
Приходит такой, школьнег, в больницу с другом, пристает к первому попавшемуся в коридоре санитару, научи меня вотпрямщажже аппендицит вырезать, я вот тут скальпель на помойке нашол, а у друга живот болит, вырезать хочу, может поможет. А учиться не, не хочу, это же 6 лет надо, да трупы в анатомичке препарировать, не мое это. Вы мне вот щаспрям лучше тут обьясните как скальпелем тыкать, да размахивать, и всё у меня получится, я же умненький, и друга спасу, а то пиво пить не с кем. Примерно так же и здесь, "Памагити, чота спёр, а у ей внутре неонка не горить, ааааааа, чо делать?!!!"
Печалит, что у 90% нынешних жертв ЕГЭ, интеллекта гораздо меньше чем оптимизма на лицах персонажей картин Иеронима Босха. Увы.
Если хочешь все таки понять с миллис, скопипасти сюда код мигания без делей и потом построчно расскажи, что он делает с твоей точки зрения (своими словами). Где неверные выводы, поправим.
Смотрите,это будет автозапуск,скетч на данный момент упрощен для того чтобы не путать Вас с лишней информацией,на данный момент будет работать так-при получении смс с текстом "On" переходим к функции void start (строка 124) в ней включаем зажигание,ждем пару секунд,включаем стартер на пару секунд,считываем пришел ли положительный сигнал со стартера(если нет то выключаем зажигание) если да то (вот здесь если вставляем delay,строка 139 в первом сообщении) через заданное время например через 10 минут выключаем зажигание (а мне нужно сюда вставить миллис для того что бы если мне нужно заглушить авто раньше я мог сделать это и для того что будет еще одно условие,что если во время прогрева(void start() ) автомобиль будет снят с Parking или нажата педаль тормоза то он будет заглушен ( void stop() ) .А delay не устраивает потому-что смогу сделать прогрев 10 минут(к примеру)но не смогу в это время контролировать Parking и нажатие педали тормоза(это для того что бы если к примеру машина работает на автозапуске,кто-то захочет на ней уехать сняв с Parking или нажав педаль тормоза она глохла).
Фак его знает, это ответ на вопрос? Вроде на мой эпистолярный жанр особо не жаловались (запятые иногда путаю). Начали за миллис, а тут и СМС, и стартер, и тормоз, и прочая х-ня. Понимаете, мне похрен, как будет работать ваш код, был готов растолмачить миллис(), но после игры в обиженную институтку и это желание пропало.
А вам даже сказать нечего,с Вами все и так ясно...
всё, что я мог сказать о миллис - сказано здесь:
класс титановый велосипед для тактовой кнопки.
класс титановый велосипед StopWatch.
класс титановый велосипед для delay без delay().
больше мне сказать нечего. :D
Спасибо попробую разобраться.
Всем спасибо за приятное общение.Тема закрыта.