Table des matières:

Contrôleur Lapcade Arcade : 6 étapes (avec photos)
Contrôleur Lapcade Arcade : 6 étapes (avec photos)

Vidéo: Contrôleur Lapcade Arcade : 6 étapes (avec photos)

Vidéo: Contrôleur Lapcade Arcade : 6 étapes (avec photos)
Vidéo: Rinyu - Controller (Remix) Feat. Locko 2024, Novembre
Anonim
Contrôleur d'arcade Lapcade
Contrôleur d'arcade Lapcade

Je ne suis pas vraiment un joueur. Quand j'étais enfant, j'étais plus intéressé à voir comment ils fonctionnaient qu'à les jouer. Je peux compter sur une main le nombre de jeux d'arcade auxquels j'ai joué régulièrement. Cela étant dit, il serait facile pour quelqu'un de trouver étrange que je prenne le temps de construire un contrôleur d'arcade. Cependant, c'est l'un de mes projets préférés à ce jour. En plus d'être difficile à concevoir, coder et construire, c'est aussi un rappel d'une ère passée de boutons mécaniques et de joysticks robustes.

L'époque de l'arcade est révolue, mais vous pouvez toujours avoir la sensation d'un jeu d'arcade classique dans votre propre salon. Alors, je vous présente ici la Lapcade. Si vous êtes comme moi et que vous aimez construire des choses plus que jouer, vous aimerez peut-être cette version. Si vous avez des questions ou des suggestions non incluses dans la section "idées pour la version 2" ci-dessous, veuillez laisser un commentaire.

Étape 1: Aperçu

Aperçu
Aperçu
Aperçu
Aperçu

Quelle est cette chose?

Tout d'abord, veuillez noter ce que le Lapcade n'est pas:

  • Ce n'est pas une console de jeu.
  • Il n'a pas de jeux et n'a pas la possibilité de charger et de jouer à des jeux.
  • Il ne se connecte pas à un téléviseur ou à un moniteur.

Le Lapcade est un clavier Bluetooth. Ni plus ni moins.

J'en parle parce qu'il y a eu une certaine confusion autour de ce point. J'ai eu beaucoup de questions sur les jeux qui peuvent être chargés dessus et le type d'interface vidéo qu'il utilise - il ne peut pas et ne le fait pas ! Cela dépend entièrement du PC auquel vous le connectez et, à cet égard, le ciel est la limite. Si votre appareil peut accepter un clavier Bluetooth, le Lapcade devrait fonctionner avec. Je ne l'ai pas essayé, mais j'ai vu d'autres projets utilisant l'EZ-Key (décrit ci-dessous) connecté à des appareils portables. Donc, théoriquement, vous pouvez connecter cet appareil à n'importe quel ordinateur exécutant Windows, Linux, ChromeOS, MAC, etc. ainsi que Raspberry Pi, Android, iOS et autres prenant en charge Bluetooth v2.1. Cependant, une modification des codes clés peut être requise.

Pré-version 1

