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){
|
void blink_test(void){
|
||||||
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
|
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
|
||||||
|
uint8_t * distance_capteur_cm = get_distance_capteur_cm();
|
||||||
while(1){
|
while(1){
|
||||||
for(uint8_t capteur=0; capteur<12; capteur++){
|
for(uint8_t capteur=0; capteur<12; capteur++){
|
||||||
printf(">distance%x:%d\n", capteur, distance_capteur_cm[capteur]);
|
printf(">distance%x:%d\n", capteur, distance_capteur_cm[capteur]);
|
||||||
@ -62,11 +63,25 @@ void Tests(void){
|
|||||||
break;
|
break;
|
||||||
case 'j':
|
case 'j':
|
||||||
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);
|
multicore_launch_core1(blink_test);
|
||||||
do{
|
do{
|
||||||
|
static uint8_t capteur_courant=0;
|
||||||
|
uint8_t * distance_capteur_cm = get_distance_capteur_cm();
|
||||||
keycode = getchar_timeout_us(0);
|
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);
|
}while(keycode == PICO_ERROR_TIMEOUT || keycode == 0);
|
||||||
break;
|
break;
|
||||||
case 'k':
|
case 'k':
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#define DISTANCE_PROCHE_CM 15 /* Seuil entre violet et jaune*/
|
#define DISTANCE_PROCHE_CM 15 /* Seuil entre violet et jaune*/
|
||||||
|
|
||||||
#define NB_CAPTEURS 12
|
#define NB_CAPTEURS 12
|
||||||
|
#define ADRESSE_I2C_BASE 0x31
|
||||||
|
|
||||||
// Stock les valeurs lues des capteurs
|
// Stock les valeurs lues des capteurs
|
||||||
uint8_t distance_capteur_cm[12];
|
uint8_t distance_capteur_cm[12];
|
||||||
@ -22,6 +23,11 @@ enum {
|
|||||||
MODE_MANUEL
|
MODE_MANUEL
|
||||||
} mode_led[NB_CAPTEURS];
|
} mode_led[NB_CAPTEURS];
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t * get_distance_capteur_cm(void){
|
||||||
|
return distance_capteur_cm;
|
||||||
|
}
|
||||||
|
|
||||||
void reset_affichage_led(void);
|
void reset_affichage_led(void);
|
||||||
|
|
||||||
void initialise_adresses(void){
|
void initialise_adresses(void){
|
||||||
@ -38,22 +44,22 @@ void initialise_adresses(void){
|
|||||||
reset_affichage_led();
|
reset_affichage_led();
|
||||||
|
|
||||||
// Pour chaque capteur
|
// Pour chaque capteur
|
||||||
for(uint capteur=1; capteur<=NB_CAPTEURS; capteur++){
|
for(uint capteur=0; capteur<NB_CAPTEURS; capteur++){
|
||||||
// reset du capteur
|
// reset du capteur
|
||||||
Selection_capteur_select(capteur);
|
Selection_capteur_select(capteur+1);
|
||||||
sleep_ms(1);
|
sleep_ms(1);
|
||||||
Selection_capteur_deselect();
|
Selection_capteur_deselect();
|
||||||
sleep_ms(1);
|
sleep_ms(1);
|
||||||
uint8_t VL53L1X_device = 0x29;
|
uint8_t VL53L1X_device = 0x29;
|
||||||
|
|
||||||
if(change_address(&VL53L1X_device, 0x30 + capteur)){
|
if(change_address(&VL53L1X_device, ADRESSE_I2C_BASE + capteur)){
|
||||||
printf("Erreur change adresse : %x => %x, capteur : %d\n", VL53L1X_device, 0x30 + capteur, 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-1);
|
ws2812_set_buffer_rgb(0x4, 0, 0, capteur);
|
||||||
statu_capteurs[capteur]=0;
|
statu_capteurs[capteur]=0;
|
||||||
}else{
|
}else{
|
||||||
if(VL53L1X_SensorInit(VL53L1X_device)){
|
if(VL53L1X_SensorInit(VL53L1X_device)){
|
||||||
// bad init
|
// bad init
|
||||||
ws2812_set_buffer_rgb(0x4, 0, 0, capteur-1);
|
ws2812_set_buffer_rgb(0x4, 0, 0, capteur);
|
||||||
statu_capteurs[capteur]=0;
|
statu_capteurs[capteur]=0;
|
||||||
}else{
|
}else{
|
||||||
// good init
|
// good init
|
||||||
@ -64,7 +70,7 @@ void initialise_adresses(void){
|
|||||||
status |= VL53L1X_SetTimingBudgetInMs(VL53L1X_device, 200);
|
status |= VL53L1X_SetTimingBudgetInMs(VL53L1X_device, 200);
|
||||||
if(status){
|
if(status){
|
||||||
printf("Custom config KO, error %d\n", 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{
|
}else{
|
||||||
printf("Custom config OK\n");
|
printf("Custom config OK\n");
|
||||||
}
|
}
|
||||||
@ -139,7 +145,54 @@ int continuous_multiple_reading(){
|
|||||||
//return 0;
|
//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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,12 +235,12 @@ int continuous_special_reading(){
|
|||||||
//return 0;
|
//return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
affiche_distance_sur_led();
|
affiche_distance_sur_led(distance_capteur_cm);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void affiche_distance_sur_led(){
|
void affiche_distance_sur_led(unsigned char * distance_capteur_cm){
|
||||||
uint8_t distance_cm;
|
uint8_t distance_cm;
|
||||||
uint32_t couleur;
|
uint32_t couleur;
|
||||||
for(uint8_t capteur=0; capteur<12; capteur++){
|
for(uint8_t capteur=0; capteur<12; capteur++){
|
||||||
|
@ -12,14 +12,15 @@
|
|||||||
|
|
||||||
int continuous_multiple_reading(void);
|
int continuous_multiple_reading(void);
|
||||||
int continuous_special_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 affiche_couleur_sur_led(uint8_t couleur_8bits, uint8_t led);
|
||||||
void reset_affichage_led(void);
|
void reset_affichage_led(void);
|
||||||
void initialise_adresses(void);
|
void initialise_adresses(void);
|
||||||
int change_address(uint8_t *device, uint8_t new_i2c_7bits_address);
|
int change_address(uint8_t *device, uint8_t new_i2c_7bits_address);
|
||||||
int calibration(uint8_t device);
|
int calibration(uint8_t device);
|
||||||
int continuous_reading(uint8_t device);
|
int continuous_reading(uint8_t device);
|
||||||
|
int capteur_pret(uint8_t capteur);
|
||||||
extern uint8_t distance_capteur_cm[];
|
int capteur_lire_distance_cm(uint8_t capteur, uint8_t * distance_cm);
|
||||||
|
uint8_t * get_distance_capteur_cm(void);
|
||||||
|
|
||||||
extern uint8_t statu_capteurs[];
|
extern uint8_t statu_capteurs[];
|
||||||
|
20
main.c
20
main.c
@ -125,6 +125,7 @@ void blink(void){
|
|||||||
void main(void)
|
void main(void)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
|
uint8_t distance_capteur_cm[12];
|
||||||
|
|
||||||
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
|
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
|
||||||
gpio_init(LED_PIN);
|
gpio_init(LED_PIN);
|
||||||
@ -147,15 +148,28 @@ void main(void)
|
|||||||
printf("End waiting\n");
|
printf("End waiting\n");
|
||||||
setup_slave();
|
setup_slave();
|
||||||
|
|
||||||
//Tests();
|
Tests();
|
||||||
|
|
||||||
multicore_launch_core1(blink);
|
multicore_launch_core1(blink);
|
||||||
|
|
||||||
initialise_adresses();
|
initialise_adresses();
|
||||||
|
|
||||||
|
uint8_t capteur_courant=0;
|
||||||
while(1){
|
while(1){
|
||||||
// Lecture des capteurs
|
// Lecture des capteurs
|
||||||
continuous_multiple_reading();
|
if(capteur_pret(capteur_courant)){
|
||||||
//continuous_special_reading();
|
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
|
// Envoie des valeurs des capteurs
|
||||||
for(uint8_t capteur=0; capteur<12; capteur++){
|
for(uint8_t capteur=0; capteur<12; capteur++){
|
||||||
|
Loading…
Reference in New Issue
Block a user