Этюды для начинающих: мрамор и штукатурка эффективности

Клапауций 123
Offline
Зарегистрирован: 06.12.2015

Piskunov пишет:

Ok.

Я оказался неправильно понят, уточняю. Речь не идёт о чипах производства Atmel. Речь идёт об Arduino.

В комплексе, так сказать, с средой разработки и схемными решениями.

а, в чём проблема со схемными решениями и средой разработки?

bwn
Онлайн
Зарегистрирован: 25.08.2014

Piskunov пишет:

Ok.

Я оказался неправильно понят, уточняю. Речь не идёт о чипах производства Atmel. Речь идёт об Arduino.

В комплексе, так сказать, с средой разработки и схемными решениями.

Ну бутерброд из шилдов скрученных изолентой, это наверно после ядреной травы может придуматься, а вот от среды разработки конечная работоспособность девайса думаю не зависит.

Клапауций 321
Offline
Зарегистрирован: 17.12.2015

SU-27-16 пишет:

а каждый Программист мог бы спасти одного и более ДУМАЮЩЕГО начинающего......

от чего спасти?

Beginner100500
Offline
Зарегистрирован: 24.07.2015

Извините, что не сослался на автора SMS-ки. Как пришло, так и отписал. Arhat-109-2 похоже вчера приболел и не сможет отвечать вам какое-то время.

Piskunov
Offline
Зарегистрирован: 13.02.2014

Клапауций 123 пишет:

а, в чём проблема со схемными решениями и средой разработки?

И этот вопрос звучит от автора ТИТАНОВОГО ВЕЛОСИПЕДА???

Извините, без комментариев ))

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Piskunov пишет:
 неужели найдётся такой чудак, который в серьёзном промышленном проекте (я имею в виду цену ошибки) будет использовать Arduino? По моему личному мнению - ничего сложнее стиральной машинки на ней делать нельзя.

http://geektimes.ru/post/258540/

bwn
Онлайн
Зарегистрирован: 25.08.2014

Piskunov, просто объясните, чем среда разработки влияет на конечную работоспособность? Первые программы писали на рулоне туалетной бумаги, а после дыроколом прошивали и ведь работали)))).

Клапауций 321
Offline
Зарегистрирован: 17.12.2015

Piskunov пишет:

И этот вопрос звучит от автора ТИТАНОВОГО ВЕЛОСИПЕДА???

Извините, без комментариев ))

э! не нужно мне тут славой вечно полупьяного ящиками Оболони радиомонтажника Клапауций 999 упрекать, который от скуки допился до класс титановый велосипед для тактовой кнопки.

я - Клапауций 321, в данный момент трезв и конкретен в желании получить комментарии на вопрос Клапауций 123: какие претензии к схемотехническим решениям плат дуино и Дуино ИДЕ у разработчиков серьёзных промышленных проектов?

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

bwn, а разве не влияет? 

Возьмем нижний уровень: notepad из Windows - писать код можно? Можно. Но не слишком удобно.
Возьмем notepad++: писать код уже получается быстрее, т.к. есть подсветка синтаксиса, т.е. оптимизация времени ошибок.
Возьмем Arduino IDE: писать получается еще быстрее, хоть по сути тот же notepad, но есть владки, подсветка и верификация компилятора.
Возьмем AVRstudio: добавляется еще куча плюшек по кодингу. Но чтобы понять их преимущество, надо некторое время посидеть на предыдущих вариантах.
Возьмем Proteus: добавляется моделирование схем, еще удобнее.

Для профи может быть и нет большой разницы, руки уже на автомате работают, а для новичка разница ощутима.

Клапауций 321
Offline
Зарегистрирован: 17.12.2015

Tomasina пишет:

bwn, а разве не влияет? 

Возьмем нижний уровень: notepad из Windows - писать код можно? Можно. Но не слишком удобно.
Возьмем notepad++: писать код уже получается быстрее, т.к. есть подсветка синтаксиса, т.е. оптимизация времени ошибок.
Возьмем Arduino IDE: писать получается еще быстрее, хоть по сути тот же notepad, но есть владки, подсветка и верификация компилятора.
Возьмем AVRstudio: добавляется еще куча плюшек по кодингу. Но чтобы понять их преимущество, надо некторое время посидеть на предыдущих вариантах.
Возьмем Proteus: добавляется моделирование схем, еще удобнее.

