Stauration de la distance à 200 cm + ajout de commentaires

This commit is contained in:
Samuel 2023-04-16 20:22:20 +02:00
parent 41507f1227
commit b459287e11
3 changed files with 39 additions and 18 deletions

View File

@ -17,6 +17,24 @@ La première étape de l'initialisation consiste à changer tous les capteurs d'
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 <valentin.milea@gmail.com>, [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
----

View File

@ -6,9 +6,11 @@
#include "SelectionCapteur.h"
#include "ws2812.h"
#define DISTANCE_TRES_LOIN_CM 120
#define DISTANCE_LOIN_CM 80
#define DISTANCE_PROCHE_CM 14
#define DISTANCE_TROP_LOIN_CM 200 /* Distance de saturation */
#define DISTANCE_TRES_LOIN_CM 120 /* Seuil min. pour la couleur bleu*/
#define DISTANCE_LOIN_CM 80 /* Seuil min. pour la couleur verte*/
#define DISTANCE_PROCHE_CM 14 /* Seuil entre violet et jaune*/
#define NB_CAPTEURS 12
// Stock les valeurs lues des capteurs
@ -120,7 +122,11 @@ int continuous_multiple_reading(){
return 0;
}else{
printf(">distance%x:%d\n", device, distance_mm);
distance_capteur_cm[device-0x31] = distance_mm / 10;
if(distance_mm < DISTANCE_TROP_LOIN_CM * 10){
distance_capteur_cm[device-0x31] = distance_mm / 10;
}else{
distance_capteur_cm[device-0x31] = DISTANCE_TROP_LOIN_CM;
}
}
status=VL53L1X_ClearInterrupt(device);
@ -159,7 +165,11 @@ int continuous_special_reading(){
return 0;
}else{
printf(">distance%x:%d\n", device, distance_mm);
distance_capteur_cm[device-0x31] = distance_mm / 10;
if(distance_mm < DISTANCE_TROP_LOIN_CM * 10){
distance_capteur_cm[device-0x31] = distance_mm / 10;
}else{
distance_capteur_cm[device-0x31] = DISTANCE_TROP_LOIN_CM;
}
}
status=VL53L1X_ClearInterrupt(device);
@ -194,7 +204,6 @@ void affiche_distance_sur_led(){
ws2812_set_buffer_rgb(COULEUR_TROP_PROCHE, capteur);
}
}
}
ws2812_affiche_buffer();
}
@ -204,6 +213,7 @@ void affiche_couleur_sur_led(uint8_t couleur_8bits, uint8_t led){
ws2812_set_buffer_8bits(couleur_8bits, led);
}
/// @brief Remet toutes les LEDs en mode d'affichage de la distance
void reset_affichage_led(){
for(uint8_t capteur=0; capteur<12; capteur++){
mode_led[capteur] = MODE_DISTANCE;

17
main.c
View File

@ -148,22 +148,15 @@ void main(void)
uint8_t couleur = tampon_commande_led[0];
uint16_t masque_led = (tampon_commande_led[1] << 8) | tampon_commande_led[2];
if (masque_led == 0){
// Commande pour repasser les led en mode distance
reset_affichage_led();
}else{
for(uint8_t led=0; led < 12; led++){
if((masque_led >> led) & 0x01){
affiche_couleur_sur_led(couleur, led);
}
reset_affichage_led();
for(uint8_t led=0; led < 12; led++){
if((masque_led >> led) & 0x01){
affiche_couleur_sur_led(couleur, led);
}
}
}
}
}