USB Host Shield

Salve,
Ho comprato da poco un Usb Host Shield della Sparkfun, e sono intento a farlo funzionare su un Arduino uno.
Dopo essermi informato su internet, ed aver scricato da github le varie librerie, o proceduto er tentativi a far funzionre il tutto, ma purtroppo sono fermo alla fase di compilazione dello sketch.
Lo sketch e questo:

/*
Example sketch for the Xbox 360 USB library - developed by Kristian Lauszus
For more information visit my blog: http://blog.tkjelectronics.dk/ or
send me an e-mail: kristianl@tkjelectronics.com
*/

#include <XBOXUSB.h>
#include <Usb.h>
#include <avrpins.h>
#include <max3421e.h>
#include <usbhost.h>
#include <usb_ch9.h>
#include <address.h>
#include <printhex.h>
#include <hexdump.h>
#include <message.h>
USB Usb;
XBOXUSB Xbox(&Usb);

void setup() {
  Serial.begin(115200);

  if (Usb.Init() == -1) {
    Serial.print(F("\r\nOSC did not start"));
    while(1); //halt
  }
  Serial.print(F("\r\nXBOX USB Library Started"));
}
void loop() {
  Usb.Task();
  if(Xbox.Xbox360Connected) {
    Xbox.setRumbleOn(Xbox.getButton(L2),Xbox.getButton(R2));
    if(Xbox.getAnalogHat(LeftHatX) > 7500 || Xbox.getAnalogHat(LeftHatX) < -7500 || Xbox.getAnalogHat(LeftHatY) > 7500 || Xbox.getAnalogHat(LeftHatY) < -7500 || Xbox.getAnalogHat(RightHatX) > 7500 || Xbox.getAnalogHat(RightHatX) < -7500 || Xbox.getAnalogHat(RightHatY) > 7500 || Xbox.getAnalogHat(RightHatY) < -7500) {
      if(Xbox.getAnalogHat(LeftHatX) > 7500 || Xbox.getAnalogHat(LeftHatX) < -7500) {
        Serial.print(F("LeftHatX: "));
        Serial.print(Xbox.getAnalogHat(LeftHatX));
        Serial.print("\t");
      }
      if(Xbox.getAnalogHat(LeftHatY) > 7500 || Xbox.getAnalogHat(LeftHatY) < -7500) {
        Serial.print(F("LeftHatY: "));
        Serial.print(Xbox.getAnalogHat(LeftHatY));
        Serial.print("\t");
      }
      if(Xbox.getAnalogHat(RightHatX) > 7500 || Xbox.getAnalogHat(RightHatX) < -7500) {
        Serial.print(F("RightHatX: "));
        Serial.print(Xbox.getAnalogHat(RightHatX));
        Serial.print("\t");
      }
      if(Xbox.getAnalogHat(RightHatY) > 7500 || Xbox.getAnalogHat(RightHatY) < -7500) {
        Serial.print(F("RightHatY: "));
        Serial.print(Xbox.getAnalogHat(RightHatY));
      }
      Serial.println("");
    }

    if(Xbox.buttonPressed) {
      Serial.print(F("Xbox 360 Controller"));
      if(Xbox.getButton(UP)) {
        Xbox.setLedOn(LED1);
        Serial.print(F(" - UP"));
      }
      if(Xbox.getButton(DOWN)) {
        Xbox.setLedOn(LED4);
        Serial.print(F(" - DOWN"));
      }
      if(Xbox.getButton(LEFT)) {
        Xbox.setLedOn(LED3);
        Serial.print(F(" - LEFT"));
      }
      if(Xbox.getButton(RIGHT)) {
        Xbox.setLedOn(LED2);
        Serial.print(F(" - RIGHT"));
      }

      if(Xbox.getButton(START)) {
        Xbox.setLedMode(ALTERNATING);
        Serial.print(F(" - START"));
      }
      if(Xbox.getButton(BACK)) {
        Xbox.setLedBlink(ALL);
        Serial.print(F(" - BACK"));
      }
      if(Xbox.getButton(L3))
        Serial.print(F(" - L3"));
      if(Xbox.getButton(R3))
        Serial.print(F(" - R3"));

      if(Xbox.getButton(L1))
        Serial.print(F(" - L1"));
      if(Xbox.getButton(R1))
        Serial.print(F(" - R1"));
      if(Xbox.getButton(XBOX)) {
        Xbox.setLedMode(ROTATING);
        Serial.print(F(" - XBOX"));
      }

      if(Xbox.getButton(A))
        Serial.print(F(" - A"));
      if(Xbox.getButton(B))
        Serial.print(F(" - B"));
      if(Xbox.getButton(X))
        Serial.print(F(" - X"));
      if(Xbox.getButton(Y))
        Serial.print(F(" - Y"));

      if(Xbox.getButton(L2)) {
        Serial.print(F(" - L2:"));
        Serial.print(Xbox.getButton(L2));
      }
      if(Xbox.getButton(R2)) {
        Serial.print(F(" - R2:"));
        Serial.print(Xbox.getButton(R2));
      }
      Serial.println();
    }
  }
  delay(1);
}

e questo e quello che mi da come errore dopo la compilazione:

In file included from C:\Archivio\arduino-1.0.1\libraries\Usb/Usb.h:43,
                 from C:\Archivio\arduino-1.0.1\libraries\XBOXUSB/XBOXUSB.h:24,
                 from XBOXUSB.cpp:7:
C:\Archivio\arduino-1.0.1\libraries\printhex/printhex.h:15: error: stray '@' in program
In file included from C:\Archivio\arduino-1.0.1\libraries\hexdump/hexdump.h:22,
                 from C:\Archivio\arduino-1.0.1\libraries\Usb/Usb.h:44,
                 from C:\Archivio\arduino-1.0.1\libraries\XBOXUSB/XBOXUSB.h:24,
                 from XBOXUSB.cpp:7:
C:\Archivio\arduino-1.0.1\libraries\printhex/printhex.h:15: error: stray '@' in program
In file included from C:\Archivio\arduino-1.0.1\libraries\message/message.h:22,
                 from C:\Archivio\arduino-1.0.1\libraries\Usb/Usb.h:45,
                 from C:\Archivio\arduino-1.0.1\libraries\XBOXUSB/XBOXUSB.h:24,
                 from XBOXUSB.cpp:7:
C:\Archivio\arduino-1.0.1\libraries\printhex/printhex.h:15: error: stray '@' in program
In file included from XBOXUSB.cpp:14:
C:\Archivio\arduino-1.0.1\libraries\printhex/printhex.h:15: error: stray '@' in program
In file included from C:\Archivio\arduino-1.0.1\libraries\Usb/Usb.h:43,
                 from C:\Archivio\arduino-1.0.1\libraries\XBOXUSB/XBOXUSB.h:24,
                 from XBOXUSB.cpp:7:
C:\Archivio\arduino-1.0.1\libraries\printhex/printhex.h:1: error: expected constructor, destructor, or type conversion before '(' token

Chiedo aiuto per capire cosa sbaglio, o cosa mi manca per il corretto funzionamento.
Grazie,
Brusertv

E' disponibile una nuova libreria per l'USB Host Shield --> https://github.com/felis/USB_Host_Shield_2.0 C'è anche la versione dell'IDE aggiornata: 1.0.3 --> http://arduino.cc/en/Main/Software

Hai scaricato e installate tutte le librerie incluse nello sketch? Ciao Uwe

Salve,
le librerie le ho scaricate tutte dal primo link indicato da PaoloP, l’ide mia e una 1.0.1, fa tanta differenza per quello che devo fare?
In secondo luogo le librerie indicate sullo scketch le ho scaricate tutte, il fatto e’ che all’inizio lo sketch prevedeva solo “#include <XBOXUSB.h>”, ho aggiunto io le altre via via che me le indicava nella finestra dell’ide come errore dopo la compilazione.
Grazie,
Brusertv

Salve, nessuno ha un suggerimento? Grazie, Brusertv

Salve, io non mi sono ancora arreso, ma lo sto pensando. Nessuno che abbia avuto esperienza con Usb host shield della sparkfun? Nessuno che possa ( o abbia voglia...) darmi una mano a capire dove sbaglio? Grazie, Brusertv

Salve,
Ho ricontrollato quello che avevo fatto, e questo e’ il risultato.
Questo e’ il programma che ho scaricato e che voglio far funzionare per provare USB Host Shield:

/*
 Example sketch for the Xbox 360 USB library - developed by Kristian Lauszus
 For more information visit my blog: http://blog.tkjelectronics.dk/ or 
 send me an e-mail:  kristianl@tkjelectronics.com
 */

#include <XBOXUSB.h>
USB Usb;
XBOXUSB Xbox(&Usb);

