Problema USBKeyboard e tastierino 4x3

Salve a tutti è un pò che uso arduino, e ora volevo impegnarmi in un progetto che esegue l'emulazione di una tastiera usb interfacciata con un tastierino numerico 4x3 con libreria I2c e wire.
Gli sketch separati funzionano (quelli di esempio nella libreria) ma se vado a interfacciarli insieme no.
Nel senso che il programma viene ottimamente compilato e scaricato all'interno di arduino, ma quando inserisco l'USB ne mio pc da 2 suoni continui come se venisse riconosciuta 2 volte la tastiera e quando premo un tasto del 4x3 non succede nulla.
Lo sketch di seguito dovrebbe scrivere "Hello World" quando viene premuto un qualsiasi tasto, ma non succede nulla.
Aiutatemi sto impazzendo da una settimana!
Grazie in anticipo.

#include "UsbKeyboard.h"
#include <Wire.h>
#include <i2ckeypad.h>

#define ROWS 4
#define COLS 3

//Setta Indirizzo PCF8574 0x20
#define PCF8574_ADDR 0x20

//Definisce l'oggetto TASTIERA
i2ckeypad kpd = i2ckeypad(PCF8574_ADDR, ROWS, COLS);

// Configure button inputs and set up the USB connection to the host

void setup()
{

Wire.begin(); //Inizializza La Libreria Wire

kpd.init(); //Inizializza oggetto Keypad

// Disable timer0 since it can mess with the USB timing. Note that
// this means some functions such as delay() will no longer work.
TIMSK0&=!(1<<TOIE0);

// Clear interrupts while performing time-critical operations
cli();

// Force re-enumeration so the host will detect us
usbDeviceDisconnect();
delayMs(250);
usbDeviceConnect();

// Set interrupts again
sei();
}

/**

  • Main program loop. Scan for keypresses and send a matching keypress
  • event to the host
  • FIXME: currently repeats as fast as it can. Add transition detection
    */
    void loop()
    {
    UsbKeyboard.update();

char key=kpd.get_key();

if (key != '\0') {
UsbKeyboard.sendKeyStroke(KEY_H, MOD_SHIFT_LEFT);
UsbKeyboard.sendKeyStroke(KEY_E);
UsbKeyboard.sendKeyStroke(KEY_L);
UsbKeyboard.sendKeyStroke(KEY_L);
UsbKeyboard.sendKeyStroke(KEY_O);
UsbKeyboard.sendKeyStroke(KEY_SPACE);
UsbKeyboard.sendKeyStroke(KEY_W, MOD_SHIFT_LEFT);
UsbKeyboard.sendKeyStroke(KEY_O);
UsbKeyboard.sendKeyStroke(KEY_R);
UsbKeyboard.sendKeyStroke(KEY_L);
UsbKeyboard.sendKeyStroke(KEY_D);
UsbKeyboard.sendKeyStroke(KEY_ENTER);
//digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle status LED
}

}

/**

  • Define our own delay function so that we don't have to rely on
  • operation of timer0, the interrupt used by the internal delay()
    */
    void delayMs(unsigned int ms)
    {
    for (int i = 0; i < ms; i++) {
    delayMicroseconds(1000);
    }
    }

Please Help me =(

non ho mai usato queste librerie quindi con il codice non so aiutarti ma so che quando windows fa 2 suoni consecutivi vuole dire che non ha riconosciuto il dispositivo...
spero che ti possa essere di aiuto

Grazie Ale, ma non mi da nemmeno l'errore di periferica non riconosciuta.... :astonished: :astonished:

Help ME!!!
PLZ

Caro Marko80

fare "bumping" (cioè continuare a scrivere "help me") è una cosa antipatica che su questo forum non ci piace.

inoltre la tua domanda non specifica che hardware stai utilizzando etc...

ale92 ti ha già risposto che nessuno ha usato quella libreria perciò non ricevi risposte.

hai letto la topic "Aiutateci ad aiutarvi??" li c'è spiegato come aumentare le possibilità di risposta.

Immagino che tu stia utilizzando un usb host shield. ti consiglio di rivolgerti a chi ti ha venduto lo shield per aiuto. se l'hai comprato su ebay mi spiace ma sei solo e abbandonato..

Massimo scusa x tutti gli help me,
ma x la usb shield l'ho costruita da me e con la sola libreria usbKeyboard funziona, purtroppo se la interfaccio con la libreria wire no.
l'hardware che uso è arduino Uno.

mi arrangerò.
Grazie

Ciao, puoi pubblicare i link delle librerie che usi?
Prova inoltre a commentare l'include della Wire o a scambiarle di posto. Spesso capita che una libreria sia richiamata da un'altra libreria e siccome è già definita non viene caricata la seconda volta.

Grazie paolo proverò a fare ciò che mi hai suggerito e ti faccio sapere.

il link della libreria è: http://code.rancidbacon.com/ProjectLogArduinoUSB

Grazie Tante

Paolo ho appena provato a commentare la libreria wire.h ma senza di essa mi da errore in compilazione perchè la libreria I2cKeypad non può funzionare.

Ok, appena posso gli do un'occhiata.

Credo che il problema possa essere la disabilitazione del Timer0. Questo crea incompatibilità tra le due librerie. Potresti provare a cercare su internet una libreria che usa un'altro timer oppure aspettare che qualcuno più competente di me ti dia una mano.
Io non sono ancora in grado di gestire e modificare i timer interni di Arduino.

Grazie Paolo,
Ho notato una cosa, che praticamente è solo l'istruzione:
char key=kpd.get_key();

è solo questa che provoca il non riconoscimento della periferica USB, ma non posso eliminarla perchè è quella che praticamente riceve il dato dal tastierino numerico!
se la commento infatti il programma funziona e la periferica viene riconosciuta regolarmente.

Grazie Tante Paolo