Hello,
I'm trying to read bar codes whit my Arduino Uno, USB shield and LCD. I've choose thisSPI protocol program because the Uno Board isn't indedet for Usb/hid librarys.
At the moment, the bar code, which appears on the display, scip the most of the numbers and letters. (same bar code show everytime same code on display)
Doesn't I have to set the serial clock and communication Pin for the SPI connection anywhere?
It would be gread if someone could help me.
Tanks in advance
#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();
}
Error message is as follow:
C:\Users\Tom\Documents\Arduino\sketch_SPI\sketch_SPI.ino: In member function 'virtual void MyParser::Parse(USBHID*, bool, uint8_t, uint8_t*)':
C:\Users\Tom\Documents\Arduino\sketch_SPI\sketch_SPI.ino:35:38: warning: invalid conversion from 'uint8_t* {aka unsigned char*}' to 'uint8_t {aka unsigned char}' [-fpermissive]
OnKeyScanned(i > 2, buf, buf[i]);
^
C:\Users\Tom\Documents\Arduino\sketch_SPI\sketch_SPI.ino:13:18: note: initializing argument 2 of 'virtual void MyParser::OnKeyScanned(bool, uint8_t, uint8_t)'
virtual void OnKeyScanned(bool upper, uint8_t mod, uint8_t key);
^