void setup() {
  Serial.begin(115200);

  if (Usb.Init() == -1) {
    Serial.print(F("\r\nOSC did not start"));
    while(1); //halt
  }  
  Serial.print(F("\r\nXBOX USB Library Started"));
}
void loop() {
  Usb.Task();
  if(Xbox.Xbox360Connected) {
    Xbox.setRumbleOn(Xbox.getButton(L2),Xbox.getButton(R2));
    if(Xbox.getAnalogHat(LeftHatX) > 7500 || Xbox.getAnalogHat(LeftHatX) < -7500 || Xbox.getAnalogHat(LeftHatY) > 7500 || Xbox.getAnalogHat(LeftHatY) < -7500 || Xbox.getAnalogHat(RightHatX) > 7500 || Xbox.getAnalogHat(RightHatX) < -7500 || Xbox.getAnalogHat(RightHatY) > 7500 || Xbox.getAnalogHat(RightHatY) < -7500) {
      if(Xbox.getAnalogHat(LeftHatX) > 7500 || Xbox.getAnalogHat(LeftHatX) < -7500) {
        Serial.print(F("LeftHatX: ")); 
        Serial.print(Xbox.getAnalogHat(LeftHatX));
        Serial.print("\t");
      } 
      if(Xbox.getAnalogHat(LeftHatY) > 7500 || Xbox.getAnalogHat(LeftHatY) < -7500) {
        Serial.print(F("LeftHatY: ")); 
        Serial.print(Xbox.getAnalogHat(LeftHatY));
        Serial.print("\t");
      } 
      if(Xbox.getAnalogHat(RightHatX) > 7500 || Xbox.getAnalogHat(RightHatX) < -7500) {
        Serial.print(F("RightHatX: ")); 
        Serial.print(Xbox.getAnalogHat(RightHatX));
        Serial.print("\t");      
      } 
      if(Xbox.getAnalogHat(RightHatY) > 7500 || Xbox.getAnalogHat(RightHatY) < -7500) {
        Serial.print(F("RightHatY: ")); 
        Serial.print(Xbox.getAnalogHat(RightHatY));  
      }
      Serial.println("");
    }

    if(Xbox.buttonPressed) {
      Serial.print(F("Xbox 360 Controller"));
      if(Xbox.getButton(UP)) {
        Xbox.setLedOn(LED1);
        Serial.print(F(" - UP"));
      }      
      if(Xbox.getButton(DOWN)) {
        Xbox.setLedOn(LED4);
        Serial.print(F(" - DOWN"));
      }
      if(Xbox.getButton(LEFT)) {
        Xbox.setLedOn(LED3);
        Serial.print(F(" - LEFT"));
      }
      if(Xbox.getButton(RIGHT)) {
        Xbox.setLedOn(LED2);
        Serial.print(F(" - RIGHT"));
      }

      if(Xbox.getButton(START)) {
        Xbox.setLedMode(ALTERNATING);
        Serial.print(F(" - START"));
      }
      if(Xbox.getButton(BACK)) {
        Xbox.setLedBlink(ALL);
        Serial.print(F(" - BACK"));
      }
      if(Xbox.getButton(L3))
        Serial.print(F(" - L3"));
      if(Xbox.getButton(R3))
        Serial.print(F(" - R3"));

      if(Xbox.getButton(L1))
        Serial.print(F(" - L1"));
      if(Xbox.getButton(R1))
        Serial.print(F(" - R1"));
      if(Xbox.getButton(XBOX)) {
        Xbox.setLedMode(ROTATING);
        Serial.print(F(" - XBOX"));        
      }

      if(Xbox.getButton(A))
        Serial.print(F(" - A"));
      if(Xbox.getButton(B))
        Serial.print(F(" - B"));
      if(Xbox.getButton(X))
        Serial.print(F(" - X"));
      if(Xbox.getButton(Y))
        Serial.print(F(" - Y"));

      if(Xbox.getButton(L2)) {
        Serial.print(F(" - L2:"));
        Serial.print(Xbox.getButton(L2));
      }
      if(Xbox.getButton(R2)) {
        Serial.print(F(" - R2:"));
        Serial.print(Xbox.getButton(R2));
      }
      Serial.println();        
    } 
  }
  delay(1);
}

E questo e quello che mi dice l’ide di arduino aver fatto verifica/comilazione:

