/mdb-arduino

MDB controller based on Arduino UNO board

Primary LanguageC++

Контроллер MDB устройств на базе Arduino UNO

Код основан на 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).