Для профи может быть и нет большой разницы, руки уже на автомате работают, а для новичка разница ощутима.

это ты о комфорте, а не о принципиальных ограничениях.

bwn
Онлайн
Зарегистрирован: 25.08.2014

Tomasina, вопрос стоял о конечной работоспособности устройства, а не удобстве разработки. Ведь программе то без разницы, в каком редакторе ее написали и отладили.)))))

Piskunov
Offline
Зарегистрирован: 13.02.2014

bwn пишет:

Tomasina, вопрос стоял о конечной работоспособности устройства, а не удобстве разработки. Ведь программе то без разницы, в каком редакторе ее написали и отладили.)))))

Как бы да, но сюда бы ещё добавить "в разумные сроки".

Piskunov
Offline
Зарегистрирован: 13.02.2014

Tomasina пишет:

Piskunov пишет:
 неужели найдётся такой чудак, который в серьёзном промышленном проекте (я имею в виду цену ошибки) будет использовать Arduino? По моему личному мнению - ничего сложнее стиральной машинки на ней делать нельзя.

http://geektimes.ru/post/258540/

Точняк. ))

Особенно мне понравилась первая фраза. Цитирую:

"Если вы разбираетесь в электронике, то некоторые технические решения, описанные в этой статье повергнут вас в шок и ужас, а также вызовут непреодолимое желание оторвать автору руки."

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

К вопросу оптимизации кода:

есть часть кода где кнопками задается значение, 1 кнопка плюсует, 2 кнопка вычитает. После каждого нажатия идет проверка, не привысило ли число максимально или минимально допустимого. я сначала не знал про функцию constrain() и писал так:

if (b_1.click_down)
{ 
x+=1;
if (x>xmax)x=xmax;
}
if (b_2.click_down)
{
x-=1;
if (x<xmin)x=xmin;
}

но потом узнал про constrain() и стал писать

if (b_1.click_down)
{x+=1;
constrain(x,xmin,xmax);
}
if(b_2.click_down)
{x-=1;
constrain(x,xmin,xmax)
}

Так получается в первом случае код оптимальнее, так как идет одно сравнение вместо 2-х во втором случае, так?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Mr.Privet пишет:

Так получается в первом случае код оптимальнее, так как идет одно сравнение вместо 2-х во втором случае, так?

Mr.Privet, самое главное и самое важное, что должен вынести любой начинающий из этого топика, это не срач и фаллометрию в которую он выродился, а подход к "добыче знаний" из первого поста.

Вот сейчас, Вам нужно сделать следующее:

1. Написал скетчик по образу и подобию скетчиков из первого поста

2. Запустил оба свои варианта. чтобы выполнились по 10 тыс. раз.

3. Сравнил время.

4. Гордо написал сюда новую, собственноручно добытую, информацию (вместо того, чтобы спрашивать как ребёнок у больших дядек).

Понимаете о чём я?

Клапауций 321
Offline
Зарегистрирован: 17.12.2015

Piskunov пишет:

Точняк. ))

ты не дохлых котят по инетам собирай, а расскажи #161 чем отличается стиральная машина от коллайдера?

Piskunov
Offline
Зарегистрирован: 13.02.2014

Клапауций 321 пишет:

ты не дохлых котят по инетам собирай, а расскажи #161 чем отличается стиральная машина от коллайдера?

Ты глазки-то разуй, и  #151 прочти. Я - новичок...

bwn
Онлайн
Зарегистрирован: 25.08.2014

Piskunov, если новичек, то наверняка читали "Что такое Ардуино".

Цитирую: "Arduino – это инструмент для проектирования электронных устройств (электронный конструктор) более плотно взаимодействующих с окружающей физической средой, чем стандартные персональные компьютеры, которые фактически не выходят за рамки виртуальности."

Заметьте, ни слова о создании на его основе готовых устройств.

Клапауций 321
Offline
Зарегистрирован: 17.12.2015

Piskunov пишет:

Ты глазки-то разуй, и  #151 прочти. Я - новичок...

блин. в каком же вас инкубаторе делают? - каждый десятый дятел: страсте - я новичок-дурачок.

Piskunov
Offline
Зарегистрирован: 13.02.2014

bwn пишет:

Piskunov, если новичек, то наверняка читали "Что такое Ардуино".

Цитирую: "Arduino – это инструмент для проектирования электронных устройств (электронный конструктор) более плотно взаимодействующих с окружающей физической средой, чем стандартные персональные компьютеры, которые фактически не выходят за рамки виртуальности."

Заметьте, ни слова о создании на его основе готовых устройств.

Да, читал.

И полностью с Вами согласен, это конструктор. Наверное самый интересный из тех, которые у меня были ))

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

Piskunov
Offline
Зарегистрирован: 13.02.2014

Клапауций 321 пишет:

блин. в каком же вас инкубаторе делают? - каждый десятый дятел: страсте - я новичок-дурачок.

Собственно из тех же ворот, что и весь народ.

А дурачкам проще живётся. Ты ведь тоже в этом убедился?

arduinec
Offline
Зарегистрирован: 01.09.2015

Piskunov пишет:

Я оказался неправильно понят, уточняю. Речь не идёт о чипах производства Atmel. Речь идёт об Arduino.

Arduino кроме чипа Atmel содержит USB-интерфейс и преобразователь напряжения.

Вариант Arduino только на одном чипе Atmega 328:
http://www.youtube.com/watch?v=joSc-AT8o5k
http://www.youtube.com/watch?v=W4LPlKKb__8
http://www.youtube.com/watch?v=VIf1WJrF8Hc
http://www.youtube.com/watch?v=wuEzIKybvXw
http://www.youtube.com/watch?v=HJH6j9JJkSM

 

Клапауций 321
Offline
Зарегистрирован: 17.12.2015

Piskunov пишет:

А дурачкам проще живётся. Ты ведь тоже в этом убедился?

я в этом убеждаюсь ежедневно - дурачки дохнут в расцвете сил.

Logik
Offline
Зарегистрирован: 05.08.2014

Этюды для начинающего штукатура выходят на новый уровень обсуждения - "Самдурак".

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Logik пишет:

Этюды для начинающего штукатура выходят на новый уровень обсуждения - "Самдурак".

"Никогда такого не было, и вот опять :("

Seva1800
Offline
Зарегистрирован: 18.12.2015

Все прочитал. Вынес некоторые полезные вещи для. Собственно, Господа, а из-за чего весь сыр бор? Понятно же оптимизации можно проводить разными путями при решении определенной задачи и имея определенное железо. Не влезаем с определенным инструментом в определенное железо, можно попробовать другой инструмент. Не хватает скорости опять пробуем разные подходы. Если все работает и с нужной скоростью, безглючностью и надежностью - всё проект закрыт, все радуются и никто не ломает голову над оптимизацией. Есть свободное время взял и уменьшил допустим код на 30 процентов. Похвалил себя и остался доволен. Потренеровал что называется голову, чтоб содержимое не усохло. Короче тут все правы.

Господа, я собственно чего приходил. Поскольку я начинающий то хотел бы испросить совета по оптимизации алгоритма. Правда это как раз из серии "чтобы содержимое головы не усохло".

Пишу код для ардуино. Есть десять неких датчиков с аналоговым выходом. К устройству может быть подключен только 1 датчик, но оно должно уметь работать со всеми типами датчиков из этого десятка. Формула обсчета для каждого датчика индивидуальна для получения результата. Т.е. снимается выходное напряжение и обсчитывается по уникальной формуле для каждого типа датчика. Самое главное, нет горячего подключния или замены датчиков. Т.е. на этапе выполения setup точно становится известно какой датчик подключен к контроллеру. Естественно напиана вызываемая процедура в которую в качестве аргументов передаются напряжение и тип датчика. Она же выдает конечный результат. Понятно, что процедура содержит описания для всех поддерживаемых датчиков. Короче каждый раз когда вызывается эта функция она каждый раз проходится (в худшем случае) по всем десяти выриантам, выбирая нужную формулу по типу датчика.

Отсюда вопрос. Т.к. известно что во время работы тип датчика уже не изменится, то может быть можно как-то по другому написать процедуру, чтобы процессор каждый раз не делал кучу бесполезных сравнений - если тип 1 делаем то, если тип 2 делает то и тд.

Если есть идеи буду рад впитать.

bwn
Онлайн
Зарегистрирован: 25.08.2014

На этапе сетапа присвоить номер признака датчика и отталкиваться от него.

