View Full Version : [Java] Pistola laser USB
UnknownSoldier
16-12-2008, 15:48
Salve a tutti. Ho bisogno di sviluppare un programma che riconosca un codice letto da un pezzo di carta con una pistola laser USB (tipo quelle che usano nei super mercati con i codici a barre) e confrontarlo con uno presente nel database.
Avrei bisogno per prima cosa di capire: come posso catturare l'input in ingresso di questa periferica? E' possibile oppure solo il programma in dotazione alla pistola può farlo?
Se è possibile catturare l'input con Java, sapete dirmi come fare di preciso? Esiste qualche guida?
In che modo potrei poi salvare questo codice a barre? Vi prego è urgente, spero che qualcuno sappia aiutarmi :)
sottovento
16-12-2008, 16:45
I dispositivi di questo tipo che mi e' capitato di vedere, erano di due tipi:
1 - "Simulavano" l'introduzione dei numeri, come se fossero premuti dalla tastiera;
2 - Spedivano i dati come se fossero una normalissima porta seriale;
Nel primo caso, praticamente non si deve far niente di particolare: e' proprio come se si battesse sulla tastiera.
Ovviamente nel secondo caso devi lavorare un po' di piu', ma mica poi tanto.
Sicuramente esisteranno altri tipi, ma non so dirti altro
UnknownSoldier
16-12-2008, 17:15
I dispositivi di questo tipo che mi e' capitato di vedere, erano di due tipi:
1 - "Simulavano" l'introduzione dei numeri, come se fossero premuti dalla tastiera;
2 - Spedivano i dati come se fossero una normalissima porta seriale;
Nel primo caso, praticamente non si deve far niente di particolare: e' proprio come se si battesse sulla tastiera.
Ovviamente nel secondo caso devi lavorare un po' di piu', ma mica poi tanto.
Sicuramente esisteranno altri tipi, ma non so dirti altro
Innanzitutto grazie mille per la risposta, è una cosa molto importante per me.
Vorrei però capire in dettaglio come funzionano questi apparecchi.
Devo fare un programma non complicato quindi uno che simula una tastiera andrebbe benissimo.
Allora, se io su un foglio di carta leggo delle lettere o dei numeri con questo dispositivo, mi converte automaticamente l'input in oggetto String?? E cosa succede invece se leggo un codice a barre oppure degli scarabocchi?
Io dovrei sviluppare un programma che salva in una tabella la lista di alcune persone. Ad ogni persona è associato un codice a barre, queste persone devono poter effettuare una sorta di "autenticazione" mostrando il loro codice a barre che hanno su un pezzo di carta. Il lettore dovrebbe leggere questo codice a barre ed interpretarlo, e fare quindi un confronto col codice a barre presente nel database... come potrei sviluppare una cosa del genere?
UnknownSoldier
17-12-2008, 17:02
Vi prego aiutatemiiiiii, nessuno mi sa dare informazioni al riguardo?
Vi prego aiutatemiiiiii, nessuno mi sa dare informazioni al riguardo?
semplicemente lo scanner di codici a barre del primo tipo viene visto come una tastiera dal sistema operativo, alla lettura del codice si comporta come se digitassi i numeri del codice a barre seguiti da invio tutto li
banryu79
17-12-2008, 17:49
semplicemente lo scanner di codici a barre del primo tipo viene visto come una tastiera dal sistema operativo, alla lettura del codice si comporta come se digitassi i numeri del codice a barre seguiti da invio tutto li
Nel qual caso in Java quando avvii l'applicazione dovresti dargli il focus (requestFocus() mi pare in class Component) e poi con un KeyListener catturi e processi gli eventi che ti interessano (KeyPressed(), KeyReleased(), KeyTyped()).
Se la sequenza fosse appunto tutte le cifre del codice seguite da invio sarebbe semplice ricostruire una String che ti potrebbe, come avevi già detto, fare da Key per l'HashMap in cui hai caricato tutte le coppie "codice a barre -> persona" presenti nel db.
UnknownSoldier
17-12-2008, 19:28
Quindi il lettore barcode che simula la tastiera, legge il codice e lo converte automaticamente in valori stringa? Però leggendo su internet ho trovato che ci sono vari algoritmi di codici, devo impostare qualcosa per specificare a quale algoritmo riferirsi? Oppure non c'è ne bisogno e interpreta tutto automaticamente?
Questo tipo di lettore "è" una tastiera connessa in parallelo alla tastiera normale (se serve) oppure esclusivamente. Per realizzare il tuo programma devi gestire il normale input da tastiera.
I codici a barre sono di diverse famiglie, in europa e in italia si usa normalmente lo standard EAN-13 che consiste in 12 cifre più una cifra di controllo.
Non dovrebbe essere necessario configurare il lettore, ogni codice a barre ritorna una specifica serie di byte quindi puoi limitarti a contare i byte (12) e verificare che siano tutti valori numerici.
UnknownSoldier
17-12-2008, 21:50
Quindi se ho capito bene, questo dispositivo funziona proprio come se fosse una tastiera vera e propria? Mi spiego meglio: creo un codice a barre partendo da una stringa: "my string".
Stampo questo codice a barre e uso il lettore ottico, questo lettore legge questo codice e ritorna al programma proprio la stringa "my string" come se fosse stata data dalla tastiera?
banryu79
18-12-2008, 09:26
Quindi il lettore barcode che simula la tastiera, legge il codice e lo converte automaticamente in valori stringa?
Io prima mi riferivo allo scenario illustrato da fazz! che riprendeva il post di sottovento, dove quest'ultimo dice che sostanzialmente i lettori di codici a barre posso passare le informazioni in due modi:
I dispositivi di questo tipo che mi e' capitato di vedere, erano di due tipi:
1 - "Simulavano" l'introduzione dei numeri, come se fossero premuti dalla tastiera;
2 - Spedivano i dati come se fossero una normalissima porta seriale;
Dicevo che se nel tuo caso tu avessi la fortuna di avere a che fare con un dispositivo che funziona come illustrato nel primo caso (tipo tastiera), allora tutto quello che dovresti fare dovrebbe essere più o meno quello che ti ho scritto nel post precedente: il lettore di codici a barre quando legge un codice si comporta come una tastiera.
Una tastiera che fa, dal punto di vista di Java?
Genera degli eventi diretti sul Component che ha il focus in quel momento, intercettabili con un Listener.
Mi aspetterei quindi quindi che il dispositivo, letto un codice a barre, generi una sequenza di KeyEvent da dover intercettare e da processare in uno o più tra questi metodi tipici di un KeyListener:
- KeyPressed(), KeyReleased(), KeyTyped().
Insomma, tenterei con questo approccio, farei delle prove almeno!
Questo appunto tu avessi a che fare con un dispositivo del primo tipo.
La prima cosa da fare è capire con che tipo di dispositivo hai a che fare: dovresti dircelo tu questo :)
Poi la prova è abbastanza facile, colleghi il lettore, metti il focus su un editor di testo e leggi un codice a barre, così vedi quello che ti legge.
Ovviamente se è USB avrà bisogno anche di un suo driver (che è fornito dal produttore). Generalmente possono funzionare in entrambi i modi, o in simulazione tastiera o in simulazione di seriale.
UnknownSoldier
18-12-2008, 11:26
Raga quindi è come ho detto nell'ultimo mio post (quello prima di questo)? Comunque ho creato un piccolo programma di test, e ho creato un codice a barre con la libreria barbecue, devo solo aspettare che il mio cliente (primo cliente :D ) si faccia prestare il lettore e provare... praticamente ho utilizzato un semplice programma che usa un JOptionPane che mostra un Input Dialog (quindi il focus è automatico) e vedere se funziona.
banryu79
18-12-2008, 11:58
Raga quindi è come ho detto nell'ultimo mio post (quello prima di questo)?
Forse c'è stato un quiproquo
Quando dici:
Stampo questo codice a barre e uso il lettore ottico, questo lettore legge questo codice e ritorna al programma proprio la stringa "my string" come se fosse stata data dalla tastiera?
Parli di "stringa"... Ma non ti arriva direttamente una stringa come oggetto String, per intenderci.
Nel tuo esempio, dove il codice letto è: "my string", lato Java dovresti vedere arrivare una sequenza di KeyEvent, dove ogni singolo evento decodificato è, in questo caso, la singola lettera spedita.
Quindi la stringa (intesa come oggetto String) "my string" se tu che te la devi ricostruire a partire dai KeyEvent, non è che ti arriva dal lettore otticco gà bella e pronta, se era questo il tuo dubbio.
UnknownSoldier
18-12-2008, 12:06
Allora, io ho fatto una classe di test in questo modo:
import javax.swing.JOptionPane;
import java.io.File;
public class TestBarCode
{
public static void main (String[] args)
{
try
{
/*Barcode barcode = BarcodeFactory.createEAN13 ("983243209872");
File file = new File ("mybarcode3.png");
BarcodeImageHandler.savePNG (barcode, file);*/
String code = "983243209872";
String result = JOptionPane.showInputDialog("Inserisci messaggio");
if (result.equals (code))
JOptionPane.showMessageDialog (null, "Il programma funziona!", "Successo", JOptionPane.INFORMATION_MESSAGE);
else
JOptionPane.showMessageDialog (null, "Il dispositivo o il programma non funzionano!", "Errore", JOptionPane.ERROR_MESSAGE);
}
catch (Exception exception)
{
exception.printStackTrace();
}
}
}
Mi basta questo per poter leggere il codice con il lettore barcode? Mi si apre un input dialog qualunque, e il lettore dovrebbe passare la stringa come se fosse scritta dalla tastiera giusto?
banryu79
18-12-2008, 12:19
Mmm...
Penso che dovrebbe andare, se il focus è sul textField costruito dal JOptionPane, non appena il lettore ottico legge il codice a barre, dovrebbe generare eventi di tastiera: questi dovrebbero quindi venire catturati e processati.
Ma oltre alla sequenza rappresentante i caratteri del codice a barre, il lettore ti invia anche un ENTER a fine lettura?
Mmm...
Penso che dovrebbe andare, se il focus è sul textField costruito dal JOptionPane, non appena il lettore ottico legge il codice a barre, dovrebbe generare eventi di tastiera: questi dovrebbero quindi venire catturati e processati.
Ma oltre alla sequenza rappresentante i caratteri del codice a barre, il lettore ti invia anche un ENTER a fine lettura?
dovrebbe inviarlo, almeno i lettori che avevo provato io lo inviavano
UnknownSoldier
18-12-2008, 12:37
Mmm...
Penso che dovrebbe andare, se il focus è sul textField costruito dal JOptionPane, non appena il lettore ottico legge il codice a barre, dovrebbe generare eventi di tastiera: questi dovrebbero quindi venire catturati e processati.
Ma oltre alla sequenza rappresentante i caratteri del codice a barre, il lettore ti invia anche un ENTER a fine lettura?
Sì il dialog input ha il focus automatico. Per quello che ho letto in giro l'enter dovrebbe essere automatico e comunque non è un problema.
Grazie a tutti poi vi farò sapere se il test va a buon fine :)
UnknownSoldier
18-12-2008, 22:29
Grazie mille a tutti, funziona! E' stato semplice ;)
Salve,
scusate se riesumo questo vecchio thread, ma mi chiedevo se foste a conoscenza di qualche lettore di codici a barre con queste caratteristiche:
1. Laser
2. Portabile con memoria interna
3. Con interfaccia USB per poterlo poi connettere al PC e scaricare i codici letti
In merito al 3° punto, il download avviene tramite un software apposito oppure secondo uno standard (ad esempio creazione di un file di testo in formato CSV)?
Grazie
Daniels118
13-05-2015, 16:36
Io ne ho usato uno di quel tipo ("Terminale Cipher Lab"), ha una basetta che si collega al pc tramite un convertitore seriale/usb.
Il produttore fornisce degli strumenti per lo sviluppo.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.