Pull to refresh

Comments 58

Напомнило журнал «Радио» с печатными листингами программ.
Вот-вот. Страшно подумать, если бы это был нормальный код — эдак на пару десятков тысяч страниц…
Пара десятков тысяч страниц в arduino не влезет. Поэтому много закомментировано.
Если вам это не интересно, зачем надо было открывать?
Абдурины и на основе STM32 делают. Так что, очень даже влезет!
Не забываем про всякие ESP8266 и прочие, более навороченные девайсы с SPI и NAND памятью, куда полновесную операционку запихнуть можно…
Скоро абдуринщики для мигания светодиодом будут ПЛИСину брать с 64-битным микроконтроллером и парой гигабайт флеш-памяти… И все равно будут вместо использования аппаратных возможностей тупо дрыгать ногами, как это отчаянно делает автор!
хотя бы 7 человек в закладки статью добавили, значит уже не зря дрыгал.
к сожалению не знаком с вашими творениями. есть от них польза?
Мне и кому-то еще польза есть. Ссылка на гитхаб — в профиле.
Это верно… В Arduino стандартная либа замедляет всё в десятки раз:
Разок пришлось писать контроллер китайской светодиодной матрицы на Arduino pro mini (24x12 светодиодов. По сути — 3 отдельные панели светодиодов, R, G, B соответственно):
Если адресовать через DigitalWrite() — 8-10 FPS.
Если адресовать через SPI (Один цвет) — 30-50 FPS.
Переписал всё на регистры — 400+ FPS…

… Потом, интереса ради, повторил всё на STM32/HAL/3xSPI+DMA… Получил over9000 FPS…
А если на STM32 без кала сделать, то еще веселей будет!
Смотря для чего. Обычно неделя уходит на что-нибудь сложное и новое. А из сниппетов набрать — недолго.
Ну, а минусующие дегенераты … Что ж поделать? На быдлохабре чуть ли не 99% пользователей — быдло тупое, которое вообще ни публикаций, ни комментариев не оставляет, но любит поминусовать. Эффект толпы, однако.
погуглил, я так понимаю это купюроприемник… да берешь библиотеку от ардуино, меняешь платформозависимые функции открытия, чтения/записи и… Готово? хотя я бы взял что то типо роутера и стандартный sdk.
ссылку пожалста.
всё что попадается на эту тему либо через pulse, либо не то.
Ну, а минусующие дегенераты … Что ж поделать? На быдлохабре чуть ли не 99% пользователей — быдло тупое, которое вообще ни публикаций, ни комментариев не оставляет, но любит поминусовать. Эффект толпы, однако.

Где ваша шпага, сударь?
В очередной раз флудите в комментариях, переходя на оскорбления, а сами даже ни про что ни написали. Ни одной статьи!
Сдаётся мне сударь, вы пустозвон
Я и на бх писал, только под ником Eddy_Em. Там же в профиле указано, почему в этой гнилой дыре я больше никаких статей писать не буду. Всё в ЖЖ.
А разве HAL — не «Нижняя ступень»? Всмысле, там нет всяких проверок «На идиота», как в ардуине (Если обращаться напрямую к регистрам GPIOA/GPIOB/GPIOC и использовать аппаратный DMA)
Хал — это подобие ардуины от ST. Тоже рассчитано на дурака, поэтому содержит уйму лишних проверок, выливающихся в итоге в жуткий оверхед.
Если бы хал был сделан грамотно на С++ (шаблоны и все дела), оверхеда никакого бы не было. Но «индусы» грамотно не умеют. В итоге получилось опять Г вроде SPL.
А между тем, у ST есть отличные сниппеты для STM32F0. Для меня — загадка, почему, вместо того, чтобы выложить сниппеты под все серии, они стали клепать ненужное Г! Ещё и куб этот придумали, чтобы даже полный идиот мог код сгенерировать. Вот только в сгенерированном коде столько ошибок, что народ не перестает плакаться на форумах!
Ну, в принципе, чем больше идиотов вокруг, тем меньше конкуренция на рынке труда.

хотите статью из одной ссылки?

можно например описать, зачем код нужен, какие проблемы решает, иллюстрации добавить… ну или правда не писать статью тогда
Есть же ссылки на две статьи с описанием. Оказалось недостаточно. Просили код — выложил. Да, наверное, не всем это интересно и понятно. Рассчитано на профильных читателей.
листинг это не отдельная статья, тут правда надо более профильный инструмент юзать
UFO landed and left these words here
и кто бы увидел ссылку в старой статье? надеюсь кому надо оценят.
русским по белому написано сверху: исходный код.
зачем вы потратили своё время не понимаю.
UFO landed and left these words here

Можно было бы вставить код в одну из своих статей и призвать тех, кто хочет его увидеть

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

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

Понимаете, вас попросили поделиться кодом, а не создавать целую статью из кода. Код отдельно, метаданные отдельно. Хабр для статей, гитхаб, гитлаб, сорсфордж и иже с ними для кода. Даже если не пользуетесь гитом, достаточно было расшарить зип архив на гуглодиске и прикрепить ссылку к одной из статей. А так вы просто засоряете хабр тем, чего здесь быть не должно ( полный листинг кода)

Хоть бы один стоящий комментарий по теме. Может я тут всем известное колесо изобрёл?
Видимо в ленте со свежими новостями совсем туго, раз пришлось какой-то несчастный листинг открыть.
Название статьи не говорит о том, что там будет полотно исходного кода. Я ожидал увидеть статью с описанием работы, фото и прочими сопутствующими

Комментарии, рейтинг и карма просто орут — так делать не хорошо. А вы из себя стпоите Пикассо «я писатель я так вижу ». Прислушайтесь к своей аудитории, если действительно ради них выкладывали.

думаю моя аудитория это 23 человека, добавивших в закладки.
если даже 3 их них решат какие-то свои проблемы, уже кайф.
если бы писатель… как умею так танцую.
а то, что тут называется «кармой», на самом деле не заслуживает внимания.
Это народ еще в листинг не заглядывал. Вот лично мне сразу бросилось в глаза отсутствие нормального форматирования, уйма закомменченного кода и MAGICK NUMBERS. Жаль, капса побольше нет, потому что «магических чисел» в этом куске кода настолько много, что вообще непонятно, как с ним планируется работать в дальнейшем. Неужто вы вспомните, что такое 0x02, 0x03, 0x06, 0x30, 0x41, 0xB3? Ну или почему в alf[] именно эти значения? А вот это: SoftwareSerial mySerial(14, 15); // RX, TX?
(кстати, ЕМНИП, даже у самой глупой аврки, использующейся в абдурине, есть аппаратный UART; ну и зачем тратить ресурсы на софтовый ногодрыг?)

Честно говоря, страшно смотреть на «код» ардуинщиков. Он чем-то напоминает попытку вырезания гланд через задницу «врачом»-детсадовцем.
аппаратный UART есть да, только он один. а потребовалось два. так бывает.
не понял зачем помнить что такое 0x02, 0x03, 0x06, 0x30, 0x41, 0xB3?
есть описание протокола, там всё расписано.
закомменченный код в основном доп функции. например считывание карт RFID. или вывод всех типов ошибок.
форматирование да хромает. сорян
И что никаких предопределенных констант нету? Все эти числа в коде…
не знаю. подскажите где посмотреть, поменяю на константы.
я вобще не видел работающего алгоритма CCNET в открытом доступе.
раз люди обращаются, значит тоже у них проблема.
if(keydown && key<20) keydown=0;
if(key>300 && key<315 && !keydown) setRele(6); //ключ
if(key>330 && key<400 && !keydown) setRele(0);//стоп
if(!keydown && rele==0 && (EEPROM.read(10)>0 || EEPROM.read(11)>0))
{
if(key>920 && key<980) setRele(1);
if(key>810 && key<870) setRele(2);
if(key>720 && key<780) setRele(3);
if(key>600 && key<640) setRele(4);
if(key>420 && key<480) setRele(5);
}

20, 300, 315… 640, 420, 480 — что это? количество попугаев?
setRele(1), setRele(2), setRele(3) — какие то реле видимо.но за что отвечают?
Формат команды: SYNC ADR LNG CMD DATA CRC

