mardi 3 mars 2020

On joue à "Pong" avec la STM32 Blue Pill

Aujourd'hui, on joue au tennis! Notre adversaire: une carte STM32 Blue Pill (STM32F103C8T6) programmée au moyen de l'IDE Arduino.

Pour recréer cette variante du classique jeu d'arcade "Pong", j'ai utilisé, en plus de la blue pill, un écran OLED I2C SH1106 et un potentiomètre. J'ai choisi la blue pill, mais il ne devrait pas être très difficile de modifier le sketch afin de l'utiliser sur une autre carte supportée par l'IDE Arduino. De plus, grâce à la bibliothèque u8g2, le sketch peut être modifié pour utilisation avec un autre modèle d'écran monochrome.

Déroulement du jeu

L'utilisateur contrôle la "raquette" de gauche au moyen du potentiomètre. La raquette de droite est contrôlée par notre programme.



Installation de la bibliothèque u8g2

Afin de programmer la carte blue pill avec l'IDE Arduino, les fichiers relatifs aux cartes STM32 doivent avoir préalablement été installés au moyen du gestionnaire de fichier (voir ce précédent billet pour des instructions détaillées).

De plus, notre sketch utilisera la bibliothèque u8g2 pour contrôler l'écran OLED. Cette bibliothèque peut être installée grâce au gestionnaire de bibliothèques de l'IDE.

Circuit

Puisque l'écran OLED SH1106 est un périphérique  I2C, il est branché à la carte blue pill de la façon suivante:

  • Broche GND de l'écran OLED: broche GND de la blue pill
  • Broche VCC de l'écran OLED: broche 3.3 de la blue pill
  • Broche SCL de l'écran OLED: broche B6 de la blue pill
  • Broche SDA de l'écran OLED: broche B7 de la blue pill

Le potentiomètre est branché à la broche B0 de la blue pill, de façon à faire varier la tension entre 0 et 3,3 V.



Sketch

La routine "hasard" (ligne 36) est appelée chaque fois que la balle est remise en jeu (au tout début, et chaque fois qu'un point a été compté). Elle génère, de façon aléatoire, la hauteur initiale de la balle sur l'écran, et la vitesse à laquelle la balle se déplace (2 ou 3 pixels par cycle vers la gauche ou vers la droite, 2 ou 3 pixels par cycle vers le haut ou vers le bas). La raquette de l'adversaire est initialement placée à une hauteur similaire à celle de la balle, mais avec une imprécision aléatoire (ligne 41).

J'ai réglé la résolution du convertisseur analogique-numérique de la blue pill à 6 bits (ligne 59): le potentiomètre génère ainsi une valeur pouvant varier entre 0 et 63, ce qui correspond parfaitement aux 64 pixels de l'écran.

La raquette de l'adversaire tente de se maintenir à la même hauteur que la balle, mais il y parvient avec un taux de succès de 90% (ligne 75): l'adversaire n'est donc pas infaillible et le joueur peut gagner s'il réussit plusieurs coups consécutifs.

Dans sa version actuelle, le jeu ne s'arrête jamais!

- -

Yves Pelletier (TwitterFacebook)

Aucun commentaire:

Enregistrer un commentaire