Amélioration de la vitesse de lecture
This commit is contained in:
parent
abd9645df0
commit
39fad9c743
19
Tests.c
19
Tests.c
@ -12,6 +12,7 @@ void test_couleur_led();
|
||||
|
||||
void blink_test(void){
|
||||
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
|
||||
uint8_t * distance_capteur_cm = get_distance_capteur_cm();
|
||||
while(1){
|
||||
for(uint8_t capteur=0; capteur<12; capteur++){
|
||||
printf(">distance%x:%d\n", capteur, distance_capteur_cm[capteur]);
|
||||
@ -62,11 +63,25 @@ void Tests(void){
|
||||
break;
|
||||
case 'j':
|
||||
case 'J':
|
||||
printf("Lecture continue des capteurs inutilisés.\nAppuyer sur une touche pour quitter");
|
||||
printf("Lecture continue des capteurs inutilisés.\nAppuyer sur une touche pour quitter\n");
|
||||
multicore_launch_core1(blink_test);
|
||||
do{
|
||||
static uint8_t capteur_courant=0;
|
||||
uint8_t * distance_capteur_cm = get_distance_capteur_cm();
|
||||
keycode = getchar_timeout_us(0);
|
||||
continuous_multiple_reading();
|
||||
// Lecture des capteurs
|
||||
if(capteur_pret(capteur_courant)){
|
||||
uint8_t distance_cm;
|
||||
if(capteur_lire_distance_cm(capteur_courant, &distance_cm)){
|
||||
distance_capteur_cm[capteur_courant]= distance_cm;
|
||||
}
|
||||
}
|
||||
capteur_courant++;
|
||||
if(capteur_courant > 11){
|
||||
capteur_courant = 0;
|
||||
}
|
||||
// Affichage des distances sur les LEDs.
|
||||
affiche_distance_sur_led(distance_capteur_cm);
|
||||
}while(keycode == PICO_ERROR_TIMEOUT || keycode == 0);
|
||||
break;
|
||||
case 'k':
|
||||
|
@ -12,6 +12,7 @@
|
||||
#define DISTANCE_PROCHE_CM 15 /* Seuil entre violet et jaune*/
|
||||
|
||||
#define NB_CAPTEURS 12
|
||||
#define ADRESSE_I2C_BASE 0x31
|
||||
|
||||
// Stock les valeurs lues des capteurs
|
||||
uint8_t distance_capteur_cm[12];
|
||||
@ -22,6 +23,11 @@ enum {
|
||||
MODE_MANUEL
|
||||
} mode_led[NB_CAPTEURS];
|
||||
|
||||
|
||||
uint8_t * get_distance_capteur_cm(void){
|
||||
return distance_capteur_cm;
|
||||
}
|
||||
|
||||
void reset_affichage_led(void);
|
||||
|
||||
void initialise_adresses(void){
|
||||
@ -38,22 +44,22 @@ void initialise_adresses(void){
|
||||
reset_affichage_led();
|
||||
|
||||
// Pour chaque capteur
|
||||
for(uint capteur=1; capteur<=NB_CAPTEURS; capteur++){
|
||||
for(uint capteur=0; capteur<NB_CAPTEURS; capteur++){
|
||||
// reset du capteur
|
||||
Selection_capteur_select(capteur);
|
||||
Selection_capteur_select(capteur+1);
|
||||
sleep_ms(1);
|
||||
Selection_capteur_deselect();
|
||||
sleep_ms(1);
|
||||
uint8_t VL53L1X_device = 0x29;
|
||||
|
||||
if(change_address(&VL53L1X_device, 0x30 + capteur)){
|
||||
printf("Erreur change adresse : %x => %x, capteur : %d\n", VL53L1X_device, 0x30 + capteur, capteur);
|
||||
ws2812_set_buffer_rgb(0x4, 0, 0, capteur-1);
|
||||
if(change_address(&VL53L1X_device, ADRESSE_I2C_BASE + capteur)){
|
||||
printf("Erreur change adresse : %x => %x, capteur : %d\n", VL53L1X_device, ADRESSE_I2C_BASE + capteur, capteur);
|
||||
ws2812_set_buffer_rgb(0x4, 0, 0, capteur);
|
||||
statu_capteurs[capteur]=0;
|
||||
}else{
|
||||
if(VL53L1X_SensorInit(VL53L1X_device)){
|
||||
// bad init
|
||||
ws2812_set_buffer_rgb(0x4, 0, 0, capteur-1);
|
||||
ws2812_set_buffer_rgb(0x4, 0, 0, capteur);
|
||||
statu_capteurs[capteur]=0;
|
||||
}else{
|
||||
// good init
|
||||
@ -64,7 +70,7 @@ void initialise_adresses(void){
|
||||
status |= VL53L1X_SetTimingBudgetInMs(VL53L1X_device, 200);
|
||||
if(status){
|
||||
printf("Custom config KO, error %d\n", status);
|
||||
ws2812_set_buffer_rgb(0x4, 0, 0, capteur-1);
|
||||
ws2812_set_buffer_rgb(0x4, 0, 0, capteur);
|
||||
}else{
|
||||
printf("Custom config OK\n");
|
||||
}
|
||||
@ -139,7 +145,54 @@ int continuous_multiple_reading(){
|
||||
//return 0;
|
||||
}
|
||||
}
|
||||
affiche_distance_sur_led();
|
||||
affiche_distance_sur_led(distance_capteur_cm);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/// @brief Renvoie 1 si capteur prêt
|
||||
/// @param capteur : capteur à interroger, entre 0 et 11
|
||||
/// @return 1 si prêt, 0 si pas prêt, -1 si erreur
|
||||
int capteur_pret(uint8_t capteur){
|
||||
int status;
|
||||
uint8_t data_ready = 0;
|
||||
|
||||
if(statu_capteurs[capteur]==0){
|
||||
printf("capteur non prêt:%d\n",capteur);
|
||||
return 0;
|
||||
}
|
||||
status=VL53L1X_CheckForDataReady(capteur + ADRESSE_I2C_BASE, &data_ready);
|
||||
if(status){
|
||||
printf("CheckForDataReady KO, error %d, capteur:%x\n", status, capteur + ADRESSE_I2C_BASE);
|
||||
return 1;
|
||||
}
|
||||
return data_ready;
|
||||
|
||||
}
|
||||
|
||||
/// @brief Lecture d'un capteur prêt.
|
||||
/// @param capteur : identifiant du capteur entre 0 et 11
|
||||
/// @return 1 si la lecture s'est bien passée, 0 sinon.
|
||||
int capteur_lire_distance_cm(uint8_t capteur, uint8_t * distance_cm){
|
||||
int status;
|
||||
uint16_t distance_mm;
|
||||
status=VL53L1X_GetDistance(capteur + ADRESSE_I2C_BASE, &distance_mm);
|
||||
if(status){
|
||||
printf("GetDistance KO, error %d, capteur:%x\n", status, capteur + ADRESSE_I2C_BASE);
|
||||
return 0;
|
||||
}else{
|
||||
if(distance_mm/10 < (uint16_t) DISTANCE_TROP_LOIN_CM){
|
||||
*distance_cm = distance_mm / 10;
|
||||
}else{
|
||||
*distance_cm = DISTANCE_TROP_LOIN_CM;
|
||||
}
|
||||
}
|
||||
|
||||
status=VL53L1X_ClearInterrupt(capteur + ADRESSE_I2C_BASE);
|
||||
if(status){
|
||||
printf("ClearInterrupt KO, error %d, capteur:%x\n", status, capteur + ADRESSE_I2C_BASE);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -182,12 +235,12 @@ int continuous_special_reading(){
|
||||
//return 0;
|
||||
}
|
||||
}
|
||||
affiche_distance_sur_led();
|
||||
affiche_distance_sur_led(distance_capteur_cm);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void affiche_distance_sur_led(){
|
||||
void affiche_distance_sur_led(unsigned char * distance_capteur_cm){
|
||||
uint8_t distance_cm;
|
||||
uint32_t couleur;
|
||||
for(uint8_t capteur=0; capteur<12; capteur++){
|
||||
|
@ -12,14 +12,15 @@
|
||||
|
||||
int continuous_multiple_reading(void);
|
||||
int continuous_special_reading(void);
|
||||
void affiche_distance_sur_led(void);
|
||||
void affiche_distance_sur_led(unsigned char *);
|
||||
void affiche_couleur_sur_led(uint8_t couleur_8bits, uint8_t led);
|
||||
void reset_affichage_led(void);
|
||||
void initialise_adresses(void);
|
||||
int change_address(uint8_t *device, uint8_t new_i2c_7bits_address);
|
||||
int calibration(uint8_t device);
|
||||
int continuous_reading(uint8_t device);
|
||||
|
||||
extern uint8_t distance_capteur_cm[];
|
||||
int capteur_pret(uint8_t capteur);
|
||||
int capteur_lire_distance_cm(uint8_t capteur, uint8_t * distance_cm);
|
||||
uint8_t * get_distance_capteur_cm(void);
|
||||
|
||||
extern uint8_t statu_capteurs[];
|
||||
|
20
main.c
20
main.c
@ -125,6 +125,7 @@ void blink(void){
|
||||
void main(void)
|
||||
{
|
||||
int status;
|
||||
uint8_t distance_capteur_cm[12];
|
||||
|
||||
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
|
||||
gpio_init(LED_PIN);
|
||||
@ -147,15 +148,28 @@ void main(void)
|
||||
printf("End waiting\n");
|
||||
setup_slave();
|
||||
|
||||
//Tests();
|
||||
Tests();
|
||||
|
||||
multicore_launch_core1(blink);
|
||||
|
||||
initialise_adresses();
|
||||
|
||||
uint8_t capteur_courant=0;
|
||||
while(1){
|
||||
// Lecture des capteurs
|
||||
continuous_multiple_reading();
|
||||
//continuous_special_reading();
|
||||
if(capteur_pret(capteur_courant)){
|
||||
uint8_t distance_cm;
|
||||
if(capteur_lire_distance_cm(capteur_courant, &distance_cm)){
|
||||
distance_capteur_cm[capteur_courant]= distance_cm;
|
||||
}
|
||||
}
|
||||
capteur_courant++;
|
||||
if(capteur_courant > 11){
|
||||
capteur_courant = 0;
|
||||
}
|
||||
|
||||
// Affichage des distances sur les LEDs.
|
||||
affiche_distance_sur_led(distance_capteur_cm);
|
||||
|
||||
// Envoie des valeurs des capteurs
|
||||
for(uint8_t capteur=0; capteur<12; capteur++){
|
||||
|
Loading…
Reference in New Issue
Block a user