Tu n'auras besoin que d'un USB host shield, pour brancher la manette.
En gros tu as trois modes en USB :
- le mode HOST (comme sur un PC par exemple) est la pour alimenter et accueillir des périphériques USB et dialoguer avec
- le mode DEVICE (comme une manette, une clé USB...) qui est alimenté par le host et dialogue avec lui.
- le mode OTG (on the go, comme un téléphone, ou certaines cartes embarquées comme l'arduino DUE, la STM32F4 discovery...) qui est le mode le plus compliqué, car c'est un peu un mélange des deux, il peut se comporter à la fois comme host et device (comme ton téléphone, tu le branches sur ton PC, il se comporte comme un device, il est alimenté par le PC pour charger et peut être vu comme une caméra ou un périphérique de stockage, mais si tu lui branches une manette ou une clé USB, il se comporte comme un host.
Et sur la plupart des cartes arduino (la seule exception à ma connaissance étant l'arduino DUE), le port USB ne sert qu'a programmer le microcontrôleur (ce sont donc des devices USB). Pour l'utiliser en tant que HOST, il n'y a pas beaucoup de solutions :
- Utiliser le USB host shield, qui contient un circuit intégré spécialisé ou un microcontrôleur plus performant pour gerer le mode host
- Utiliser un microcontrôleur plus performant que l'AtMega 328 (comme les microcontrôleurs ARM de l'arduino DUE ou de la STM32F4 discovery), qui ont une fonction host intégrée.
Pour l'arduino, AtMega 168 ou 328 ne fait pas une grosse différence, c'est une question de mémoire, et pour ce que tu en feras, les deux en ont largement assez.
Par contre, il te faudra choisir 5v ou 3.3v en fonction de l'UART que tu vas utiliser.