Module fonctionnel
This commit is contained in:
parent
bd253952b1
commit
1d82bcb01d
2
.vscode/c_cpp_properties.json
vendored
2
.vscode/c_cpp_properties.json
vendored
@ -12,7 +12,7 @@
|
|||||||
"name": "Linux",
|
"name": "Linux",
|
||||||
"intelliSenseMode": "linux-gcc-arm",
|
"intelliSenseMode": "linux-gcc-arm",
|
||||||
"includePath": [
|
"includePath": [
|
||||||
"${myDefaultIncludePath}",
|
"${myDefaultIncludePath}"
|
||||||
],
|
],
|
||||||
"compilerPath": "/usr/bin/arm-none-eabi-gcc",
|
"compilerPath": "/usr/bin/arm-none-eabi-gcc",
|
||||||
"cStandard": "c11",
|
"cStandard": "c11",
|
||||||
|
|||||||
@ -11,6 +11,9 @@ add_library(Mod_VL53L8
|
|||||||
Platform/platform.c
|
Platform/platform.c
|
||||||
|
|
||||||
)
|
)
|
||||||
|
target_include_directories(Mod_VL53L8 PUBLIC
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/VL53L8CX_ULD_API/inc/
|
||||||
|
)
|
||||||
|
|
||||||
target_link_libraries(Mod_VL53L8
|
target_link_libraries(Mod_VL53L8
|
||||||
pico_stdlib
|
pico_stdlib
|
||||||
|
|||||||
@ -16,15 +16,32 @@
|
|||||||
#include "hardware/i2c.h"
|
#include "hardware/i2c.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
// Configuration of the I2C communication
|
||||||
|
#define I2C_DEVICE i2c1
|
||||||
|
#define I2C1_SDA_PIN 14
|
||||||
|
#define I2C1_SCL_PIN 15
|
||||||
|
|
||||||
#define I2C_SUCCESS 0
|
#define I2C_SUCCESS 0
|
||||||
#define I2C_FAILED 1
|
#define I2C_FAILED 1
|
||||||
#define I2C_BUFFER_EXCEEDED 2
|
#define I2C_BUFFER_EXCEEDED 2
|
||||||
|
|
||||||
#define I2C_DEVICE i2c1
|
|
||||||
|
|
||||||
#define MAX_I2C_BUFFER 0x8100
|
#define MAX_I2C_BUFFER 0x8100
|
||||||
|
|
||||||
|
|
||||||
|
void platform_i2c_init(void){
|
||||||
|
i2c_init(I2C_DEVICE, 400 * 1000);
|
||||||
|
|
||||||
|
printf("Initialisation des broches\n");
|
||||||
|
printf("%d et %d en I2C\n", I2C1_SDA_PIN, I2C1_SCL_PIN);
|
||||||
|
gpio_set_function(I2C1_SDA_PIN, GPIO_FUNC_I2C);
|
||||||
|
gpio_set_function(I2C1_SCL_PIN, GPIO_FUNC_I2C);
|
||||||
|
gpio_pull_up(I2C1_SDA_PIN);
|
||||||
|
gpio_pull_up(I2C1_SCL_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
/// @brief Blocking function allowing to write a register on an I2C device
|
/// @brief Blocking function allowing to write a register on an I2C device
|
||||||
/// @param address_7_bits
|
/// @param address_7_bits
|
||||||
/// @param index : register to write
|
/// @param index : register to write
|
||||||
|
|||||||
@ -163,4 +163,6 @@ uint8_t WaitMs(
|
|||||||
VL53L8CX_Platform *p_platform,
|
VL53L8CX_Platform *p_platform,
|
||||||
uint32_t TimeMs);
|
uint32_t TimeMs);
|
||||||
|
|
||||||
|
void platform_i2c_init(void);
|
||||||
|
|
||||||
#endif // _PLATFORM_H_
|
#endif // _PLATFORM_H_
|
||||||
37
Readme.md
37
Readme.md
@ -1,7 +1,12 @@
|
|||||||
Submodule Communication pour le RP2040
|
Submodule VL53L8CX pour le RP2040
|
||||||
=====================================
|
=====================================
|
||||||
|
|
||||||
Ceci est un submodule git pour intégrer facilement notre protocole de communication à un projet.
|
Ceci est un submodule git pour intégrer facilement un capteur VL53L8CX à un projet.
|
||||||
|
|
||||||
|
Le code présent ici se base sur [Ultra lite driver (ULD) API for the VL53L8CX](https://www.st.com/en/embedded-software/stsw-img040.html)
|
||||||
|
|
||||||
|
La documentation est disponible ici : https://www.st.com/content/st_com/en/technical-documents/UM3109.html
|
||||||
|
|
||||||
On crée ce Submodule en se servant de la documentation disponible ici : https://git-scm.com/book/en/v2/Git-Tools-Submodules
|
On crée ce Submodule en se servant de la documentation disponible ici : https://git-scm.com/book/en/v2/Git-Tools-Submodules
|
||||||
|
|
||||||
Utilisation
|
Utilisation
|
||||||
@ -28,22 +33,44 @@ Dans le fichier CMakeLists.txt, ajouter le dossier du sub module:
|
|||||||
Intégration au code source
|
Intégration au code source
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
|
Dans le code du module, ouvrez le fichier Platform/platform.c, adaptez les macro de configuration de l'i2c
|
||||||
|
|
||||||
|
#define I2C_DEVICE i2c1
|
||||||
|
#define I2C1_SDA_PIN 14
|
||||||
|
#define I2C1_SCL_PIN 15
|
||||||
|
|
||||||
Ajout du fichier d'include :
|
Dans votre code, ajout du fichier d'include :
|
||||||
|
|
||||||
#include "RP2040_Servomoteurs/Servomoteur.h"
|
#include "Mod_VL53L8CX/VL53L8_2024.h"
|
||||||
|
|
||||||
Initialisation du module :
|
Initialisation du module :
|
||||||
|
|
||||||
struct VL53L8CX_Configuration Dev;
|
struct VL53L8CX_Configuration Dev;
|
||||||
VL53L8_init(&Dev);
|
VL53L8_init(&Dev);
|
||||||
|
|
||||||
Lecture des distances
|
Lecture des distances :
|
||||||
|
|
||||||
struct VL53L8CX_ResultsData Results;
|
struct VL53L8CX_ResultsData Results;
|
||||||
VL53L8_lecture(&Dev, &Results);
|
VL53L8_lecture(&Dev, &Results);
|
||||||
|
|
||||||
|
Affichage des distances :
|
||||||
|
|
||||||
|
for (int i=0; i< 8; i++){
|
||||||
|
for (int j=0; j< 8; j++){
|
||||||
|
printf("%3d ",Results.distance_mm[8*i+j]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
Configuration applicative
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Un système de masque permet de considéré que le capteur ne voit "rien" s'il la distance est supérieur à une certaine valeur.
|
||||||
|
Cette valeur se configure dans la variable ``masque` présente dans `VL53L8_2024.c`.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Cas où vous clonez un projet contenant des submodules
|
Cas où vous clonez un projet contenant des submodules
|
||||||
-----------------------------------------------------
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include "vl53l8cx_api.h"
|
#include "vl53l8cx_api.h"
|
||||||
#include "vl53l8cx_buffers.h"
|
#include "vl53l8cx_buffers.h"
|
||||||
|
|
||||||
|
|||||||
@ -8,9 +8,10 @@ int masque[64]={
|
|||||||
3000,3000,3000,3000,3000,3000,3000,3000,
|
3000,3000,3000,3000,3000,3000,3000,3000,
|
||||||
3000,3000,3000,3000,3000,3000,3000,3000,
|
3000,3000,3000,3000,3000,3000,3000,3000,
|
||||||
3000,3000,3000,3000,3000,3000,3000,3000,
|
3000,3000,3000,3000,3000,3000,3000,3000,
|
||||||
350,350,350,350,350,350,350,350,
|
3000,3000,3000,3000,3000,3000,3000,3000,
|
||||||
281,286,299,306,310,314,302,286,
|
3000,3000,3000,3000,3000,3000,3000,3000,
|
||||||
195,200,202,206,213,200,200,202
|
3000,3000,3000,3000,3000,3000,3000,3000,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
float old_min_distance;
|
float old_min_distance;
|
||||||
@ -18,6 +19,9 @@ float old_min_distance;
|
|||||||
void VL53L8_init(VL53L8CX_Configuration * Dev){
|
void VL53L8_init(VL53L8CX_Configuration * Dev){
|
||||||
uint8_t status, isAlive, isReady, i;
|
uint8_t status, isAlive, isReady, i;
|
||||||
|
|
||||||
|
// Initialise i2c
|
||||||
|
platform_i2c_init();
|
||||||
|
|
||||||
|
|
||||||
/*********************************/
|
/*********************************/
|
||||||
/* Customer platform */
|
/* Customer platform */
|
||||||
@ -106,7 +110,7 @@ void VL53L8_lecture(VL53L8CX_Configuration * Dev, VL53L8CX_ResultsData * Results
|
|||||||
error = vl53l8cx_get_ranging_data(Dev, Results);
|
error = vl53l8cx_get_ranging_data(Dev, Results);
|
||||||
if(error){
|
if(error){
|
||||||
printf("Error VL53L8\n");
|
printf("Error VL53L8\n");
|
||||||
VL53L8_init(Dev);
|
//VL53L8_init(Dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user