À l'origine, j'ai trouvé un produit appelé Adafruit Bluefruit EZ-Key Bluetooth HID (Périphérique d'interface humaine - pensez au clavier) qui me permettrait de connecter des boutons cliquables familiers et d'envoyer des frappes comme un clavier. Lorsque j'ai construit pour la première fois un contrôleur basé sur l'EZ-Key, j'ai suivi un ensemble d'instructions pour créer un contrôleur simple et direct et cela a très bien fonctionné. J'ai utilisé le contrôleur dans un cadre en bois lourd sans problème pendant quelques mois. Cependant, vous êtes limité à 12 entrées et il n'y a aucun moyen de changer le code clé transmis par l'appareil sans reprogrammer les broches d'entrée EZ-Key.

Comme j'utilisais mon centre multimédia Kodi pour afficher les jeux installés, je voulais basculer entre le contrôle du centre multimédia et le jeu sans avoir à utiliser plusieurs contrôleurs/télécommandes. Je voulais aussi que l'appareil s'ajuste pour que mon fils gaucher puisse l'utiliser à sa guise.

J'utilisais également 4 piles AA pour alimenter l'appareil et, à la sortie de la boîte, il ne semblait pas avoir de mode d'alimentation faible. Les piles seraient aspirées en un jour ou deux même si elles n'étaient pas utilisées.

Ainsi, à la demande d'un de mes amis, j'ai décidé de créer une version programmable du même contrôleur qui avait des changements de mode rapides, me permettrait d'utiliser le même appareil pour contrôler plusieurs applications, pourrait également être "inversé" pour la main gauche utiliser et était dans un étui pour ordinateur portable qui était beaucoup moins que ma solution actuelle de 10 lb.

Il était temps pour une mise à niveau.

Objectifs du projet de conception de la version 1:

  • Souple
  • Rechargeable
  • Pour les gauchers et les droitiers
  • Pas de cordons
  • Poids léger

Je voulais que ce nouveau design soit flexible. Les commandes doivent être modifiables à la volée sans avoir à reprogrammer les composants à chaque fois qu'un test ou un changement doit être effectué. Cela signifiait qu'il devait y avoir une interface sur le contrôleur pour choisir les « modes » de fonctionnement. Chaque position de bouton et de joystick devrait être associée à des codes de touche différents. Ces mêmes commandes devraient également être utilisées pour sélectionner les différents modes.

L'EZ-Key n'était pas directement programmable en temps réel, la prochaine solution serait donc d'utiliser un contrôleur comme un Arduino pour gérer les fonctionnalités. L'EZ-Key serait uniquement utilisé pour transmettre les codes clés au PC via Bluetooth. J'ai choisi l'Arduino Pro Mini en raison de sa compatibilité directe avec l'UNO (avec lequel j'avais déjà de l'expérience) et de sa taille compacte.

Je ne voulais pas m'occuper de batteries avec cette nouvelle box comme je l'avais fait avec le prédécesseur du Lapcade, j'ai donc choisi d'utiliser une batterie rechargeable Lithium Polymère et un chargeur/carte d'alimentation. Cela signifiait que je pouvais simplement utiliser un chargeur USB standard. Cela signifiait également que je n'aurais pas à ouvrir le boîtier à chaque fois que les piles étaient épuisées. L'EZ-Key et le PowerBoost 500C ont tous deux des indicateurs qui devaient être transférés sur le dessus du contrôleur pour l'état d'appairage et l'indication de batterie faible. J'ai ajouté des LED à la conception afin que je puisse refléter ces indicateurs d'état pratiques à l'utilisateur pendant le fonctionnement.

Au fur et à mesure que les tests de ma conception mûrissaient, j'ai découvert que plusieurs de mes idées originales n'étaient pas comme je l'avais prévu. Par exemple, l'indicateur LBO sur le PowerBoost ne fonctionne pas comme prévu lorsqu'il est lié à un microcontrôleur. Il permettra au courant de traverser la masse commune de la batterie pendant que l'appareil est "éteint" ou désactivé, le voyant LBO s'allumera et restera allumé. D'autres sur le forum Adafruit avaient également rencontré ce problème et offraient une meilleure solution pour échantillonner la tension de la batterie directement sur une entrée analogique. Une fois que la tension chute à un certain niveau, il est temps d'informer l'utilisateur que la batterie est sur le point de s'éteindre.

Étape 2: ce dont vous avez besoin

Liste des pièces électroniques

Cela a fini par devenir une construction assez compliquée. Vous n'êtes pas obligé d'utiliser les mêmes pièces que moi, mais si vous utilisez une pièce de remplacement, assurez-vous de comprendre comment elle interagira avec les autres circuits et le code. Bien que je sois heureux de proposer des suggestions, je ne peux pas m'empêcher de dépanner le code ou les problèmes pour différentes configurations.

1 Arduino Pro Mini 5V - J'aime le Pro car il est compact. Vous pouvez utiliser n'importe quelle carte compatible avec la broche/interruption Uno avec le code fourni

1 HID Bluetooth Adafruit Bluefruit EZ-Key - Comme décrit ci-dessus, il s'agit du HID Bluetooth qui permet de transmettre les codes clés au PC hôte.

1 MCP23017 - Extension de ports d'entrée/sortie i2c 16 - Cette puce est utilisée pour ajouter 16 entrées supplémentaires à l'Arduino via le protocole de communication I2C

1 Adafruit PowerBoost 500 + Charger - C'est la carte de contrôle d'alimentation pour alimenter le Lapcade et charger le LiPo

1 batterie Litium Polymer (j'ai utilisé 2500mAh, mais vous pouvez utiliser une capacité supérieure/inférieure)

1 Joystick d'arcade à 8 voies - Veuillez consulter la section "Réflexions pour la version 2" ci-dessous concernant les joysticks

9 boutons-poussoirs d'arcade - Couleurs et sérigraphies assorties

2 boutons poussoirs momentanés lumineux - J'ai utilisé ces 2 boutons pour les boutons Center 4 et 5 et proviennent d'Adafruit: Rouge (Centre 4), Bleu (Centre 5)

1 bouton-poussoir de verrouillage lumineux que j'ai utilisé pour le bouton d'alimentation d'Adafruit: vert

2 LED Utilisées pour référencer le signal d'appairage et la batterie faible. J'ai utilisé deux pièces RadioShack 2760270 et 2760271

1 écran LCD 16x2

1 Sac à dos LCD I2C/SPI - Utilisé pour la communication I2C vers l'écran 16x2.

1 Câble d'extension USB à montage sur panneau - Utilisé pour étendre le connecteur USB micro-b du PowerBoost à la paroi de l'armoire.

1 PCB de grande taille Adafruit Perma-Proto - Pas nécessaire mais rend le montage permanent tellement plus facile.

5 résistances 220 Ohms

7 résistances 1K Ohm

2 résistances 2.2K Ohm

1 résistance 4.7K Ohm

18 Connecteurs femelles n° 10 - Pour la connexion aux contacts du bouton d'arcade. Recommandé par rapport à la soudure car les boutons finiront par s'user.

Fil de raccordement de calibre 22 - J'ai utilisé un fil de raccordement solide plutôt que toronné afin de permettre une gestion autonome des fils. Ceci était purement à des fins de démonstration et n'est pas recommandé car le fil solide est cassant et sujet à la rupture.

Les éléments suivants ne sont pas nécessaires mais faciliteront le montage et, si vous grillez un composant, faciliteront le remplacement:

  • Prise IC - pour puces de 0,3" à 28 broches
  • Prise IC - pour puces 0.6" 28 broches
  • En-tête femelle 0,1" (au moins 1 en-tête à 36 broches)

Pièces de l'armoire:

  • 3 panneaux de bouleau de 12 x 24 1/8 po
  • 1 panneau acrylique transparent de 12 x 24 1/8 pouce

Des dossiers:

  • Lapcade V1.xlsx - La feuille de calcul mentionnée ci-dessous qui contient les connexions du circuit.
  • LapcadeV1-code.zip - Fichier Zip contenant le code Arduino écrit pour ce projet.
  • Lapcade_v1.zip - Fichier zip contenant les dessins svg de l'armoire.
  • LapcadeV1-Circuit_Diagram_Large.zip - Fichier zip contenant une version haute résolution du schéma de circuit fritzing illustré ci-dessous.

Liens vers d'autres ressources:

  • Documentation Adafruit Bluefruit EZ-Key
  • Adafruit PowerBoost 500 + Documentation
  • Documentation du sac à dos LCD I2C/SPI
  • Documentation du prolongateur de port I2C MCP23017
  • Bibliothèque Arduino Adafruit MCP23017

Étape 3: Assemblage - Le Cabinet

Assemblée - Le Cabinet
Assemblée - Le Cabinet
Assemblée - Le Cabinet
Assemblée - Le Cabinet
Assemblée - Le Cabinet
Assemblée - Le Cabinet
Assemblée - Le Cabinet
Assemblée - Le Cabinet

Je voulais avoir une boîte très légère qui pourrait également prendre un coup. Sans devenir trop exotique avec les matériaux, léger est égal à mince et mince est généralement égal à cassant. Le principal utilisateur du Lapcade serait probablement mon jeune fils qui aime "appuyer" sur les boutons et "naviguer" sur le joystick avec un enthousiasme extrême. Bien qu'il soit doué pour ne pas laisser tomber les choses, il a réussi à user les micro-interrupteurs industriels d'un joystick en quelques mois.

Pour surmonter ce problème et puisque le Lapcade mesure 20 de large, ma conception a ajouté deux nervures verticales qui fixent le haut et les côtés gauche et droit. Pendant l'ajustement à sec, la conception a pu supporter 70 lb de livres placés dessus. Une fois collé, la boîte est devenue encore plus durable. Après avoir reçu les matériaux coupés, j'ai d'abord desserré tous les panneaux ensemble pour m'assurer qu'ils fonctionnaient. Je les ai ensuite légèrement poncés et saupoudrés d'air. J'ai utilisé de la colle à bois pour attacher les pièces ensemble.

Les livres sur les photos ci-dessous ont été placés pour faire pression sur les pièces fraîchement collées jusqu'à ce qu'elles prennent. Une fois la colle durcie, j'ai lissé les bords poncés. Ma conception a intentionnellement décalé les panneaux afin qu'ils dépassent un peu dans les coins. Cela me permettrait d'arrondir les coins pendant le ponçage sans trop entrer dans le joint.

Après avoir nettoyé les surfaces, j'ai ensuite appliqué plusieurs couches de polyuréthane - permettant de durcir entre les couches. Le résultat était une boîte en bois légère avec un couvercle inférieur en acrylique. Je voulais à l'origine une boîte entièrement transparente mais lorsqu'il m'a envoyé les pièces "test" en bouleau, j'ai immédiatement changé d'avis. Ce n'était pas seulement plus léger, c'était un bon retour à l'idée du jeu en armoire. Les fichiers svg sont ci-dessous.

Remarque: il s'agit d'un dessin multicouche et chaque couche représente un ensemble de coupes sur une feuille de matériau. Lorsque vous envoyez une impression à votre massicot, assurez-vous que toutes les autres couches sont masquées avant de couper.

Une autre note: lorsque j'ai dessiné la zone pour l'écran LCD, j'ai utilisé un écran que j'avais sous la main pour les mesures. Entre le moment où j'ai fait le dessin et le montage ultérieur des pièces dans le boîtier, j'avais utilisé l'écran LCD d'origine dans un autre projet et commandé un remplacement. Il s'avère que les trous de montage du second étaient légèrement différents de l'original et se sont retrouvés non alignés. Veillez donc avant de couper votre matériau à vérifier que les pièces que vous avez correspondent aux trous du dessin.

Une troisième note: je n'ai pas inclus de découpe pour le cordon de chargement USB dans le dessin original simplement parce que je ne savais pas où je voulais le mettre afin qu'il n'interfère pas avec l'utilisation. J'ai ensuite découpé les trous sur le côté gauche très près de l'endroit où vous voyez le mot "Lapcade" dans les images ci-dessous. La version 2 aura le port de charge dans une position encore différente.:)

Étape 4: Assemblage - Électronique

Assemblage - Electronique
Assemblage - Electronique
Assemblage - Electronique
Assemblage - Electronique
Assemblage - Electronique
Assemblage - Electronique
Assemblage - Electronique
Assemblage - Electronique

Jetons d'abord un coup d'œil au schéma de câblage ci-dessus.

La première chose à noter ici est que les rails d'alimentation et de masse de la planche à pain. Les rails avec la ligne bleue sont la masse (-) et les rails avec la ligne rouge sont l'alimentation (+). C'est standard mais j'en prends note car la ligne commune du joystick (fil noir) est connectée à l'alimentation et non à la masse. Dans Fritzing, j'ai utilisé la couleur du fil du joystick plutôt que la couleur de la convention et j'ai pensé que cela pourrait causer une certaine confusion - il vaut donc mieux éviter cela.

Connexions de composants

Plutôt que d'essayer d'énoncer ici chaque connexion sous forme longue (la broche analogique Arduino 0 passe par une résistance de 220 ohms à la broche PowerBoost Bat), j'ai créé une feuille de calcul qui contient toutes les connexions du point de vue du composant. Ainsi, sur l'onglet Arduino de la feuille de calcul, vous verrez APM A0 -> 2.2K OHM -> PB Bat et sur l'onglet PowerBoost, vous verrez PB BAT -> 2.2K OHM -> APM A0. Veuillez consulter la section des ressources ci-dessous pour tous les fichiers associés à ce projet.

Une autre remarque concernant la feuille de calcul est que certains appareils affichent deux colonnes de connexion. C'est pour montrer plus d'une connexion à une broche. Par exemple, chacune des connexions du joystick, à l'exception du fil commun, utilise une résistance de rappel pour s'assurer que l'extension de port reçoit un signal haut ou bas solide. Pour montrer cela pour Joystick 2, vous verrez deux colonnes pour la connexion, l'une étant pour le fil du joystick à la broche MCP 21 et l'autre pour une connexion de la broche 21 via une résistance à la terre. Je suis sûr qu'il existe de meilleures façons de documenter cela, mais je crains que vous ne soyez coincé avec mes façons de faire les choses sur celui-ci.:)

Chacun des boutons d'arcade a un contact commun (com), un contact normalement ouvert (no) et normalement fermé (nc). Pour chacun de ces boutons, j'utilise des connexions com et nc.

Étape 5: Coder

Code
Code

D'abord et avant tout, je dois donner le crédit là où c'est dû. Je me suis beaucoup appuyé sur l'article suivant pour coder le Lapcade:

learn.adafruit.com/convert-your-model-m-keyboard-to-bluetooth-with-bluefruit-ez-key-hid Un merci spécial à Benjamin Gould pour un projet bien écrit et documenté !

Ainsi, au cœur de ce projet se trouve un clavier. Du point de vue du PC, le Lapcade est simplement un clavier connecté via Bluetooth, ce à quoi l'EZ-Key est si doué. Il prend les protocoles, les horaires et les codes Bluetooth compliqués et les encapsule de sorte que tout ce que j'ai à faire avec l'arduino est de lui envoyer des codes clés. Pour ce faire, j'ai utilisé les cartes de code du projet ci-dessus et mes propres tableaux pour créer des modes opérationnels. Chaque mode change ce que le même bouton fait sur le Lapcade et ce qui est envoyé au PC. Il existe trois modes de fonctionnement "intégrés" et tous les modes après ceux-ci sont des modes d'application.

