Bonjour à tous,
Voilà plusieurs jours que je m'acharne sur un point d'un programme qui parait banale mais qui pourtant me rend fou ^^'
J'ai un scanner de code barre(agit comme un clavier) connecté en USB à un Sheild USB qui est gérer par la librairie USB Host Sheild 2.0. Ce dernier envoie les données à un Arduino nano qui est lui même connecté a une carte SD.
Mon programme consiste à:
-Le scanner de code barre lit un code barre de 6 caractères(chiffres) et les envoie un par un à l'arduino
-L'arduino crée une string avec les caractères et l'affiche sur le serial quand il à tout lue
-L'arduino crée un fichier sur la carte SD portant le nom de la chaine de caractères et c'est ici où ça coince!
En effet, il n'arrive pas à créer de fichier mais affiche pourtant bien la chaine de caractère sur le serial
J'en convient, le code est un petit peu biscornue mais c'est la bibliothèque USB qui est comme ça. Ce qu'il faut surtout regarder, c'est le void KbdRptParser::OnKeyPressed(uint8_t key) ligne 35
#include <hidboot.h>
#include <hiduniversal.h>
#include <usbhub.h>
#include <avr/pgmspace.h>
#include <Usb.h>
#include <SPI.h>
#include <SD.h>
File membre;
uint8_t curseur = 0;
char code[]="000000.txt";
USB Usb;
USBHub Hub(&Usb);
HIDUniversal Hid(&Usb);
class KbdRptParser : public KeyboardReportParser
{
void PrintKey(uint8_t mod, uint8_t key); // Add this line to print character in ASCII
protected:
virtual void OnKeyDown (uint8_t mod, uint8_t key);
virtual void OnKeyPressed(uint8_t key);
};
void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key)
{
uint8_t c = OemToAscii(mod, key);
if (c)
OnKeyPressed(c);
}
/* quand un symbol arrive : */
void KbdRptParser::OnKeyPressed(uint8_t key)
{
if(curseur <= 5){
code[curseur]=(char)key;//ici,(char)key est le caractère reçue
curseur++;
}
else if(curseur == 6){
curseur=0;
Serial.println(code);
membre = SD.open(code, FILE_WRITE);
membre.close();
if(SD.exists(code)) {
Serial.println(F("fichier crée"));
}
else {
Serial.println(F("fichier non crée"));
}
}
};
KbdRptParser Prs;
void setup()
{
Serial.begin( 115200 );
pinMode(9, OUTPUT);
Serial.println(F("Start"));
SD.begin(9);
if (Usb.Init() == -1) {
Serial.println(F("OSC did not start."));
}
delay( 200 );
Hid.SetReportParser(0, (HIDReportParser*)&Prs);
delay( 200 );
}
void loop()
{
Usb.Task();
}
Si quelqu'un peut m'éclairer ce serait super car depuis 3 jours, je racle les fonds d'internet et tourne mon code dans tout les sens pour essayer de trouver une solution!
J’espère avoir été compréhensible ^^
Merci beaucoup d'avance!
PS : C'est la première fois que j’écris sur le forum mais je l'ai beaucoup lue