j'ai épluché bon nombre de sujets concernant l'utilisation d'un lecteur code barre avec une arduino uno, mais je n'arrive pas à trouver une réponse claire pour mon projet.
En effet, j'utilise un shield microsd pour pouvoir enregistrer les données de mes capteurs ultrasons, mais en plus je souhaiterais pouvoir utiliser un lecteur code barre ( brièvement, mes capteurs me servent à prendre les dimensions d'un carton, et le code barre me servirait à scanner l'étiquette de l'article se trouvant dans le carton).
Plusieurs questions:
est-il possible d'ajouter un shield usb sur mon montage pour pouvoir y brancher le lecteur code barre, tout en gardant le shield microsd qui lui a besoin des pins 10, 11, 12, 13.
Me sera-t-il possible d'enregistrer la valeur du code barre dans la micro sd ? en gros il est possible que la valeur lu par le lecteur code barre depuis le port usb soit renvoyer dans le port série ?
si ce n'est pas faisable, avez-vous une autre solution pour que je puisse ajouter un lecteur code barre à mon montage ?
j'ai épluché bon nombre de sujets concernant l'utilisation d'un lecteur code barre avec une arduino uno, mais je n'arrive pas à trouver une réponse claire pour mon projet.
Bonsoir
Je pense qu'en donnant déjà la référence/lien vers ton "lecteur de code barre" , tu va drastiquement augmenter la probabilité d'obtenir des réponses éclairées 8)
Alors pour l'instant justement je n'ai pas de lecteur code barre, car avant j'aimerais savoir vers quel type de lecteur code barre m'orienter justement..
il est possible de raccorder un lecteur code barre au shield usb justement, mais ma crainte et que je ne puisse pas enregistrer les données lues par le lecteur code barre dans la microsd.
Un lecteur de code barre se comporte presque toujours comme un clavier (USB).
Le problème est que souvent les shields SPI utilisent la même pin de même chip select (10).
Il y a la possibilité, plus souple, d'utiliser une carte USB host et un module SDcard :
USB Host :
SDcard 3.3V :
µSD 5V :
Il est possible aussi d'utiliser un shield USB Host (CS = 10) et un module SDcard (CS = au choix).
A moins de trouver un shield USB et un shield SDcard utilisant deux chip select différents. Pas gagné ...
J’ai déjà le’module sd qui s´apparente à la photo au dessus, et qui utilise les broches 10, 11, 12 et 13. Mais est ce que je peux utiliser une autre broche que la 10 pour le cs ?
Et si je comprend bien il y a une différence entre un shield usb et une carte host usb comme la photo au-dessus ?
Excusez moi je suis un peu perdu avec cette histoire de broche chip select..
J'ai déjà le'module sd qui s´apparente à la photo au dessus, et qui utilise les broches 10, 11, 12 et 13. Mais est ce que je peux utiliser une autre broche que la 10 pour le cs ?
Bien sûr.
Sur un WEB server Ethernet + SD j'utilise D10 pour l'Ethernet et D4 pour la SD :
Passe simplement le N° de la pin choisie à la méthode begin() de la libriairie SD (SDFat ?).
Et si je comprend bien il y a une différence entre un shield usb et une carte host usb comme la photo au-dessus ?
J’ai déjà le’module sd qui s´apparente à la photo au dessus, et qui utilise les broches 10, 11, 12 et 13. Mais est ce que je peux utiliser une autre broche que la 10 pour le cs ?
Et si je comprend bien il y a une différence entre un shield usb et une carte host usb comme la photo au-dessus ?
Excusez moi je suis un peu perdu avec cette histoire de broche chip select..
Bonjour
Comme l'a bien noté hbachetti
Un lecteur de code barre se comporte presque toujours comme un clavier (USB).
Le mot important là est presque
Dans l'environnement arduino sous USB host
Il faut donc déjà t'assurer que ton lecteur de code barre soit bien vu/reconnu comme un un dispo USB HID KEYBOARD
Une fois cette levée de doute faite , faire du log des infos renvoyées par le lecteur sur carte sd , ne sera pas trés compliqué
Sur mon WEB server, si j'initialise le module SD avant le module Ethernet la méthode sd.begin() échoue.
Il faut que j'initialise l'Ethernet d'abord, la SD ensuite.
Avec l'USBHost je ne sais pas, mais ce sera peut-être la même chose.
Il faut donc déjà t'assurer que ton lecteur de code barre soit bien vu/reconnu comme un un dispo USB HID KEYBOARD
+1
Acheter le bon lecteur, un lecteur qui n'aura pas besoin de driver particulier sous Windows.
Souvent les lecteurs code barre se configurent en scannant des codes barre de la doc.
J'y pense : ATTENTION, la photo du shield USBHost de mon post #3 est un shield pour une PRO MINI.
Il fonctionne en 3.3V. A ne pas utiliser avec une UNO.
Mais tu peux parfaitement acheter un shield pour une UNO : AliExpress
Utiliser ensuite un petit module SDcard de ton choix que tu brancheras sur les broches femelles 11 12 13 du shield USB en utilisant une pin CS autre que la 10.
Si tu possèdes déjà le module SDcard qui convient à ton utilisation, essaie-le.
Il faut faire attention à l'alimentation et au niveau des signaux SPI.
Ces modules peuvent :
posséder un régulateur 3.3V ou non
s'alimenter donc en 5V ou 3.3V suivant le cas, ou avoir deux broches 3.3V et 5V
posséder des résistances d'adaptation de niveau sur le bus SPI ou non
Personnellement j'ai des modules SDcard 3.3V avec résistances d'adaptation de niveau, que j'alimente par la broche 3.3V d'une NANO, UNO, MEGA, sans problème.
Super, merci beaucoup pour votre aide ! j'ai en effet testé et connecté la broche cs du shield micro sd à la broche 6 de mon uno et ça fonctionne. Il ne me reste plus qu'à rechercher des lecteurs codes barre qui correspondent à caractéristiques que vous m'avez cité et en avant Guingamp !
Pour ma culture personnelle, quand tu dis:
Acheter le bon lecteur, un lecteur qui n'aura pas besoin de driver particulier sous Windows.
Souvent les lecteurs code barre se configurent en scannant des codes barre de la doc.
Cela signifie que si un lecteur n'a pas de driver il se configure à partir d'une doc comme celle en pièce jointe, et un lecteur qui possède un driver il se configurera automatiquement sans la doc ?
Je voulais juste vérifier avant de l'acheter, que le courant de travail 110mA ne posait pas de problème si je l'alimentais via un shield usb sur ma arduino ?
Sinon il n'y a pas de driver et une documentation et il décode le format 128 donc ce que je veux.
Je m'excuse, j'ai édité mon post avec le lien. En effet au niveau des traductions ça laisse à désirer je poursuis mes recherches voir s'il y a quelque chose d'un peu plus sérieux..
Je voulais juste vérifier avant de l'acheter, que le courant de travail 110mA ne posait pas de problème si je l'alimentais via un shield usb sur ma arduino ?
Je m'excuse, j'ai édité mon post avec le lien. En effet au niveau des traductions ça laisse à désirer je poursuis mes recherches voir s'il y a quelque chose d'un peu plus sérieux..
Bonjour
Y a pas de soucis
Ton lien indique une "douchette" qui peut etre parametrée comme HID
Les commentaires des acheteurs indique aussi que la doc de parametrage livrée semble etre un peu absconse
J'ai bien avancé sur mon projet, j'ai acheté l'Usb Host shield et le shield pour la MicroSD et le lecteur code barre.
mon lecteur code barre est connecté à l'hôte USB et mon code me permet d'afficher la valeur des codes barres dans le moniteur série, donc ça c'est good !
Quand je branche le shield microsd directement sur la carte Uno, elle s'initialise correctement et je peux écrire dans un fichier .csv sur ma carte SD.
Maintenant le problème c'est qu'en la connectant à l'hôte USB, la carte SD ne s'initialise plus.. Je me souviens qu'il fallait changer la broche CS de la SD, je l'ai donc mis sur la broche 4, et le reste sur 11 12 13, mais rien à faire cela ne fonctionne pas.
J'ai aussi essayer d'initialiser la carte SD (SD.begin) après l'hôte USB dans mon code mais ça ne change rien.. Voici mon code, quelqu'un pourrait-il me donner une piste s'il vous plait pour pouvoir initialiser la SD branchée à un hôte USB ? merci pour votre aide..
#include <hidboot.h>
#include <usbhub.h>
#include <hiduniversal.h>
#include <SPI.h>
#include <SD.h>
// Satisfy the IDE, which needs to see the include statment in the ino too.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif
File fichierSD;
USB Usb;
USBHub Hub(&Usb);
HIDUniversal Hid(&Usb);
HIDBoot<HID_PROTOCOL_KEYBOARD> Keyboard(&Usb);
class KbdRptParser : public KeyboardReportParser
{
void PrintKey(uint8_t mod, uint8_t key);
protected:
virtual void OnKeyDown (uint8_t mod, uint8_t key);
virtual void OnKeyPressed(uint8_t key);
//void OnControlKeysChanged(uint8_t before, uint8_t after);
//void OnKeyDown (uint8_t mod, uint8_t key);
//void OnKeyUp (uint8_t mod, uint8_t key);
//void OnKeyPressed(uint8_t key);
};
void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key)
{
uint8_t c = OemToAscii(mod, key);
if (c)
OnKeyPressed(c);
}
/* what to do when symbol arrives */
void KbdRptParser::OnKeyPressed(uint8_t key)
{
static uint32_t next_time = 0; //watchdog
static uint8_t current_cursor = 0; //tracks current cursor position
Serial.print(char(key));
};
KbdRptParser Prs;
void setup()
{
Serial.begin(19200);
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start");
if (Usb.Init() == -1)
Serial.println("OSC did not start.");
delay( 200 );
Hid.SetReportParser(0, (HIDReportParser*)&Prs);
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);
//Initialisation de l'instance
if(!SD.begin(4))
{
Serial.println(F("Initialisation impossible !"));
return;
}
Serial.println(F("Initialisation OK"));
}
void loop()
{
Usb.Task();
}