Modes de fonctionnement

Ce qui suit résume les modes de fonctionnement du Lapcade:

  1. Démarrage - Ce mode vérifie la connectivité avec le PC et définit les variables de démarrage. Si l'EZ-Key n'est pas jumelé avec un PC, il passe en mode de jumelage
  2. Couplage - Dans ce mode, l'EZ-Key attend d'être couplé à un PC.
  3. Sélection de mode - Ce mode permet à l'utilisateur de sélectionner le mode d'application à utiliser. Aucun code clé n'est envoyé au PC dans ce mode. Il existe également des sélections de mode rapide basées sur le mode d'application précédent. Par exemple, en appuyant sur le mode puis sur le bouton du joueur deux en mode Mame player 1, il suffit de changer de mode sans avoir à rechercher et à sélectionner Mame Player 2 sur l'écran.

Modes d'application

Les modes d'application sont utilisés pour envoyer les codes clés appropriés au PC en fonction de l'application dans laquelle se trouve l'utilisateur. Par exemple, en mode Kodi, la touche d'action 2 envoie "P" qui est une pause. Dans Mame, ce même bouton envoie la touche Alt gauche. Si l'on voulait utiliser le contrôleur pour jouer à Minecraft pour le PC, il suffirait d'ajouter les cartes de réseau appropriées.

