Comments (12)
В загруженной программе энкодер нужно сажать на прерывания. По поводу настроек - они не для этого, все написано в документации
from encbutton.
Библиотеки - не зло, зло - куча голого кода в программе. Работу с одним компонентом нужно оборачивать хотя бы в структуру и выносить в отдельный файл, иначе будет не программа а помойка
from encbutton.
Ну, это уже маразм и поможет только шапочка из фольги)) если один и тот же код внутри класса и вне класса работает по разному - винить нужно свои кривые руки)
from encbutton.
по далласу
мысли о некорректной работе родной библиотеки с китайскими датчиками
Всё с точностью до наоборот - это китайские датчики не работают с родной библиотекой, потому что родная библиотека написана по таймингам, которые указаны в даташите. У китайских 99% эти тайминги начинают плавать при повышении температуры. Значит в библиотеке можно подстроить тайминги под китайские подвальные чипы, вместо того чтобы писать "родная библиотека - зло". Детский сад
Пришлось чистый код писать и тогда заработало.
А в библиотеке код какой? Грязный что ли?) Это ведь просто смешно..
from encbutton.
В этой - нет, тайминги живут в OneWire, на базе которой работает DallasTemperature
from encbutton.
Программа написана некорректно. Несколько советов, код внимательно не изучал (по последнему пункту):
- Выводить данные на экран нужно либо по таймеру, либо по факту изменения данных, которые на него выводятся
- Даллас нужно опрашивать не чаще 1 раза в секунду (точнее 750мс на максимальном разрешении)
- В загруженной программе энкодер сажается на прерывания, примеры есть в библиотеке
- Изучить этот урок и остальные из раздела https://alexgyver.ru/lessons/how-to-sketch/
- Использовать автоформатирование кода (Ctrl+T в Arduino IDE), приложенный код - абсолютно нечитаемое полотно
from encbutton.
Библиотеки - не зло, зло - куча голого кода в программе. Работу с одним компонентом нужно оборачивать хотя бы в структуру и выносить в отдельный файл, иначе будет не программа а помойка
По возможности весь код в структурах(функциях).
На днях не смог партию DS18B20 запустить нормально от родной далласовской библиотеки!
При температуре выше 52 градусов библиотека обрабатывала цифровой сигнал не корректно, и выдавала -127.
Причем "переломная" точка очень странная 52 градуса, что и навело на мысли о некорректной работе родной библиотеки с китайскими датчиками.
Пришлось чистый код писать и тогда заработало.
Да и раньше, когда веб-программированием был занят, тоже вечно одна библиотека на js конфликтует с другой, и некоторые проблемы нерешаемы, пока не напишешь свой "чистый" код обработчика.
P.S. Датчики конечно не оригинал, фейковые.
https://pikabu.ru/story/drop_temperaturyi_datchikov_ds18b20_9260431
from encbutton.
по далласу
мысли о некорректной работе родной библиотеки с китайскими датчиками
Всё с точностью до наоборот - это китайские датчики не работают с родной библиотекой, потому что родная библиотека написана по таймингам, которые указаны в даташите. У китайских 99% эти тайминги начинают плавать при повышении температуры. Значит в библиотеке можно подстроить тайминги под китайские подвальные чипы, вместо того чтобы писать "родная библиотека - зло". Детский сад
Мы все учились понемногу, / Чему-нибудь и как-нибудь!
from encbutton.
У китайских 99% эти тайминги начинают плавать при повышении температуры. Значит в библиотеке можно подстроить тайминги под китайские подвальные чипы, вместо того чтобы писать "родная библиотека - зло".
Как вы знаете, у библиотеки далласа два файла - DallasTemperature.h и DallasTemperature.cpp
В первом файле DallasTemperature.h есть определение кодов ошибок:
// Error Codes
#define DEVICE_DISCONNECTED_C -127
Во втором файле DallasTemperature.cpp
Вот что пишут в комментариях, в каких случаях мы получим -127:
// returns temperature in degrees C or DEVICE_DISCONNECTED_C if the
// device's scratch pad cannot be read successfully.
// the numeric value of DEVICE_DISCONNECTED_C is defined in
// DallasTemperature.h. It is a large negative number outside the
// operating range of the device
- DEVICE_DISCONNECTED_C -127 будет если неправильно задан адрес датчика - этот случай исключаем, т.к. датчик один и адрес задан конкретно
- DEVICE_DISCONNECTED_C - 127 будет если сработает аларм по высокой +125 или по низкой -55 температурам - это тоже маловероятно, т.к. датчик показывает комнатную Т=25 и после нагрева доходит до 52 и выдает дисконнект -127.
- DEVICE_DISCONNECTED_C -127 будет если происходит неверная конвертация из "сырой" цифры в цельсий:
// convert from raw to Celsius
float DallasTemperature::rawToCelsius(int16_t raw) {
if (raw <= DEVICE_DISCONNECTED_RAW)
return DEVICE_DISCONNECTED_C;
// C = RAW/128
return (float) raw * 0.0078125f;
}
Мне кажется здесь что то зарыто, но какие здесь тайминги и вообще, можно ли их в этой библиотеке корректировать - вопрос!
from encbutton.
В общем, не знаю что делать, энкодер будто заторможенный, когда в коде идет обработка данных с сенсоров.
https://pastebin.com/3mDjy95Y
Как добавить прерывания, или может быть в коде в секции loop setup как то не так последовательность выполнения кода выстроена?
Подскажите пожалуйста советом, чувствую программист с меня пока не ахти.
Проект встал из за "вялой" работы энкодера, в остальном все ОК - и данные с датчиков, и работа с расширителем портов PCF8575 и связь с mqtt.
Меню можно конечно пользоваться, но оооочень надо приноровиться к энкодеру - вращать как бы "на кончиках" пальцев - чувствуя момент перехода от одного тика к другому)))
Если вращать чуть медленнее или быстрее то не будет срабатывания.
Получается энкодер, вернее библиотека, начинает опрашивать положения контактов А и В и ему мешает другой процесс, и энкодер как бы ожидает, пока данные с тех же датчиков "опросятся" и потом продолжает ДОопрашивать энкодер.
Вообще не понимаю, почему так стал работать...
from encbutton.
Программа написана некорректно. Несколько советов, код внимательно не изучал (по последнему пункту):
- Даллас опрашиваю как советуете, раз в 750 мс, разрешение 12.
- Код отформатировал, но он не особо изменился, я все же сам делаю отступы и функции не мешаю с переменными и циклами.
- Как это выводить данные на экран по таймеру, millis() - который?
Я использую его для включения и отключения подсветки при вращении или нажатии на энкодер, выставил чтобы подсветка загоралась на 4 секунды - раньше использовал delay(4000), но по вашему совету заменил на миллис.
- В загруженной программе энкодер сажается на прерывания, примеры есть в библиотеке
tickISR - это пример прерываний?
// желательно подключить оба пина энкодера на внешние прерывания по CHANGE
// можно использовать PCINT https://github.com/NicoHood/PinChangeInterrupt
attachInterrupt(0, isr, CHANGE); // D2
attachInterrupt(1, isr, CHANGE); // D3
Пины подключения энкодера A и B ножен к ардуине - 0 и 1 или D2 и D3?
Или в принципе любые?
У меня энкодер подключен так:
const int ENC_A = 14; //D5
const int ENC_B = 12; //D6
const int ENC_KEY = 13; //D7
Может это повлиять на задержку или использование прерываний?
Я не могу понять, у меня энкодер все же работает, но будто заторможен.
В загруженном или быдлокоде именно такое проявление или он вообще не должен работать, тогда используют энкодер через прерывания?
from encbutton.
Код отформатировал, но он не особо изменился
Зато его легче воспринимать тому, кто привык работать с форматированным кодом
Как это выводить данные на экран по таймеру, millis() - который?
Да. В текущем случае - и по таймеру (для термометра), и по факту изменения (по щелчку энкодера)
Пины подключения энкодера A и B ножен к ардуине - 0 и 1 или D2 и D3? Или в принципе любые?
Так в вашем же сообщении выше это всё написано + есть ссылка на библиотеку....
В загруженном или быдлокоде именно такое проявление
По разному может быть
from encbutton.
Related Issues (20)
- Не работает на Arduino Nano 33 BLE HOT 36
- Опрос кнопок в момент перезагрузки устройства HOT 5
- Проект на wokwi с кнопками EncButton HOT 61
- Todo? HOT 8
- Migration from V2 to V3: tick() returns unreliable status HOT 5
- the 'eb.clear()' does not really set the encoder counter to 0 HOT 1
- Unusual step counting by rotary encoder HOT 5
- Многократное срабатывание виртуальной кнопки при однократном нажатии кнопки HOT 3
- fast() всегда false
- Ke-040 и 74hc165 HOT 9
- Совместимость с ESP8266 (Wemos D1 Mini) HOT 4
- Передать аргументы в событие. HOT 9
- 3.5.1 Won't compile HOT 1
- Описка в README HOT 1
- Внутрення подтяжка пинов INPUT_PULLUP HOT 13
- Невозможно использовать библиотеку после обновления до 3.5.9 HOT 2
- Иногда нет обработки вращения энкодера HOT 1
- Добавить возможность игнорирования событий до спуска кнопки HOT 14
- Ер
- Не подклюается библиотека EncButton HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from encbutton.