#include<hid.h>
#include<hiduniversal.h>
#include <LiquidCrystal.h>
#include <avr/pgmspace.h>
//#include <avrpins.h>
//#include <max3421e.h>
//#include <usbhost.h>
//#include <usb_ch9.h>
#include <Usb.h>
#include <usbhub.h>
#include <avr/pgmspace.h>
//#include <address.h>
#include <hidboot.h>
//#include <printhex.h>
//#include <message.h>
//#include <hexdump.h>
//#include <parsetools.h>
#define DISPLAY_WIDTH 16
// initialize the LCD library with the numbers of the interface pins
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
USB Usb;
USBHub Hub(&Usb);
HIDUniversal Hid(&Usb);
HIDBoot<USB_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 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
if( millis() > next_time ) {
lcd.clear();
current_cursor = 0;
delay( 5 ); //LCD-specific
lcd.setCursor( 0,0 );
}//if( millis() > next_time ...
next_time = millis() + 200; //reset watchdog
if( current_cursor++ == ( DISPLAY_WIDTH + 1 )) { //switch to second line if cursor outside the screen
lcd.setCursor( 0,1 );
}
Serial.print( (char)key );
lcd.print( (char)key );
};
KbdRptParser Prs;
void setup()
{
Serial.begin( 115200 );
Serial.println("Start");
if (Usb.Init() == -1) {
Serial.println("OSC did not start.");
}
delay( 200 );
Hid.SetReportParser(0, (HIDReportParser*)&Prs);
// set up the LCD's number of columns and rows:
lcd.begin(DISPLAY_WIDTH, 2);
lcd.clear();
lcd.noAutoscroll();
lcd.print("Ready");
delay( 200 );
}
void loop()
{
Usb.Task();
}
Ho risolto il problema seguendo un tutorial su youtube e un topic precedentemente aperto sul forum. Per ricapitolare, ecco cosa ho fatto:
-Ho aggiunto #include<hid.h> e #include<hiduniversal.h> a inizio codice (hid.h non era inclusa nella USB hostshield library)
-Ho commentato tutte le librerie che mi davano problemi
-Ho aggiunto queste due righe: a) USBHub Hub(&Usb); and **b)**HIDUniversal Hid(&Usb);
-Ho aggiunto USB_ alla riga successiva per compensare a un aggiornamento della libreria successivo al codice di esempio
-Ho aggiunto (char) al serial e lcd print
Ora però ho un altro problema: vorrei salvare il mio codice a barre in un array ma il codice che ho scritto non funziona. Eccolo:
uint8_t key_all[]={0,0,0,0,0,0,0,0,0,0,0,0,0};
int i;
//crea array
if (i<12) {
key_all[i]= key;
i++;
}
else if (i==12) {
//key_all[12]=key;
i=0;
int t=0;
for(t=0; t<13;t++){
Serial.print( (char)key_all[t]);
}
}
L'ho aggiunto alla fine di void KbdRptParser::OnKeyPressed(uint8_t key).
Credo sia una domanda piuttosto basilare ma non riesco a venirne a capo