Chaque application doit être définie dans 4 tableaux de données.

  • mode - Ce tableau contient le texte qui sera présenté à l'écran pour chaque mode. Pour utiliser la deuxième ligne de l'affichage, placez simplement un ~ dans le tableau comme saut de ligne.
  • keyModes[14] - Ce tableau matriciel contient les codes clés envoyés au PC. Chaque ligne de 14 éléments représente des boutons individuels pour les mappages de keycode.
  • keyModifiers[14] - Ce tableau matriciel contient les modificateurs de code pour chaque frappe, par exemple en maintenant la touche Maj enfoncée.
  • quickMode[3] - Ce tableau matriciel contient le modèle de sélection de mode rapide pour le mode actuel.

Opération de base

Lorsque le système est allumé, il passe en mode de démarrage où l'état de la connexion Bluetooth est vérifié et affiché à l'utilisateur. L'Arduino obtient l'état de l'EZ-Key en comptant et en chronométrant les impulsions de la broche L1 de l'EZ-Key. Il existe quatre sous-états pour le mode de démarrage:

  • Couplage - L'EZ-Key est en mode de couplage actif en attente de connexion à un appareil.
  • Couplé mais non connecté - L'EZ-Key a déjà été couplée mais n'est pas actuellement connectée à l'appareil hôte.
  • Couplé et connecté - L'EZ-Key est couplé et la connexion a été établie avec l'hôte. À ce stade, le système passera à la sélection de mode.
  • État inconnu - L'EZ-Key renvoie un code inconnu ou il y a une interférence de signal qui produit un modèle de signal inconnu. Le système tiendra et informera l'utilisateur. Doit redémarrer si cela se produit.

