Stauration de la distance à 200 cm + ajout de commentaires
This commit is contained in:
parent
41507f1227
commit
b459287e11
18
Readme.md
18
Readme.md
@ -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
|
||||
----
|
||||
|
||||
|
@ -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
17
main.c
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user