Détection de l'adversaire - 2023 ================================ Le code présenté ici sert à la détection de l'adversaire pour les robots de l'équipe [Poivron Robotique](http://poivron-robotique.fr) qui participe à la coupe de France de Robotique. Ce code tourne sur un Raspberry Pi Pico et une carte personnalisé sur laquelle sont banchés 12 capteurs VL53L1X. Principe de fonctionnement -------------------------- Les capteurs VL53L1X sont des capteurs I2C dont l'adresse est configurable. Cependant, le capteur revient à son adresse par défaut dès qu'il est éteint ou désactivé par la broche `XSHUT`. Le Raspberry Pi Pico est relié à un 74HC4067, qui lui permet de désactiver un capteur à la fois. Le code utilisé ici repose sur [VL53L1X_Raspberry_Pi_Pico](https://git.poivron-robotique.fr/Keuronde/Raspberry_Pi_Pico_VL53L1X) et l'exemple pour piloter les LED RGB ws2812 fourni avec le SDK du Raspberry Pi Pico. Initialisation -------------- La première étape de l'initialisation consiste à changer tous les capteurs d'adresses en une seule commande I2C. La seconde étape consiste, pour chaque capteur, à le désactiver puis à le réactiver à l'aide du 74HC4067 et de la boche `XSHUT` du composant. Ce faisant, il reprend son adresse par défaut et il est le seul à cette adresse. Ainsi il est possible, via le bus I2C de lui attribuer une adresse unique. Communication I2C ----------------- Avec le reste du robot, la carte communique en I2C sur le bus i2c1, se comportant comme une EPROM en utilisant le code de Valentin Milea , [Pico_i2c_slave](https://github.com/vmilea/pico_i2c_slave). Description de la mémoire d'échange: ------------------------------------ Les adresses 0 à 11 (0x0B) contiennent les distances des capteurs en centimètre. Cette distance est saturée à 200 cm. Les adresses 16 (0x10) à 18 (0x12) contiennent les consignes d'éclairage des LEDs: * 0x10 : Couleur sur 8 bits. * 0x11 : octet de poids fort pour le masque sélectionnant les LEDs à commander. * 0x12 : octet de poids faible pour le masque sélectionnant les LEDs à commander. Couleur sur 8 bits structurée ainsi : 3-3-2 (Rouge - vert - bleu). Le masque sur 16 bits, 1 : la led doit être piloter de la couleur indiquée, 0 la led affiche la distance. Valeur spéciale pour le masque : 0x00. Dans ce cas, toutes les LEDs reprennent leur fonction par défaut (affichage de la distance). Démo - Ne fonctionne plus ---- La démo ne fonctionne plus, la carte initialise automatiquement les capteurs et lit leurs valeurs en continu. Le code esclave I2C envoi ces valeurs qui sont stockée de l'adresse 0x0 à 0x0B de la "mémoire" I2C. Le code I2C pour la partie esclave est repris de [pico_i2c_slave](https://github.com/vmilea/pico_i2c_slave). Une fois branchée à un ordinateur, le Raspberry Pi Pico propose un menu par la liaison USB/série. - La commande "i" initialise les capteurs et change d'état les LEDs en fonction du succès de l'initialisation. - La commande "j" démarre une lecture continue et renvoie les données des capteurs dans un format compatible avec [Teleplot](https://github.com/nesnes/teleplot/).