Barcode Scanner

Barcode Scanner пользовательский блок

Ответить
Naum
Рядовой
Сообщения: 32
Зарегистрирован: 14.09.2015{, 00:05}
Репутация: 0

Barcode Scanner

#1

Сообщение Naum » 28.05.2019{, 13:57}

нужна помощь засунуть код в пользовательский блок
на выходе должна быть строка считаная баркодом и импульс обновления коротковременая идиница
код который посылает на сом работает
библиотека: https://github.com/felis/USB_Host_Shield_2.0
USB_Host_Shield_2.0-master
Железа : USB Host Shield 2.0 for Arduino

пример:
#include <usbhid.h>
#include <usbhub.h>
#include <hiduniversal.h>
#include <hidboot.h>
#include <SPI.h>

class MyParser : public HIDReportParser {
public:
MyParser();
void Parse(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf);
protected:
uint8_t KeyToAscii(bool upper, uint8_t mod, uint8_t key);
virtual void OnKeyScanned(bool upper, uint8_t mod, uint8_t key);
virtual void OnScanFinished();
};

MyParser::MyParser() {}

void MyParser::Parse(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf) {
// If error or empty, return
if (buf[2] == 1 || buf[2] == 0) return;

for (uint8_t i = 7; i >= 2; i--) {
// If empty, skip
if (buf == 0) continue;

// If enter signal emitted, scan finished
if (buf == UHS_HID_BOOT_KEY_ENTER) {
OnScanFinished();
}

// If not, continue normally
else {
// If bit position not in 2, it's uppercase words
OnKeyScanned(i > 2, buf, buf);
}

return;
}
}

uint8_t MyParser::KeyToAscii(bool upper, uint8_t mod, uint8_t key) {
// Letters
if (VALUE_WITHIN(key, 0x04, 0x1d)) {
if (upper) return (key - 4 + 'A');
else return (key - 4 + 'a');
}

// Numbers
else if (VALUE_WITHIN(key, 0x1e, 0x27)) {
return ((key == UHS_HID_BOOT_KEY_ZERO) ? '0' : key - 0x1e + '1');
}

return 0;
}

void MyParser::OnKeyScanned(bool upper, uint8_t mod, uint8_t key) {
uint8_t ascii = KeyToAscii(upper, mod, key);
Serial.print((char)ascii);
}

void MyParser::OnScanFinished() {
Serial.println(" - Finished");
}

USB Usb;
USBHub Hub(&Usb);
HIDUniversal Hid(&Usb);
MyParser Parser;

void setup() {
Serial.begin( 115200 );
Serial.println("Start");

if (Usb.Init() == -1) {
Serial.println("OSC did not start.");
}

delay( 200 );

Hid.SetReportParser(0, &Parser);
}

void loop() {
Usb.Task();
}
Вложения
2.JPG
1.JPG

Аватара пользователя
Anydy
Администратор
Сообщения: 2160
Зарегистрирован: 30.12.2017{, 12:10}
Репутация: 133
Имя: Андрей

Barcode Scanner

#2

Сообщение Anydy » 28.05.2019{, 14:35}

Напишите свое сообщение завтра, сегодня все исчезнет....будет откат....ну или сохраните в блокноте. И код принято вставлять в теги "Code"

Ответить

Вернуться в «Помогите, а то я "нимагу"»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость