Вопрос: I-Button считывается через раз
- Войдите на сайт для отправки комментариев
Вс, 18/02/2018 - 12:23
Добрый день!
Подскажите, почему в Loop цикле I-Button считывается через цикл?
Т.е приведенный код (лишнее убрано):
void loop(void) { delay(500); // пробовал разные величины Serial.print(" Kliucei v pamiati : "); Serial.println(bKey_Count+1); if (iButton.search(bKey_Data)){ Serial.println(" Naiden kliuc : "); iButton.reset(); } } /////////////END LOOP///////////
выдает при постоянно приложеном ключе следующий листинг:
.......... Kliucei v pamiati : 1 Kliucei v pamiati : 1 Naiden kliuc : Kliucei v pamiati : 1 Kliucei v pamiati : 1 Naiden kliuc : Kliucei v pamiati : 1 Kliucei v pamiati : 1 Naiden kliuc : Kliucei v pamiati : 1 Kliucei v pamiati : 1 Naiden kliuc : Kliucei v pamiati : 1 Kliucei v pamiati : 1 Naiden kliuc : Kliucei v pamiati : 1 .......
Библиотеку OneWire обновлял, с задержками - настройками игрался.
Можно ли решить эту проблему, чтоб не городить более сложный код для определения длительного подключения мастер-ключа ?
А делай зачем вообще нужен? Скорее всего пападаете в делай, вот ничего и не считывается
Делай нужен чтоб в терминал не так часто шли сообщения. Но даже откючив полностью, или наоборот увеличив, ничего не меняется. Ровно через раз считывается ключ.
jurijt - если вы рассчитываете на помощь - приведите полный код. Догадываться по двум строчкам, что вы там наворотили в остальном коде - занятие бестолковое.
Чтобы сообщения не так часто шли надо выводить их только когда ключ приложили...
(лишнее убрано):
Вы не задумывалсь о том, что если бы Вы действительно знали что там лишнее, а что - нет, Вам бы не пришлось задавать этот вопрос?
Это не значит, что надо вываливать код на 1000+ строк. Правильное поведение таково: сделать код, который демонстрирует проблему, но имеет минимальный размер. И именно этот код выложить.
jurijt - если вы рассчитываете на помощь - приведите полный код. Догадываться по двум строчкам, что вы там наворотили в остальном коде - занятие бестолковое.
Так в том и беда, что отключив все что "я наворотил", получается тот же результат.
Вот именно этот код:
Дает указанный результат:
Показан момент подключения ключа, и далее до безконечности пока ключ удерживается.
Менял и полностью убирал Делай, скорость порта пробовал ставить 9600.
Все одинаково.
Все так и должно быть, имхо.
Вы читали описание функции search() ? При каждом вызове она читает из шины адрес следующего девайса, а когда девайсов больше нет - выдает нулевое значение.
У вас при приложенном ключе на шине один девайс. Функция search() при первом вызове выдает его адрес, при втором - выдает ноль, так как девайсы кончились, при третьем - снова адрес ключа и тд. Вот и выходит "через раз".
Все так и должно быть, имхо.
.......
У вас при приложенном ключе на шине один девайс. Функция search() при первом вызове выдает его адрес, при втором - выдает ноль, так как девайсы кончились, при третьем - снова адрес ключа и тд. Вот и выходит "через раз".
А разве reset() это дело не сбрасывает?
b707!
Спасибо за наводку. В примерах работы с iButton используют .reset(), а надо бы .reset_search();
Проблема решена! Всем спасибо!
Правильное решение: