Не считывать с порта если идет подсчет или есть сигнал на пинах
- Войдите на сайт для отправки комментариев
Втр, 21/10/2014 - 19:21
Здравствуйте!
Такая проблема, мне нужно пока есть сигнал на пинах или идет подсчет импульсов, то нужно закрыть порт для чтения, пока не пройдет подсчет или сигнал. У меня получается так, когда я отправляю данные в порт вовремя пересчета, то у меня значение сбивается на столько импульсов сколько раз я послал в порт значений.
Помогите решить данную проблему.
Вот мой код
void loop() { prirost(); if(digitalRead(btn)==LOW && digitalRead(btnOUT)==LOW){ in++; out++; delay(100); } else if(digitalRead(btn)==LOW && digitalRead(btnOUT)==HIGH){ in++; delay(100); }else if (digitalRead(btnOUT)==LOW && digitalRead(btn)==HIGH) { out++; delay(100); } //в этом месте нужно условие чтобы не сработала нижняя часть кода если едет подсчет в верхней части if(Serial.available()) { Serial.setTimeout(100); port = Serial.parseInt(); if(port == portB) { vivod(); } } }
Пробовал флагами и pulseIn() но все не то, в первом и втором случае подсчет идет неправильно.
Это уже третья Ваша тема, посвященная одному и тому же. Напрасно так делаете.
http://arduino.ru/Reference/AttachInterrupt
Я вот пробую вот так
Но ничего не получается, а не должно во время счета принимать данные потому как идет потеря (сколькоя обратился раз столько едениц и потерял)
Я уже запутался, объясните пожалуйста
Довольно путано все, "принимать данные" - это из Serial имеется в виду ? Если да, то принимайте данные в любом случае (чтобы буфер очистить), но работайте с ними только если пересчет закончился (критерий окончания пересчета мне тоже не совсем понятен), а иначе игнорируйте принятое.
Serial.end() ещё есть.
Serial.begin() и Serial.end() постоянно дергать ? Как-то некошерно это IMHO.
А в прерывании delay разве работает?
Araris А чем это плохо?
Araris А чем это плохо?
Я не утверждаю, что это плохо, просто в своих поделках стараюсь без необходимости периферию не дергать (инициализация-закрытие в виду имеется). Пытался сейчас найти в Тырнете время выполнения Serial.begin и Serial.end - не нашел, самому измерить - лень, да и непринципиально это.
Serial.end() ещё есть.
Вот пытаюсь дергать но не получается.
когда у меня идет счетчик то я отключаюсь от порта Serial.end(); а потом соединение не возвращается. Хотя пишу Serial.begin(9600); можно ли как-то это исправить.
Вот код
Неа, вообще нет связи с портом.
в самом начале основного цикла инициализируй
в самом начале основного цикла инициализируй
Сделал, резудбтат тот же(