Usb shield + сканер штрих кода

Тема в разделе "Arduino & Shields", создана пользователем AFrimen, 1 июл 2020.

  1. AFrimen

    AFrimen Нуб

    здравствуйте коллеги,
    может кто подсказать или помочь с кодом
    тема такая, имеем uno r3 + usb shield и к этому делу подключен сканер штрих кода
    прошивка взята по семплу отсюда , все как бе работает когда подключен сканер более старый ( вот такой Acan CCD 8100 ) , и в консолее показывает правильно результат скана (все 8 цифр),
    но когда к шилду подключить более новый (такой netum nt-1209) то тогда скетч выдает в консоль не все цифры а всего 2 / такое чувство что слишком быстро проходит сканирование/
    буду рад прочитать ваши умные мысли
     
  2. parovoZZ

    parovoZZ Гуру

    ввиду того ,что автор поста никаких тех.данных не предоставил, а только ссылки на левые гамазины, то делаю вывод, что ТС в ответе не заинтересован, а только в рекламе ресурсов.
     
  3. AFrimen

    AFrimen Нуб

    блин сорян, данные какие?.. все выставлю
    немного начинающий в этом деле
     
  4. b707

    b707 Гуру

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

    AFrimen Нуб

  6. AFrimen

    AFrimen Нуб

    результата сканирование слева старый, справа новый, сканировал с права налево
    [​IMG]
     
  7. AFrimen

    AFrimen Нуб

    код
    Код (C++):
    #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[i] == 0) continue;
        // If enter signal emitted, scan finished
        if (buf[i] == 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[i]);
        }
        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();
    }
     
  8. AFrimen

    AFrimen Нуб

    сделал вывод из семпла usb description
    старый сканер

    Код (Text):
    0000: 05 01 09 06 A1 01 05 07 19 E0 29 E7 15 00 25 01
    0010: 75 01 95 08 81 02 95 01 75 08 81 01 95 05 75 01
    0020: 05 08 19 01 29 05 91 02 95 01 75 03 91 01 95 06
    0030: 75 08 15 00 25 65 05 07 19 00 29 65 81 00 C0
    Usage Page Gen Desktop Ctrls(01)
    Usage Keypad
    Collection Application
    Usage Page Kbrd/Keypad(07)
    Usage Min(E0)
    Usage Max(E7)
    Logical Min(00)
    Logical Max(01)
    Report Size(01)
    Report Count(08)
    Input(00000010)
    Report Count(01)
    Report Size(08)
    Input(00000001)
    Report Count(05)
    Report Size(01)
    Usage Page LEDs(08)
    Usage Min(01)
    Usage Max(05)
    Output(00000010)
    Report Count(01)
    Report Size(03)
    Output(00000001)
    Report Count(06)
    Report Size(08)
    Logical Min(00)
    Logical Max(65)
    Usage Page Kbrd/Keypad(07)
    Usage Min(00)
    Usage Max(65)
    Input(00000000)
    End Collection
    новый

    Код (Text):
    Start
    0000: 05 01 09 06 A1 01 05 07 19 E0 29 E7 15 00 25 01
    0010: 75 01 95 08 81 02 95 06 75 08 25 65 19 00 29 65
    0020: 81 00 C0
    Usage Page Gen Desktop Ctrls(01)
    Usage Keypad
    Collection Application
    Usage Page Kbrd/Keypad(07)
    Usage Min(E0)
    Usage Max(E7)
    Logical Min(00)
    Logical Max(01)
    Report Size(01)
    Report Count(08)
    Input(00000010)
    Report Count(06)
    Report Size(08)
    Logical Max(65)
    Usage Min(00)
    Usage Max(65)
    Input(00000000)
    End Collection
     
  9. Un_ka

    Un_ka Гик

    Надписи на английском, еврите и арабском. Откуда вы пишите?
    Прогони через вот это, чтобы не играть в игру найди отличие.
     
    AFrimen нравится это.
  10. AFrimen

    AFrimen Нуб

    пишу вам из киева) украина, спасибо прогнал, отличия и раньше видел
    только кто б подсказал как править это всё дело
    п.с. банки были под руками тестовые - не мои))
     
  11. AFrimen

    AFrimen Нуб

    если кто может помочь с правками отпишитесь
    не бесплатно кншн
     
  12. b707

    b707 Гуру

    еще раз повторяю вопрос - если сканер подключить просто к винде, а не к ардуине - читает одинаково? - думаю нет
    А если нет - то отложите сначала ардуину, найдите мануалы на оба сканера и настройте стартовую и оконечную последовательность. скорость чтения и протокол одинаково на обоих сканерах. Без этого возиться с ардуиной нет никакого смысла.
     
    Un_ka нравится это.
  13. b707

    b707 Гуру

    для этого надо иметь сканеры на руках.
     
  14. AFrimen

    AFrimen Нуб

    обое сканеры система находит как клавиатура хид
    старый при сканировании в блокннот выводит более медленно
    новый быстро
     
  15. b707

    b707 Гуру

    оба читают баркоды с коробок правильно?
     
  16. AFrimen

    AFrimen Нуб

    да абсолютно одинаково и верно , разница только в скорости вывода как писал
     
  17. AFrimen

    AFrimen Нуб

    кто может поделиться светлой мыслью или линком, буду благодарен
    а то так сказать дошёл до ручки
     
  18. parovoZZ

    parovoZZ Гуру

    Есть прекрасная библиотека LUFA. Она поддерживается до сих пор автором. В ней есть класс HID. Поэтому считаю, что надо переходить на неё.
     
    Руслан 1 нравится это.
  19. Вы бы полностью задачу описали

    Для гипермаркета мудрить сканер на дуньке верх жлобства

    А для мебельного склада на 4пда есть приложение, которое с фотокамеры смартфона(ов) расшифровку штриходасштрихода в екселевский файл на серваке кидает (или синхрониируется), кроме того там десятки сценариев обработки

    Т.е. материальн. затраты стремятся к нулю, версия уже не сырая
     
  20. b707

    b707 Гуру

    да не только для гипера... такой USB сканер стоит порядка 30-35 баксов. доступно для любой конторы