Code Monkey home page Code Monkey logo

Comments (12)

GyverLibs avatar GyverLibs commented on August 17, 2024 1

В загруженной программе энкодер нужно сажать на прерывания. По поводу настроек - они не для этого, все написано в документации

from encbutton.

GyverLibs avatar GyverLibs commented on August 17, 2024 1

Библиотеки - не зло, зло - куча голого кода в программе. Работу с одним компонентом нужно оборачивать хотя бы в структуру и выносить в отдельный файл, иначе будет не программа а помойка

from encbutton.

GyverLibs avatar GyverLibs commented on August 17, 2024 1

Ну, это уже маразм и поможет только шапочка из фольги)) если один и тот же код внутри класса и вне класса работает по разному - винить нужно свои кривые руки)

from encbutton.

GyverLibs avatar GyverLibs commented on August 17, 2024 1

по далласу

мысли о некорректной работе родной библиотеки с китайскими датчиками

Всё с точностью до наоборот - это китайские датчики не работают с родной библиотекой, потому что родная библиотека написана по таймингам, которые указаны в даташите. У китайских 99% эти тайминги начинают плавать при повышении температуры. Значит в библиотеке можно подстроить тайминги под китайские подвальные чипы, вместо того чтобы писать "родная библиотека - зло". Детский сад

Пришлось чистый код писать и тогда заработало.

А в библиотеке код какой? Грязный что ли?) Это ведь просто смешно..

from encbutton.

GyverLibs avatar GyverLibs commented on August 17, 2024 1

В этой - нет, тайминги живут в OneWire, на базе которой работает DallasTemperature

from encbutton.

GyverLibs avatar GyverLibs commented on August 17, 2024 1

Программа написана некорректно. Несколько советов, код внимательно не изучал (по последнему пункту):

  • Выводить данные на экран нужно либо по таймеру, либо по факту изменения данных, которые на него выводятся
  • Даллас нужно опрашивать не чаще 1 раза в секунду (точнее 750мс на максимальном разрешении)
  • В загруженной программе энкодер сажается на прерывания, примеры есть в библиотеке
  • Изучить этот урок и остальные из раздела https://alexgyver.ru/lessons/how-to-sketch/
  • Использовать автоформатирование кода (Ctrl+T в Arduino IDE), приложенный код - абсолютно нечитаемое полотно

from encbutton.

brightproject avatar brightproject commented on August 17, 2024

Библиотеки - не зло, зло - куча голого кода в программе. Работу с одним компонентом нужно оборачивать хотя бы в структуру и выносить в отдельный файл, иначе будет не программа а помойка

По возможности весь код в структурах(функциях).
На днях не смог партию DS18B20 запустить нормально от родной далласовской библиотеки!
При температуре выше 52 градусов библиотека обрабатывала цифровой сигнал не корректно, и выдавала -127.
Причем "переломная" точка очень странная 52 градуса, что и навело на мысли о некорректной работе родной библиотеки с китайскими датчиками.
Пришлось чистый код писать и тогда заработало.
Да и раньше, когда веб-программированием был занят, тоже вечно одна библиотека на js конфликтует с другой, и некоторые проблемы нерешаемы, пока не напишешь свой "чистый" код обработчика.
P.S. Датчики конечно не оригинал, фейковые.
https://pikabu.ru/story/drop_temperaturyi_datchikov_ds18b20_9260431

from encbutton.

brightproject avatar brightproject commented on August 17, 2024

по далласу

мысли о некорректной работе родной библиотеки с китайскими датчиками

Всё с точностью до наоборот - это китайские датчики не работают с родной библиотекой, потому что родная библиотека написана по таймингам, которые указаны в даташите. У китайских 99% эти тайминги начинают плавать при повышении температуры. Значит в библиотеке можно подстроить тайминги под китайские подвальные чипы, вместо того чтобы писать "родная библиотека - зло". Детский сад

Мы все учились понемногу, / Чему-нибудь и как-нибудь!

from encbutton.

brightproject avatar brightproject commented on August 17, 2024

У китайских 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
  1. DEVICE_DISCONNECTED_C -127 будет если неправильно задан адрес датчика - этот случай исключаем, т.к. датчик один и адрес задан конкретно
  2. DEVICE_DISCONNECTED_C - 127 будет если сработает аларм по высокой +125 или по низкой -55 температурам - это тоже маловероятно, т.к. датчик показывает комнатную Т=25 и после нагрева доходит до 52 и выдает дисконнект -127.
  3. 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.

brightproject avatar brightproject commented on August 17, 2024

В общем, не знаю что делать, энкодер будто заторможенный, когда в коде идет обработка данных с сенсоров.
https://pastebin.com/3mDjy95Y
Как добавить прерывания, или может быть в коде в секции loop setup как то не так последовательность выполнения кода выстроена?
Подскажите пожалуйста советом, чувствую программист с меня пока не ахти.
Проект встал из за "вялой" работы энкодера, в остальном все ОК - и данные с датчиков, и работа с расширителем портов PCF8575 и связь с mqtt.
Меню можно конечно пользоваться, но оооочень надо приноровиться к энкодеру - вращать как бы "на кончиках" пальцев - чувствуя момент перехода от одного тика к другому)))
Если вращать чуть медленнее или быстрее то не будет срабатывания.
Получается энкодер, вернее библиотека, начинает опрашивать положения контактов А и В и ему мешает другой процесс, и энкодер как бы ожидает, пока данные с тех же датчиков "опросятся" и потом продолжает ДОопрашивать энкодер.
Вообще не понимаю, почему так стал работать...

from encbutton.

brightproject avatar brightproject commented on August 17, 2024

Программа написана некорректно. Несколько советов, код внимательно не изучал (по последнему пункту):

  1. Даллас опрашиваю как советуете, раз в 750 мс, разрешение 12.
  2. Код отформатировал, но он не особо изменился, я все же сам делаю отступы и функции не мешаю с переменными и циклами.
  3. Как это выводить данные на экран по таймеру, 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.

GyverLibs avatar GyverLibs commented on August 17, 2024

Код отформатировал, но он не особо изменился

Зато его легче воспринимать тому, кто привык работать с форматированным кодом

Как это выводить данные на экран по таймеру, millis() - который?

Да. В текущем случае - и по таймеру (для термометра), и по факту изменения (по щелчку энкодера)

Пины подключения энкодера A и B ножен к ардуине - 0 и 1 или D2 и D3? Или в принципе любые?

Так в вашем же сообщении выше это всё написано + есть ссылка на библиотеку....

В загруженном или быдлокоде именно такое проявление

По разному может быть

from encbutton.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.