Код основан на https://github.com/justintconroy/MdbBillValidator
Купюроприемник и/или монетоприемник подключены через дополнительную плату согласования к HardwareSerial Arduino. Контроллер постоянно опрашивает MDB устройства и транслирует события в порт по протоколу serial в виде текстовых сообщений, контроллер в свою очередь принимает команды через порт этот.
Когда происходит какое-либо событие в MDB устройстве (например, принята монета), из SoftwareSerial контроллера считываются данные в виде последовательности символов, например: ##12#10* - получили монету номиналом в 10р. или ##13#100* - получили купюру в 100р.
Таким же образом управляем устройствами, посылая команды в SofwareSerial например: ##100#1* - сбросить монетоприемник, ##100#2* - сбросить купюроприемник, ##110#35* - выдать сдачи 35р. и т.д.
Подключение осуществляется согласно схеме doc/MDB_interface.pdf к HardwareSerial порту Arduino (пины 0 и 1) Метками RX(0) и TX(1) отмечены входы/выходы на строне Arduino (в скобках указаны номера пинов).
Важно! При подключении контроллера к устройствам разъем USB должен быть отключен от Arduino, и наоборот, при подключенном USB эти пины должны быть отключены от платы согласования. Так как USB использует тот же самый порт Arduino для связи с ПК, что и наш контроллер для связи с MDB устройствами.
Для обмена информацией с контроллером и приемником используется последовательный порт (SoftwareSerial в Arduino). По умолчанию, нужно подключаться к пинам 10(RX) и 11(TX). Номера пинов можно изменить в файле libraries/mdb-bridge/link-data.h:
#define LINK_CONTROLLER_RX_PIN 10
#define LINK_CONTROLLER_TX_PIN 11
Там же можно изменить скорость подключения к порту (по умолчанию 9600 бод):
#define LINK_BAUD_RATE 9600
Команды представляют собой последовательность символов. Команда всегда начинается с символов ##, за которыми следует код команды и заканчивается *
Команды могут принимать параметры в виде цифр, если параметров несколько, то они разделяются символом #. Пример команды: ##100#1* - инициализация купюроприемника (код команды 100 и параметр номер устройства).
В файле libraries/mdb-bridge/mdb-commands.h описаны команды для устройства. Как их читать:
например:
#define MDB_CMD_RESET (MDB_CMD_OFFSET + 0),1
это сброс устройства (MDB_CMD_OFFSET = 100)
число после запятой означает количество параметров для команды вот пример команды reset для для монетоприемника: ##100#2* (ее следует передавать перед началом сессии) другой пример, команда enable (MDB_CMD_ENABLE): ##104#2* (2 - это монетоприемник, 1 - купюропремник, 3 - терминал).
Устройства, в свою очередь, отвечают подобными последовательностями, которые вы должны парсить на стороне приемника.
Например, на команду ##108* монетроприемник должен показать состояние трубок (MDB_ANS_CHANGER_TUBE_STATUS) с восемью параметрами.
Если монетопремник примет монету, то он отправит в порт последовательность ##142#10*, где 142 - это код ответа (MDB_ANS_CHANGER_COIN_ACCEPTED), а 10 - номинал монеты.
Работают только купюроприемник и монетоприемник. Cashless не работает, в коде присутсвует как болванка.
Поддерживается минимальное кол-во количество комманд. То есть для эксплуаатации код придется дорабатыват вам самим.
Скетч для контроллера в файле mdb-controller/mdb-controller.ino
Пример обмена информации с контроллером в файле mdb-client/mdb-client.ino (запускается на воторй arduino которая подключена к контроллеру через SofwareSerail).