Выполнение цикла определённое время
- Войдите на сайт для отправки комментариев
Ср, 20/01/2016 - 10:20
Сообственно нужно что цикл который должен выполняться 7 минут, в цикле в это время будет всё время идти проверка условий if else. Чёто в голову ничего так не приходит
Набросал такое бред конечно:
int ten=5; int t=A0; int t2=233; int t1=0; int timer=0; void setup() { pinMode(ten, OUTPUT); pinMode(t, INPUT); } void loop() { // put your main code here, to run repeatedly: while(timer<delay(60000);delay(60000);delay(60000);delay(60000);delay(60000);delay(60000);delay(60000);) {t1=analogRead(t1); delay(40); if(t1<t2)){ digitalWrite(ten,1)} else if(t1>t2){ digitalWrite(ten,0) } timer++; } }
Бред из - за того что в переменную INT НЕ ВОЗМОЖНО ЖЕ ЗАПИСАТЬ ЧИСЛО БОЛЬШЕ 255, НУЖНЫ КАКИЕ - ТО ДРУГИЕ ОПЕРАТОРЫ МОЖЕТ MICROS КАК - ТО ПРИМЕНИТЬ?
Вам поможет функция unsigned long millis(void); и пример BlinkWithoutDelay. А также много тем было на форуме на эту тему.
АА лучше вайл вообще убрать, есть же уже loop тот же цикл. Проверять время через миллис на каждом цикле и если еще не вышло выполнять другие ифы
Penni Спасибо.
Так а смысл в цикле который будет выполняться один раз, проще в этот вайл добавить условие через И, тогда этот вайл выполнится за 7мь минут и больше не будет выполняться.
Бред из - за того что в переменную INT НЕ ВОЗМОЖНО ЖЕ ЗАПИСАТЬ ЧИСЛО БОЛЬШЕ 255,
Да, нет, бред здесь совсем по другой причине.
Два решения тут, только не в коем случае не читайте ни одного сообщения ни сверху ни снизу.
И даже в этом ничего не читайте. Просто забирайте готовый код.
http://arduino.ru/forum/programmirovanie/zaderzhka-bez-delay-i-perepolne...
А читать надо классику:
http://alxarduino.blogspot.ru/2013/09/BlinkAndPrintWithoutDelay.html
http://alxarduino.blogspot.ru/2013/09/ComfortablyBlinkWithoutDelay.html
А если мне надо два цикла выполнить один с одним временем второй с другой со вторым. Так пойдёт?
Тогда уж так
Andy, этот скетч не работает
Тогда уж так
Нет, не так!
Вы присваиваете переменной значение миллиса,
но пока вы делаете свои "действия", а они могут быть и сильно длительными, миллис уже сильно изменится.
Я думаю лучше запрашивать миллис каждый раз напрямую и именно тогда когда он понадобился.
Это как глянуть на часы.
но пока вы делаете свои "действия", а они могут быть и сильно длительными, миллис уже сильно изменится.
Всем спасибо).
К циклу while какие-то смутные подозрения.....
Что работает?
Вы используете while пока не совпало.
И сидите в этом цикле.
Вам что время некуда девать?
Тогда delay применяйте....
Ваш код слегка подправленный, чтобы не ждать долго:
Тогда delay применяйте....
Нармальные поцаны delay не пользуют :))))))))))))
Это шутка, конечно, но устраивать цикл с выходом из него по ИФ или по времени.....
А потом другой такой-же.....
Ну если ничего другого не нужно делать, тогда конечно можно....
А вдруг ещё что-то понадобиться? А мы не в том цикле.....
Кстати, о делэе. Вчерась полез в штатные файлы AVR Studio. Там есть delay на основе AVRCLib. Так вот, у делэя параметр имеет тип double! Я чуть со стула не свалился. Это ж надо, блин, подогнать такую огромную библиотеку (плавающую точку) ради одного дурацкого числа только потому, что лень всё в целых числах аккуратно прописать. А ведь AVR Studio - это тебе на Arduino IDE, сделанная изначально для чайников - это профессиональная среда разработки! Я охреневаю, дорогая редация!
.......но на платформе Arduino, double и float имеют одинаковую точность......
точность нам, конечно, не важна, зато дипазон для дэлэя просто поражает!
Диапазон значений — от -3.4028235E+38 до 3.4028235E+38 Это-ж скоко-то будет, а????????
Кто считать умеет, помогите!
;)
.......но на платформе Arduino, double и float имеют одинаковую точность......
Да, плевать на точность. Факт использования плавающей точки, это + полтора килобайта к размеру программы сразу! Чего там нельзя было целыми сделать? Помнится, прибалдел оттого, как в библиотеке DallasTemperature флоат завели, чтобы результат вернуть, но там хоть "для чайников", а здесь-то типа "профессиональная среда", блин.
Диапазон значений — от -3.4028235E+38 до 3.4028235E+38 Это-ж скоко-то будет, а????????
Во-во, надули с диапазоном - он там как раз довольно скромный :(
Дошел до
Дальше читать не стал.
Дальше читать не стал.
зря - там ещё интересней
while
(timer<delay(60000);delay(60000);delay(60000);delay(60000);delay(60000);delay(60000);delay(60000);)
Дошел до
Дальше читать не стал.
И что тут не так?