Si le système est couplé mais ne peut pas se connecter au PC, le système restera en état de connexion en mode de démarrage. Si l'utilisateur maintient le bouton d'échappement enfoncé tout en allumant l'appareil, il ignorera la vérification de la connexion Bluetooth et passera à la sélection du mode.

Si le système n'a pas déjà été jumelé, le mode de démarrage sera remplacé par le mode de jumelage. Dans cet état, le système annoncera qu'il est disponible pour l'appairage. Une fois qu'il est découvert et connecté par un hôte, il passe à la sélection de mode. L'appareil peut être dissocié dans Mode Select en appuyant sur le bouton Action 1.

Dans la sélection de mode, les actions du joystick vers le haut et vers le bas vous permettront de parcourir les modes d'application disponibles sur l'écran LCD. Pour sélectionner l'un des modes, appuyez sur le bouton Entrée (centre 5).

Une fois dans un mode d'application, chacun des boutons et le joystick enverront des codes de touches selon les mappes de touches spécifiées dans les quatre tableaux comme décrit ci-dessus.

Modes rapides

Une fois qu'un mode d'application a été sélectionné, sa définition de mode rapide est définie. En termes simples, les modes rapides sont les modes d'application sélectionnables par les trois premiers boutons centraux (Centre 1-3). Ces trois boutons correspondent à l'élément du tableau dans la matrice.

Par exemple, dans la configuration actuelle, lors de l'utilisation de Mame en mode joueur 1 (mode 4 ou le cinquième mode défini), puis en appuyant sur le bouton mode puis le bouton joueur deux charge l'élément de tableau quickmode [4][1] (Arduino utilise 0 indexation du tableau de base) qui est 5. Le système passe alors au mode d'application 5 qui est Mame, joueur 2.

Étape 6: Idées pour la version 2

Affichage des boutons - Je suppose que vous ne pouvez pas tout planifier, mais il y a une idée de conception que j'aurais aimé avoir tôt pour la première version - des panneaux LCD à boutons individuels. Il est devenu clair très rapidement après la construction que le simple fait de savoir dans quel mode vous vous trouvez ne signifie pas que vous vous souvenez de ce que fait chaque bouton - surtout après vous en être éloigné pendant quelques jours ou quelques mois. J'aurais vraiment aimé avoir ajouté une sorte de petit affichage sur ou au-dessus de chaque bouton qui montrait quelle est son action actuelle. Celui-ci est en haut de ma liste pour la version 2.

Joystick à 4 ou 8 voies - Une autre chose qui est devenue claire une fois que j'ai commencé à utiliser le joystick était que les anciens jeux n'étaient pas destinés à utiliser des joysticks à 8 voies. Le cas d'espèce est pac-man. Depuis la construction de ce contrôleur, j'ai découvert qu'il existe des joysticks capables de passer mécaniquement de 4 voies à 8 voies. Oui, celui-ci est sur la liste et si vous envisagez de jouer à des jeux d'arcade classiques, passez simplement à celui qui est modifiable. Bien sûr, assurez-vous de tenir compte des changements de câblage et de programmation en fonction du joystick avec lequel vous vous retrouvez. Voici quelques fournisseurs de commandes d'arcade classiques:

  • https://www.ultimarc.com/controls.html
  • https://groovygamegear.com/webstore/index.php?main…

Boutons "Flipper" des côtés droit et gauche - La version 2 ajoutera définitivement un bouton chacun sur les côtés gauche et droit de l'armoire. Une utilisation possible sera pour les flippers.

Autres contrôles - J'étudie la viabilité d'ajouter d'autres contrôles courants comme une boule de commande et/ou un spinner à la prochaine version. Étant donné que l'EZ-Key est capable de transmettre les coordonnées de la souris, cela ne devrait pas être trop difficile.

Programmation embarquée - La prochaine version doit avoir la capacité d'ajouter de nouvelles configurations sans ouvrir le boîtier. Je voulais l'ajouter à la version 1, mais cela m'a demandé plus de temps et de ressources que j'en avais.

Concours sans fil
Concours sans fil
Concours sans fil
Concours sans fil

Deuxième prix du concours sans fil

Conseillé: