Подключение монетоприемника к малине
-
Здравствуйте, пытаюсь подключить монетник к малинке, в целях получить что то вроде музыкального автомата, но вот с кодом беда, пробую на питоне, он вроде по проще. В конце waiting for interrupt, это я понял, а вот что в процедуре писать хз… Суть в том что монетник посылает импульсные сигналы на ногу, в зависимости от количества сигналов номинал монет. Пожалуйста хоть наведите на мысль как это можно сделать. В принципе можно и на C, когда ничего не знаешь все равно что изучать)) просто на питоне примеров плеера навалом, уже попробовал.
-
Вот первые две ссылки по теме, которые выдал Google:
http://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/
А изучать лучше сначала Питон, так как он гораздо проще.
По большому счёту Си необходим только для реализации драйверов устройств, работающих на уровне ядра Linux. «Но это совсем другая история» -
За ссылки спасибо, но суть не в этом. Я написал обработку, отлавливающую прерывания, но не могу понять как их посчитать. Во первых если написать сильно большую процедуру на срабатывания прерываний он начинает пропускать прерывания, так как они приходят довольно часто, а во вторых как понять что прием монеты завершен? например я в обработке пишу счетчик a=a+1 print a, во время забрасывания монеты он выдает
1
2
3
4
..
56
57Получается должна быть еще одна процедура которая реагирует когда a достигает определенного занчения, НО как ее вызвать… И еще, если монета 1 руб послала 2 прерывания, а монета 5 руб послала 5 прерываний монета 10 7 прерываний, если я закину 5 и 2 малина же подумает что это 10…
и последний вопрос, монетник посылает минусовой сигнал, и если рядом находится какой нибудь провод малина реагирует… как быть? подтяжка через резистор работает только если читать плюсовой сигнал.
-
Не знаю что за монетоприёмник Вы используете и на каком языке программирования и с использованием каких библиотек Вы реализовали подсчёт монет, поэтому точных рекомендаций дать не могу, но некоторые соображения могу высказать.
Во-первых: монетоприёмники обычно настраиваются так, чтобы общее число импульсов было равно сумме опущенных монет. Поэтому надо его правильно «обучить» чтобы на монету 1руб. он выдавал 1 импульс, 2руб. = 2 импульса, 5руб. = 5 импульсов и 10руб. = 10 импульсов. Тогда с подсчётом суммы проблем не будет. Как это сделать — ищите в документации на монеприёмник.
Во-вторых: если устройство выдаёт «отрицательные импульсы», т.е. как я понял во время импульса выход монетоприёмника соединяется с общим проводом (т.н. «открытый коллектор»), то вход GPIO, к которому его подключаете, должен быть «подтянут к плюсу». Для этого можно и нужно использовать внутренний подтягивающий резистор. Никакие внешние резисторы припаивать не нужно. Например, используя библиотеку WiringPi на языке Си это можно сделать операторами:
pinMode(PIN, INPUT);
pullUpDnControl(PIN, PUD_UP);
wiringPiISR(PIN, INT_EDGE_FALLING, &Button_Pressed);
где:
первый оператор устанавливает выбранный пин на чтение входящих импульсов (PIN — номер пина)
второй оператор «подтягивает его к плюсу»
третий оператор задаёт процедуру-обработчик (здесь «Button_Pressed»), которая, например, подсчитывает количество импульсов.
Аналогично можно написать и на Питоне, только там используется другая библиотека. Примеры Вы с лёгкостью найдёте в интернете.Ну и последнее: убедитесь, что Ваш монетоприёмник ни при каких условиях не выдаёт на выходе напряжение более +3.3 вольта, в противном случае защитите GPIO соответствующим стабилитроном (например марки кс133а). Иначе «спалите» GPIO Малинки.
-
Спасибо большое за участи, многое стало понятнее. С монетником Вы правы, можно задать любое число импульсов, так и сделаю (1 рубь = 1 импульс), а так же по поводу напряжения, так как сам девайс питается от 12В скорее всего и импульсы -12В. Остается последний вопрос, кто разбирается в коде ардуино и малины одновременно помогите пожалуйста адаптировать скетч для Arduino cxem.net/arduino/arduino85.php, а то мучаюсь третий день и не пойму что от меня хочет железка… а там вроде все норм
-
Размах импульсов (в вольтах) монетоприёмника ищите в документации к нему или просто измерьте по осциллографу. Обратите внимание, что на GPIO Малинки надо подавать импульсы ТОЛЬКО в положительной полярности, т.е. в диапазоне от 0 до +3.3 вольта относительно общего провода Малинки.
-
В общем кое что получилось, долго думал над Вашим последним сообщением, осцилографа у меня нет, пришлось тестером и светодиодом обходиться. Монетник упорно посылает отрицательные импульсы, от автомобильной сигнализации остался инвертирующий транзистор. только у него минимум +5 напряжение. Подключил один провод монетника (кстати CH-926) к земле малины через резистор, другой на транзистор, а третий провод транзистора на GPIO малины. Напряжение на выходе транзистора получилось примерно +0,3 вроде хватает, и работает без наводок.
А вот сама программа получилась условно. Малина реагирует на прерывания, считает импульсы, но никак я не могу понять как определить что это последний импульс и прием монеты завершен. Пока написал если количество импульсов достигло 10 то обнулить и выполнить команду. По сути работает но не так как хотелось бы.
Пробовал через таймер, но малина никакие команды не выполняет кроме тех что написаны в процедуре прерывания. В общем взрыв мозга. -
Для окончания приёма монет логичнее использовать внешние кнопки как на всех автоматах типа «Выполнить» и «Не выполнять, а деньги вернуть»
Если же без таких кнопок вообще, то да, можно, например, после паузы в сколько-то секунд считать, что приём монет закончен и выполнить какое-либо действие. Такое действие должна выполнять ОТДЕЛЬНАЯ процедура в программе, запускаемая по таймеру. Причём любой импульс от монетоприёмника должен перезапускать этот таймер «с нуля».
Если не получится, то приведите тексты Ваших программ — постараюсь помочь.