Официальный сайт компании Arduino по адресу arduino.cc
time = millis();
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вс, 17/02/2013 - 21:46
Использую в проге функцию millis(); Задача программы при поступлении сигнала запустить через 5 сек
time =millis();
if (RCval>1470&RCval<1550&&time>5000) {avar();}
void avar()
{
digitalWrite(9,1);
digitalWrite(10,1);
delay(strobArr1[4]);
digitalWrite(9,0);
digitalWrite(10,0);
delay(strobArr1[4]);
}
Первый запуск получается а потом миллис растет и все горит постоянно при совпадении второго условия. как можно обнулить миллис если услови не соответствует if (RCval>1470&RCval<1550) {avar();}
У вас переменная time постоянно принимает новые значения. Обнулить millis() ?! Ну ну, обнуляйте.
Замените
На это. И будет вам счастье.
if (RCval>1470&RCval<1550&&(millis()-time)>5000)
{
time=millis();
avar();
}
А еще лучше сделать так
попробовал ничего вообще не работает avar счас пробую второй вариант
Во втором посте скобку в конце забыл поставить.
тоже 0 реакции. я поставил
Да и вообще, показывать кусок программы не есть хорошо.
Что значит "0реакции" ? опишите конкретно что происходит.
Какой тип данных имеет переменная time ?
Вы не внимательны. Скажите какую функцию выполняет строка 75?
все убрал 75 заработала тока какая то большая пауза в мерцании. получается он выполняет avar каждые 5 сек????
мне нужно чтоб онао запустило через 5 сек и выполняло пока не поменяется значение 129 строки
>>тока какая то большая пауза в мерцании<<
Насколько большая ?
>>получается он выполняет avar каждые 5 сек????<<
Да. Плюс время на выполнение самой функции.
счас норм аварийка тока почемуто второй запус происходит через 3 секунды хотя первый через 5
>>тока почемуто второй запус происходит через 3 секунды хотя первый через 5<<
Наверное по тому что функции pulseIn и millis() вместе работают некорректно.
вы совершенно правы я в цикл засунул 2 пульсации чтоб меньше задержка была и это очень не нравилось millis
Эти функции используют один и тот же таймер.Потому и мешают друг другу.
Функции tone , millis , pulseIn, analogWrite плохо дружат друг с другом.
хотя всеравно глюк небольшой есть. а можнокак нибудь кроме милиса решить мою задачу??
просто не понимаю первый запуск все норм а потом иногда чутли не сразу врубается
а без них я не выйду с цикла. да и не могу догнать как так получается что иногда как тока попадаю в значения на запуск avar сразу врубается без 5 сек
Попробуйте вот так . Тип данных переменной val- bool.
про тип данных не понял
В самом начале программы впишите bool val=0;
И уберите pulseIn.
если убрать пульсацию я не смогу читать данные
"Пульсацией" вы называете функцию pulseIn ?
Значит придется убрать millis(). Выбирайте.
А лучше опишите алгоритм. Какие импульсы вам нужно измерять ?
да.я читаю приемник радиоуправляемой модели. а каким еще образом можно отложить запуск на 5 сек. может delay?
>>а каким еще образом можно отложить запуск на 5 сек. может delay?<<
Можно и так. Только не сильно ли большая задержка получается ?
Какой сигнал идет с вашего приемника ?
честно говоря даже не скажу пульсация как на сервопривод
как вариаент когда я на компе обращаюсь к ком порту чтоб увидеть значения милис обнуляется можно сделать это как нибудь в программе?
Он обнуляется потому что происходит reset (перезагрузка) МК.
голова кругом что придумать
последнее что пришло написать код часов и оринтироваться по секундной стрелки
Вообще пересмотреть все алгоритмы.
Поискать библиотеку для работы с вашим приемником.
Можно сделать так .
Но точность такого таймера сильно зависит от скорости выполнения всей программы и задержек.
Вобщем таймер неточный , но работать будет.
последний не подошел почемуто не пребовляет но идею понял счас попробую. я думал просто оотсчет времени по секундам но тоже не то
У вас val объявлена как bool ?
bool может иметь только два значения 1и 0.
Если да , то бъявите ее как int или long.
я нашел счас пробую. вот думаю как ее обнулить после завершения выполнения avar может else ?
обнуляется все норм но тока теперь не запускае avar
лучше не будет не будет спасибо. Думаю это самое оптимальное
пол дня промудохался
int val=0;
bool val2=0;
При выполнении условия первого if , будет задержка в 5 секунд. Потом будет выполняться функция avar();
решение как всегда простое тока никак до него не смог додуматься и задержек не видно
Функция else необязательна. Достаточно просто обнулять val где то в программе (в начале цикла).
Подучается когда поменялись данные он и обнулится в проге много всякого Г**НА поэтому пусть лучше сразу и уходит в 0. а то 1 тронеш и второе начинает тупить
Вот поэтому я и советую вам пересмотреть алгоритмы и программу в целом. Но если вас устраивает "Лишь бы работало" , то пусть будет так.
я просто не вижу что можно поменять и так вроде всего по минимуму. Просто когда начинал делать была а потом все новые и новые условия появлялись