SYNC: 1 byte код [02H]
ADR: 1 byte адрес купюроприёмника
LNG: 1 byte* длина данных
CMD: 1 byte команда
DATA 0 to 250 bytes Данные
CRC: 2 bytes контрольная сумма
Ну так обычно под задачу микроконтроллер выбирают, а не пытаются при помощи совочка пирамиду Хеопса соорудить!
У 30-рублевого STM32F030 есть 2 UART'а. Если взять МК за 60 рублей, то будет уже до четырех UART'ов. А за 150 рублей можно и еще больше получить… Не говоря уже о другой периферии, а также DMA.
есть статья на эту тему до моей первой публикации?
да наверное можно было перевыбрать контроллер, но было уже припаяно. и ещё куча проблем.
я на гуру тут не претендую. а в целом и рассчитывал на подобные комментарии. спасибо.
По существу.
1. Выпиливайте все закомментированные куски кода, когда выкладываете исходник для публикации.
2. Зачем делать инициализацию перемменых «char rOld=0;», а потом в setup переинициализировать «rOld=EEPROM.read(9);»?
3. Из АЦП читается мгновенное значение «int key = analogRead (5);» и по мгновенному значению «key» сразу переключаете реле. Поэтому понятно, почему Вы ранее в своей статье писали «для исключения дребезга реле, числа в условиях подбираются опытным путём». Пример одной из Ваших границ из кода, которую Вы подбирали,: «if(key>920 && key<980) setRele(1);». Что составляет ~6% от динамического диапазона АЦП. Аналогично по другим границам.
Поясню. У Вас в схеме, т.к. не видел и могу лишь только предполагать, что в Вашем девайсе есть компоненты с изменяемым потреблением, реле, светодиоды и прочее. А так же т.к. Вы используете Arduino Uno R3, то фильтрация по опорному напряжению для АЦП никакое. У вас скачет питание, работаете с мгновенными значениями. Вот Вы и получаете танцы с бубном при настройке. Так же будете шаманить, когда будете делать второй комплект оборудования.
Решение. Оптимально сделать свой контролер. Но можно и доработать Arduino Uno R3, поставить отдельный фильтр на питание АЦП VAref, а лучше отдельный линейный стабилизатор. Ввести программный фильтр на АЦП: либо усреднять, это проще для понимания, либо добавить хотябы КИХ фильтр первого порядка, например:
#define ALFA 16
float key_filt, key_filt1;
key_filt = key_filt1 + ( key_filt - key_filt1 ) / ALFA;
key_filt1 = key_filt;
key = (int)key_filt;

где ALFA – определяет полосу фильтра.
Закомментированы в основном рабочие куски кода с доп функциями. просто они перестали быть нужны, может кому-то понадобятся. например: if(z1==0x13) Serial.println(«INIT»); — это лог сообщений купюрника.
Кнопки работают через делитель напряжения на резисторах. На всех ящиках одинаковые резисторы. Подбирать только один раз надо. Особых проблем с этим не было.
Arduino давно поменяли на Orange Pi
Подбирать только один раз надо. Особых проблем с этим не было.

Пока не было
Вам правильно выше описали, что значения АЦП надо фильтровать или усреднять.
Для примера:
Вы считываете значение кнопки — а в этот момент дядя Вася в соседнем боксе варит самопальной сваркой. В ваш диапазон можете и не попасть, просто потому что значения будут прыгать из за наводок.
А завтра вам завезут другие резисторы с другой погрешностью — и может так случится что вы не попадете в диапазон.
А еще контакт кнопки может окислится — у вас же мойка и влажно — сопротивление уйдет и уплывут значения АЦП.

они в железном ящике. ок, учтём.
тут это совсем не важно. статья в основном про CCNet
в оранже кнопки по другому подключены
они в железном ящике. ок, учтём.
тут это совсем не важно.

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

На пальцах поясню. Наверняка используете резисторы 5%, как правило у них ткс в зависимости от типа 50-200ppm. Т.к. Ваше железо работает в ящике на улице, то летом может быть +50, а зимой -20, т.е. общая дельта ~70град. Т.е. изменение сопротивления для 5%-резистора может быть в %% 0,35-1,4 при изменении температуры, т.е. с учетом разброса по номиналу сопротивления в 5% общее изменение с учетом климатики работы оборудования 5,35-6,4%. Как видите, легко по погрешности только уже по сопротивлению вываливаетесь из настроенных параметров границы срабатывания.
Да, на это можно и закрыть глаза на 1, 2… прототипах.

статья в основном про CCNet

А Вы не боитесь, что возможно переполнение стека при обращении к sendCCNET, т.к. используете вложенные вызовы?
не боимся. на оранже уже всё делаем и кнопки без резисторов.
ящики были в помещении. на случай размещения на улице предполагалось поставить внутрь датчик температуры и лампочку или кусок греющего кабеля.
выложено как есть, точнее было года 3 назад.

Как легким движением руки автомойку превратить в хабрапомойку… Используя ардуину.

всё в мире относительно.
комментариями тут создали помойку, зато в поисковиках заметно подняли в выдаче.
хабр забудет через два дня, яндекс никогда
А выдача чеков и работа с фискальным накопителем предусмотрены?
предусмотрена выгрузка данных о платежах на сервер, там уже можно подключить кассовый аппарат и выдавать чеки по запросу.
Sign up to leave a comment.

Articles