Пардон, у вас вроде это и сделано.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Seva1800 пишет:
Отсюда вопрос. Т.к. известно что во время работы тип датчика уже не изменится, то может быть можно как-то по другому написать процедуру, чтобы процессор каждый раз не делал кучу бесполезных сравнений - если тип 1 делаем то, если тип 2 делает то и тд. Если есть идеи буду рад впитать.

Правильный вопрос содержит ответ. Там где можно (это известно только Вам) определяем тип датчика (записываем в переменную), а далее как у Вас и написано "если тип 1 делаем то, если тип 2 делает то и тд.", т.е. анализируем состояние переменной и выполняем нужный расчет. Это может быть в setup, а может быть и в loop. В любом случае, пока неизвестен тип, ничего не делаем (точнее определяем этот тип).

 

Logik
Offline
Зарегистрирован: 05.08.2014

kisoft пишет:

 т.е. анализируем состояние переменной и выполняем нужный расчет. 

Так у него так и сделано. 

Оптимизируем так: пишем для каждого датчика свою, отдельную функцию расчета, но с одинаковым интерфейсом, обявляем переменную - указатель на функцию, в сетапе эту переменную инициализируем указателем на одну из функций расчета, вызов делаем через эту переменную.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Logik пишет:

kisoft пишет:

 т.е. анализируем состояние переменной и выполняем нужный расчет. 

Так у него так и сделано. 

???. Цитирую автора "Короче каждый раз когда вызывается эта функция она каждый раз проходится (в худшем случае) по всем десяти выриантам, выбирая нужную формулу по типу датчика.". Вообще задача расписана так, что можно понять как угодно. Это нужно в отдельной теме разбираться и формулировать задачу более корректно с выкладыванием скетча. А так - пустой треп.

 
Logik
Offline
Зарегистрирован: 05.08.2014

 

kisoft пишет:

 т.е. анализируем состояние переменной и выполняем нужный расчет. 

Я отталкивался от:

"Т.е. на этапе выполения setup точно становится известно какой датчик подключен к контроллеру. Естественно напиана вызываемая процедура в которую в качестве аргументов передаются напряжение и тип датчика."

А в функции уже варианты реализации.

Допишу сообщение о подходах.

  Можна сделать так же через классы. Базовый с виртуальной функцией расчета и наследники для каждого датчика свой класс. В сетапе динамически создаем обект класса, соответствующего датчику и присваиваем указатель на него переменной типа базового класса. Вызываем через эту переменную. Этот фокус - сама суть ООП.

В Вашей ситуации я бы не трогал код. Работает - не трогай! Выиграш небольшой. Если сильно чешится - первый подход лучше. Если писать заново код, я бы именно так и писал.

Давным-давно Ваш подход считали типичным для новичков, первый подход - признак профи. Потом появился второй подход, с ООП, и все смешалось ))

Seva1800
Offline
Зарегистрирован: 18.12.2015

Спасибо. В общем-то я так и думал. Однако, действительно вопрос в том насколько такой подход будет эффективным, например в плане скорости. Что-то сдается мне, что контроллер выполнит 9 "лишних" сравнений if ооочень быстро.

bwn
Онлайн
Зарегистрирован: 25.08.2014

Seva1800 пишет:
Спасибо. В общем-то я так и думал. Однако, действительно вопрос в том насколько такой подход будет эффективным, например в плане скорости. Что-то сдается мне, что контроллер выполнит 9 "лишних" сравнений if ооочень быстро.

В 99% проектов, думаю даже не заметите этих ифов.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Seva1800 пишет:
Спасибо. В общем-то я так и думал. Однако, действительно вопрос в том насколько такой подход будет эффективным, например в плане скорости. Что-то сдается мне, что контроллер выполнит 9 "лишних" сравнений if ооочень быстро.

Ну, этих IF'ов, как Вам тут совершенно правильно сказали, Вы и не заметите.

Но если хочется поэстетствовать, можно и поэстетствовать. Типы датчиков занумеруйте от 0 до 9 (если их 10), заведите массив указателей на функции (например pF[10]) так, чтобы  pF[0] - указывал на обработчик для нулевого датчика, pF[1] - для первого и т.д. Как только Вы определили номер датчика (допустим. sensorIndex), тут же просто вызываетя pF[sensorIndex](<параметры>). А если она вызывается часто, так можно и индекс каждый раз не вычислять, заведите такой же указатель pFM и присвойте ему pFM = pF[sensorIndex]. А впредь используйте pFM(<параметры>)

Но я бы делал совсем не так. Так как я предлагаю - по эффективности хуже, чем у Вас, но по коду красивее и яснее. Потеря эффективности опять же - не особо заметите.

Я бы сделал общий класс. содержащий ВСЮ общую, независящую от типа датчика работу. А от него пронаследовал бы 10 классов, которые содержат только один метод - завиящую от датчика обработку. Затем, определив тип датчика, просто создавал бы переменную нужного класса и вся обработка была бы везде одинаковой и прозрачной.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Seva1800 пишет:
Все прочитал. Вынес некоторые полезные вещи для. ... Поскольку я начинающий то хотел бы испросить совета по оптимизации алгоритма. ... Есть десять неких датчиков с аналоговым выходом. К устройству может быть подключен только 1 датчик, но оно должно уметь работать со всеми типами датчиков из этого десятка. Формула обсчета для каждого [типа] датчика индивидуальна для получения результата. Т.е. снимается выходное напряжение и обсчитывается по уникальной формуле для каждого типа датчика. Самое главное, нет горячего подключния или замены датчиков. Т.е. на этапе выполения setup точно становится известно какой датчик подключен к контроллеру ... Если есть идеи буду рад впитать.

Выделил главное из вашего текста. Так вот, "на этапе setup()" означает, что вы сделали либу, которая способна обслуживать несколько типов железок, и какая конкретно подключается - определяется юзвером вашей либы. Что втыкнул - то и должно скомпиляться. Вас беспокоит влезание в скетч всех остальных алгоритмов обработки датчиков, в ситуации когда они заведомо не требуются.

Решение: вынести выбор алгоритма на этап ДО компиляции скетча.

Вариант 1 (традиционное С): требуете перед использованием вашей либы определить константу препроцессора #define тип_датчика_юзверя, и с помощью которой обрамляете код либы условной компиляцией #ifdef #elif #endif Для примера загляните в типовой io.h и его дочерние иклудящиеся файлы. Разница в том, что тип процессора там задан Ардуино ИДЕ "автоматически".

Как сделать, чтобы эта константа "сработала" в отдельном файле кода библиотеки? Тут - никак. Можно включить условно-компилирующийся код в заголовочный файл. Рояли не играет где его найдет компилятор при грамотной блокировке повторного включения - тоже типовые решения.

Вариант 2 ( С++ ): перелопачиваете свою либу в TEMPLATE, настраивающийся типом датчика и в коде либы делаете .. туже самую "условную компиляцию", но уже средставми языка С++ (см. реализация шаблонной функции/метода класса). Всё. Комплитор сам откомпиляет вашу функцию/метод строго согласно указанному типу при создании объекта в setup().

Оно? :)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Озвученные тут все предыдущие варианты - ХУЖЕ.

1. Все они тянут за собой ВЕСЬ код ВСЕХ обработок всех типов датчиков в КАЖДЫЙ скетч.

2. Вариант с указателями на функцию типа датчика - самый скоростной, но дополнительно (к моему) будет делать косвенный вызов вместо простого. потеря 1-2 десятков тактов и 10-20 байт кода на каждый вызов. Если их немного, то может и "пофиг";

3. Вариант с виртуальными функциями, дополнительно к 2, потянет за собой ещё и отображение виртуальных таблиц на память, как тут обсуждалось выше .. то есть это ещё и потеря памяти;

4. Вариант с созданием нескольких классов и динамического создания экземпляра нужного класса - может повлечь за собой косвенный доступ к многим функциям этого класса (его тип определен динамически) .. то есть, это может оказаться даже хуже варианта 1.

.. но пробуйте. Опыт - лучший критерий истины. Я ещё сильно не присматривался к особенностям компиляции С++ кодов.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Насколько я понял Seva1800, решение "ДО компиляции скетча" для него не вариант. Если это действительно так, то тянуть все коды всё равно придётся.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Если скетч прошит единожды, а юзверь способен выключить ардуинку, переткнуть датчик и попытаться запустить снова, то "на этапе setup()" может означать только:

Датчик подключается к другим пинам (или "зажата кнопка перед включением"), и в setup() можно опросить какой именно датчик теперь подключен к ТОМУ ЖЕ САМОМУ СКЕТЧУ.

Этого варианта нет в озвученном ТЗ, а сам по себе он достаточно неочевиден.

bwn
Онлайн
Зарегистрирован: 25.08.2014

Arhat109-2 пишет:

Если скетч прошит единожды, а юзверь способен выключить ардуинку, переткнуть датчик и попытаться запустить снова, то "на этапе setup()" может означать только:

Датчик подключается к другим пинам (или "зажата кнопка перед включением"), и в setup() можно опросить какой именно датчик теперь подключен к ТОМУ ЖЕ САМОМУ СКЕТЧУ.

Этого варианта нет в озвученном ТЗ, а сам по себе он достаточно неочевиден.

"Есть десять неких датчиков с аналоговым выходом. К устройству может быть подключен только 1 датчик, но оно должно уметь работать со всеми типами датчиков из этого десятка."

Seva1800
Offline
Зарегистрирован: 18.12.2015

Не. то что предложил Arhat109-2 если я правильно понимаю это условная компиляция.  Это хорошо когда контоллер должен в будущем работать только с одним типом датчика, а датчиков 10 типов. Тогда не надо делать черте сколько разных прошивок (при наличии естественно при заливке всех типов датчиков или их эмуляторов).

Не прокатит. Фишка в том, что устройство универсальное, способное работать со всеми типами датчиков. Но вход под датчик у устройства только один. Нет горячей замены. Т.е. когда крутится loop к устройству не подключат другой датчик, выдернув предыдущий.

Корче на одной установке данное устройство рабоет допустим с датчиком типа 4 а на рядом стоящей установке такое же устройство работает с  датчиком тип 8.

Если к одному и тому же устройству надо подключить другой датчик, то снимается питание с контроллера.

Сами датчики оборудованы идентификационными резисторами. Так собственно и определяется в SETUP тип датчика. И он уже не изменяется пока контроллер не выключат и допустим не подключат к нем другой тип датчика (контроллер перенесли на другую установку с другим типом датчиков).

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

А в лоб с If-ами вроде как-то сосет под ложечкой, но результат не ухудшает ни в скорости ни скорее всего в потребляемой памяти.

И еще, господа. Про использование глобальных и локальных переменных. ОЧЕНЬ важная тема и мне кажется подход можно формализовать. Если Вы как знающие програмисты задумаетесь на эту тему. Естественно применительно к конкретной платформе. Иначе формального подхода и рекомендаций не получится - в этом я уверен.

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

определение типа датчика
на разъём со стороны датчика повесить резистивный делитель , для каждого типа датчика - свой номинал
со стороны ардуины - на аналоговый пин и в сетапе определять что за датчик подключен
а коды для каждого типа ардуина должна знать

Seva1800
Offline
Зарегистрирован: 18.12.2015

С этим все ОК. датчики оснащены идентификационными резисторами

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

понятно.... Сами датчики оборудованы идентификационными резисторами. Так собственно и определяется в SETUP тип датчика.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Собственно меня просто интересовало можно ли в принципе уйти от множественной проверки
нельзя... или IF , или CASE

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

а зачем универсальное устройство ?
не проще ли при выходе устройства перед заменой на новое залить в него код ОДНОГО нужного датчика ?

Seva1800
Offline
Зарегистрирован: 18.12.2015

Вы совершенно правы. Нельзя, но только при определении самого типа датчика, тут без вариантов.

А вот выборку формулы обработки сигнала по известному типу датчика по ходу можно. Товарищи вот тут подсказали как для универсального так и для не универсального устройства.

Seva1800
Offline
Зарегистрирован: 18.12.2015

Вся фишка в том что устройство должно быть универсальным.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Seva1800 пишет:

Вся фишка в том что устройство должно быть универсальным.

полицейские ходят по двое почему ?
один умеет читать , второй - писАть...

Клапауций 321
Offline
Зарегистрирован: 17.12.2015

Seva1800 пишет:

Вся фишка в том что устройство должно быть универсальным.

устройство ещё не послало кредитора в пень и не объявило технический дефолт по его дурным претензиям? :D

Seva1800
Offline
Зарегистрирован: 18.12.2015

Ребята, Вы напрасно ржете. Таких задач как эта вагон и маленькая тележка. )))