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.
|
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
|
Démo - Ne fonctionne plus
|
||||||
----
|
----
|
||||||
|
|
||||||
|
@ -6,9 +6,11 @@
|
|||||||
#include "SelectionCapteur.h"
|
#include "SelectionCapteur.h"
|
||||||
#include "ws2812.h"
|
#include "ws2812.h"
|
||||||
|
|
||||||
#define DISTANCE_TRES_LOIN_CM 120
|
#define DISTANCE_TROP_LOIN_CM 200 /* Distance de saturation */
|
||||||
#define DISTANCE_LOIN_CM 80
|
#define DISTANCE_TRES_LOIN_CM 120 /* Seuil min. pour la couleur bleu*/
|
||||||
#define DISTANCE_PROCHE_CM 14
|
#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
|
#define NB_CAPTEURS 12
|
||||||
|
|
||||||
// Stock les valeurs lues des capteurs
|
// Stock les valeurs lues des capteurs
|
||||||
@ -120,7 +122,11 @@ int continuous_multiple_reading(){
|
|||||||
return 0;
|
return 0;
|
||||||
}else{
|
}else{
|
||||||
printf(">distance%x:%d\n", device, distance_mm);
|
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);
|
status=VL53L1X_ClearInterrupt(device);
|
||||||
@ -159,7 +165,11 @@ int continuous_special_reading(){
|
|||||||
return 0;
|
return 0;
|
||||||
}else{
|
}else{
|
||||||
printf(">distance%x:%d\n", device, distance_mm);
|
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);
|
status=VL53L1X_ClearInterrupt(device);
|
||||||
@ -194,7 +204,6 @@ void affiche_distance_sur_led(){
|
|||||||
ws2812_set_buffer_rgb(COULEUR_TROP_PROCHE, capteur);
|
ws2812_set_buffer_rgb(COULEUR_TROP_PROCHE, capteur);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
ws2812_affiche_buffer();
|
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);
|
ws2812_set_buffer_8bits(couleur_8bits, led);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// @brief Remet toutes les LEDs en mode d'affichage de la distance
|
||||||
void reset_affichage_led(){
|
void reset_affichage_led(){
|
||||||
for(uint8_t capteur=0; capteur<12; capteur++){
|
for(uint8_t capteur=0; capteur<12; capteur++){
|
||||||
mode_led[capteur] = MODE_DISTANCE;
|
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];
|
uint8_t couleur = tampon_commande_led[0];
|
||||||
uint16_t masque_led = (tampon_commande_led[1] << 8) | tampon_commande_led[2];
|
uint16_t masque_led = (tampon_commande_led[1] << 8) | tampon_commande_led[2];
|
||||||
|
|
||||||
if (masque_led == 0){
|
reset_affichage_led();
|
||||||
// Commande pour repasser les led en mode distance
|
for(uint8_t led=0; led < 12; led++){
|
||||||
reset_affichage_led();
|
if((masque_led >> led) & 0x01){
|
||||||
}else{
|
affiche_couleur_sur_led(couleur, 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