SCR35T Card Reader

Buongiorno a tutti.

Intanto ringrazio tutti quelli che mi sapranno aiutare...

Sto realizzando una macchina con Arduino Mega, attualmente funzionante, che dovrà leggere da una fotocellula il passaggio di alcuni elementi etc.. che non sto qui a spiegare.

L'avvio della macchina è caratterizzato dalla lettura di un codice a barre mediante un lettore ottico, il quale riconosce ovviamente il codice a barre e fa partire il programma. Purtroppo questo lettore ottico non va più bene per quello che la macchina richiede e quindi, cercando in rete e contattando varie azienda sono giunto alla soluzioni finale di un lettore 3-in-1 smart/memory/magnetic card reader (EMV Card Reader For Smart Phone, Encrypted Card Reader, Card Reader For IOS, Chip And Pin Card Reader - Singular Technology Co. Ltd. - Mobile Payment Card Reader, F2F IC, F2F Decoder)

Ho acquistato il lettore e purtroppo non riesco ad interfacciarlo con Arduino.

Il lettore ha una connessione USB HID, nel link sopra sono definite tutte le caratteristiche.

Io vorrei al momento inserire la tessera sanitaria e leggere la banda 1 (contenente codice fiscale, cognome e nome del proprietario).

Ho collegato una USB Host Shield per Arduino Mega 2560, ma non so proprio dove mettere le mani.

Nel vecchio progetto con il lettore ottico facevo cosi :

//Includo le librerie per la gestione e la lettura dei dispositivi USB
#include <usbhid.h>
#include <hiduniversal.h>
#include <Usb.h>
#include <usbhub.h>
#include <hidboot.h>
#include "keyboard.h"
//Inizializzo il lettore di codice a barre 
USB Usb;
USBHub Hub(&Usb);
HIDUniversal Hid(&Usb);
HIDBoot<USB_HID_PROTOCOL_KEYBOARD>    Keyboard(&Usb);
//Funzione relativa al task di lettura del codice a barre
void Task_CodBarre(void* pvParameters) {

    (void)pvParameters;
    
    Serial.println("Avvio lettura codice a barre");

    if (Usb.Init() == -1)
    {
        Serial.println(C_G_S.code06());
    }
    else
    {
        Hid.SetReportParser(0, (HIDReportParser*)&Prs);

        Serial.println(C_G_S.code101());

        //Leggo di continuo dalla porta USB
	while (1) {
            Usb.Task();
        }
    }
}

questo è il codice che gestisce la lettura del codice a barre.

Questo lettore necessita però di una comunicazione, Arduino deve inviare una stringa in HEX e il lettore risponde con dei pacchetti a cascata da 64byte a pacchetto.

Dal manuale dei comandi :

Command Set
2.1 Command List
Description | Command Code | Response Code
1 Give Up Action | 1B 25 20 4D | OK: 1B 00 00 Edc(1B) Fail: 1B 01 00 Edc(1A)
2 Reset Reader | 1B 25 21 4D | “Version String”
3 Get Ack | 1B 25 22 4D | 1B 00 00 Edc(1B)
.....
....
....
etc...

spero si capisca...

A questo punto, come faccio ad inviare il comando, per esempio, 1B 25 20 4D e poi intercettare la riposta ?

Spero di essere stato chiaro con la descrizione del mio problema e di essere nella sezione giusta del Forum.

Grazie a tutti

>xxfabsxx: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice (... fosse anche UNA sola riga) all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice, SENZA TUTTI QUEI COLORI, dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo

P.S.: Ti ricordo anche che, purtroppo, fino a quando non avrai sistemato il codice come richiesto, nessuno ti potrà rispondere, quindi ti consiglio di farlo al più presto. :wink:

xxfabsxx:
Dal manuale dei comandi :

E questo manuale da dove si scarica ? Al link che posti c'e' solo un generico pdf sulle caratteristiche.
P.S. probabilmente era più semplice la versione rs232 (seriale) rispetto alla versione hid da Arduino.

nid69ita:
.... probabilmente era più semplice la versione rs232 (seriale) rispetto alla versione hid da Arduino.

>xxfabsxx: infatti ... se fossi in te chiederei al venditore di sostituirlo con la versione RS232 e poi, con un semplice adattatore RS232 <--> TTL lo colleghi ad una delle seriali di Arduino MEGA senza tante complicazioni e schede aggiuntive (per di più obsolete e NON più prodotte da Arduino).

Guglielmo

nid69ita:
E questo manuale da dove si scarica ? Al link che posti c'e' solo un generico pdf sulle caratteristiche.
P.S. probabilmente era più semplice la versione rs232 (seriale) rispetto alla versione hid da Arduino.

Il manuale me lo ha inviato il distributore. Purtroppo non ho trovato in giro altri lettori di banda magnetica e chip e questa era l'unica versione disponibile.
La mia domanda però riguarda la comunicazione USB HID utilizzando la libreria Host shield 2, come faccio a inviare un dato e poi leggere la risposta?

Non conosco la libreria e la gestione HID tramite arduino e libreria hid. Ho letto che è un bel casino.
Qui: GitHub - felis/USB_Host_Shield_2.0: Revision 2.0 of USB Host Library for Arduino.
dice:
"HID Libraries"
HID devices are also supported by the library. However these require you to write your own driver. A few example are provided in the examples/HID directory. Including an example for the SteelSeries SRW-S1 Steering Wheel."

Arduino non è un pc con S.O. su cui puoi installare un driver fornito dal produttore. Non saprei come fare x Arduino. Mi sa che ti tocca studiarti l'esempio e la lib come dice a quel link.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.