In file included from xboxusb_original.ino:7:
C:\Documents and Settings\Scanta\Documenti\Arduino\libraries\XBOXUSB/XBOXUSB.h:24:17: error: Usb.h: No such file or directory
In file included from xboxusb_original.ino:7:
C:\Documents and Settings\Scanta\Documenti\Arduino\libraries\XBOXUSB/XBOXUSB.h:99: error: expected class-name before '{' token
C:\Documents and Settings\Scanta\Documenti\Arduino\libraries\XBOXUSB/XBOXUSB.h:101: error: expected `)' before '*' token
C:\Documents and Settings\Scanta\Documenti\Arduino\libraries\XBOXUSB/XBOXUSB.h:130: error: ISO C++ forbids declaration of 'USB' with no type
C:\Documents and Settings\Scanta\Documenti\Arduino\libraries\XBOXUSB/XBOXUSB.h:130: error: expected ';' before '*' token
C:\Documents and Settings\Scanta\Documenti\Arduino\libraries\XBOXUSB/XBOXUSB.h:132: error: 'EpInfo' does not name a type
xboxusb_original:8: error: 'USB' does not name a type
xboxusb_original:9: error: 'Usb' was not declared in this scope
xboxusb_original.ino: In function 'void setup()':
xboxusb_original:14: error: 'Usb' was not declared in this scope
xboxusb_original.ino: In function 'void loop()':
xboxusb_original:21: error: 'Usb' was not declared in this scope

Quindi per ricordare un po’ di di cose aggiungo:
Ho un arduino uno, l’ide e un 1.0.3, ho scaricato le librerie e messe nei posti giusti(…credo…).
Quindi attendo un vostro suggerimento.
Grazie,
Brusertv

Lì ti dice che non trova il file Usb.h. Ma hai copiato tutti i file?

Si, la libreria usb.h c'e, scaricata il giorno che ho scaricato il programmma...

Un esempio allegato alla lib ti viene compilato oppure no?

Non ci sono esempi allegati a questa libreria. I file li ho scaricati dallo stesso sito: le librerie le ho scaricate qui https://github.com/felis/USB_Host_Shield_2.0, e l'esempio qui https://github.com/felis/USB_Host_Shield_2.0/tree/master/examples/Xbox/XBOXUSB, prendendo spunto da questo sito http://www.circuitsathome.com/mcu/wireless-xbox360-controller-support-for-usb-host-2-0-library.

Veramente ci sono. C’è una cartella examples con 4 esempi dentro. Se non li vedi non hai scompattato correttamente la lib.
Da GitHub - felis/USB_Host_Shield_2.0: Revision 2.0 of USB Host Library for Arduino.
clicchi su “Zip” e prelevi l’intero archivio. Scompatti. Rinomini la cartella in qualcosa che non contenga il numero 2.0 (io ho messo “USB_Host_Shield”). Copi la cartella che si è generata dentro a /libraries.
Aprendo l’IDE, se scorri su Esempi/USB_Host_Shield dovresti vedere gli esempi. Se sei su Linux potresti avere il bug che non ti scorre il menu in basso per cui premi su “Apri” e cerca l’esempio in USB_Host_Shield/Examples/Xbox/XBOXUSB e carichi il file .ino.
A me ha compilato senza problemi.

Mi sorge una domanda:
La cartella \libraries quale?
Quella in C:\Archivio\arduino-1.0.3\libraries, o quella in C:\Documents and Settings\Scanta\Documenti\Arduino\libraries?

brusertv: Mi sorge una domanda: La cartella \libraries quale? Quella in C:\Archivio\arduino-1.0.3\libraries, o quella in C:\Documents and Settings\Scanta\Documenti\Arduino\libraries?

Tutte e due (ovvero o l'una o l'altra). Ma è meglio la seconda perchè, nel caso cambiassi IDE, ti ritroveresti comunque le librerie aggiuntive senza doverle ricopiare. Inoltre non rischi di mischiare le librerie originali con altre di terze parti.

Ok, capito. Cosi' effettivamente compila e carica, ma se non erro quando il programma gira dovrebbe darmi dei messaggi in seriale, ogni volta che premo un pulsante del controller giusto? Mi da solo il messaggio "XBOX USB Library Started", ma nulla piu'. Cosa sbaglio ancora?

PaoloP: Ma è meglio la seconda perchè, nel caso cambiassi IDE, ti ritroveresti comunque le librerie aggiuntive senza doverle ricopiare. Inoltre non rischi di mischiare le librerie originali con altre di terze parti.

Concordo.

Forse ho capito. Non da segni di vita, in quanto il controller non si accende. Quando collego il controller all'USB host shield, il led lampeggia per un attimo e poi si spegne (teoricamente dovrebbe stare acceso...). Il controller funziona collegato direttamente al pc, che sia un problema dovuto al connettore dell' USB host shield? Grazie, Brusertv

Collegandolo ad un altro computer/sistema l'host ha lo stesso comportamento?

Mi stai chiedendo se ha lo stesso funzionamento, il controller o l'USB host shield?

brusertv: Mi sorge una domanda: La cartella \libraries quale? Quella in C:\Archivio\arduino-1.0.3\libraries, o quella in C:\Documents and Settings\Scanta\Documenti\Arduino\libraries?

io consiglio la terza via, che poi e' quella che si sta usando di default sul nuovo ide 1.5, cioe' di tenere "libraries" nella cartella degli sketch, cosi' non solo non la perdi quando cambi ide, ma nemmeno se reinstalli il sistema operativo