Piu' sotto, al termine della lingua inglese trovi il testo in italiano.
Below English text you'll find the Italian version
Library provides a function that, receiving as parameter the detected distance of a target (a hand moving in front of the sensor), recognize three types of gestures:
- a fast movement in front of the sensor (a hand quickly moving). This gesture is called a "SINGLE CLICK"
- two fast movement in front of the sensor in a short time (a hand quickly moving forth and back): a "DOUBLE CLICK"
- a target detected for a long time by the sensor (a hand keeping in front of the sensor): a "LONG CLICK"
Function returns the gestures detected and (in case of a long click) the target distance for the whole time gesture is detected.
Example of using this function is on this YouTube video: Gesture Recognition with ToF sensors: gesture detection and a gesture menu system using VL53L1X
Follow all steps in Mode 1
Follow all steps in Mode 1
Then
- Copy, from the src folder of this repository, z_vl53l1_gesture.c and z_vl53l1_gesture.h, again to the corresponding project folder
- edit main.h file and, in "Private includes" session, add include directive for the .h files:
(main.h)
...
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "VL53L1X_api.h"
#include "vl53l1_platform.h"
#include "z_vl53l1_gesture.h"
/* USER CODE END Includes */
...
Edit z_vl53l1_gesture.h and set the configuration parameters in USER/PROJECT PARAMETERS session on "STEP 1":
- max and min distance where gesture are detected (within the ranging threshold definition (see vl53l1_platform.h, STEP 3)
- time threshold to detect a double click
- time threshold to detect a long click
- timing budget in single/doubleclick detection
- timing budget when in long click
- "differential smoothness" (see Controlling values with gesture recognition: an incremental algorithm)
void VL53L1__InitGesture();
VL53L1__InitGesture() initialize sensor as per gesture detection parameters.
uint8_t VL53L1__CheckGesture(uint16_t dist, uint8_t *sClick, uint8_t *dClick, uint8_t *lClick, int16_t *lClickVal, const int16_t lClickLower, const int16_t lClickUpper);
VL53L1__CheckGesture() receives distance measured by the sensor (dist) and detects clicks, setting to 1 sClick, dClick, lClick if detected single, double or long clicks.
In case of a long click running, function sets lClickVal as per long click detection within limits defined by lClickLower and lClickUpper.
(see Using the gesture recognition function for an example)
...
SStatus=VL53L1__GetDistance(&Distance);
if (SStatus<=VL53L1__RANGE_STATUS_THRESH)
VL53L1__CheckGesture(Distance, &shortClick, &doubleClick, &longClick, &longClickVal, TESTGESTURE_LCLICK_LOWER, TESTGESTURE_LCLICK_UPPER);
...
La libreria fornisce una funzione che, ricevendo come parametro la distanza rilevata di un target (una mano che si muove davanti al sensore), riconosce tre tipi di gesti:
- un movimento veloce davanti al sensore (una mano che si muove velocemente). Questo gesto è chiamato "SINGLE CLICK"
- due movimenti veloci davanti al sensore in breve tempo (una mano che si muove velocemente avanti e indietro): un "DOUBLE CLICK"
- un bersaglio rilevato a lungo dal sensore (una mano che rimane davanti al sensore): un "LONG CLICK"
La funzione restituisce i gesti rilevati e (in caso di long click) la distanza target per l'intero tempo in cui viene rilevato il gesto.
Un esempio di utilizzo di questa funzione si trova in questo video YouTube: Gesture Recognition with ToF sensors: gesture detection and a gesture menu system using VL53L1X
Esegui tutti i passi come in Mode 1
Esegui tutti i passi come in Mode 1
Poi
- Copia, dalla cartella src di questa repository, z_vl53l1_gesture.c e z_vl53l1_gesture.h , nuovamente nella corrispondente cartella del progetto
- modifica il file main.h e, nella sessione "Include private", aggiungi la direttiva include per i file .h:
(main.h)
...
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "VL53L1X_api.h"
#include "vl53l1_platform.h"
#include "z_vl53l1_gesture.h"
/* USER CODE END Includes */
...
Modifica z_vl53l1_gesture.h e imposta i parametri di configurazione nella sessione USER/PROJECT PARAMETERS nello "STEP 1":
- distanza massima e minima in cui vengono rilevati i gesti (entro la definizione dell'area di lettura (vedere vl53l1_platform.h, FASE 3)
- soglia temporale per rilevare un doppio clic
- soglia temporale per rilevare un clic lungo
- Budget temporale nel rilevamento del singolo/doppio clic
- Budget temporale durante il clic lungo
- "differential smoothness" (vedi Controlling values with gesture recognition: an incremental algorithm)
void VL53L1__InitGesture();
VL53L1__InitGesture() inizializza il sensore secondo i parametri richiesti per il rilevamento dei gesti.
uint8_t VL53L1__CheckGesture(uint16_t dist, uint8_t *sClick, uint8_t *dClick, uint8_t *lClick, int16_t *lClickVal, const int16_t lClickLower, const int16_t lClickUpper);
VL53L1__CheckGesture() riceve la distanza misurata dal sensore (dist) e rileva i click, impostando a 1 sClick, dClick, lClick se rilevati clic singoli, doppi o lunghi.
In caso di clic lungo, la funzione imposta lClickVal in base alla distanza rilevata del clic lungo, entro i limiti definiti da lClickLower e lClickUpper.
(vedi Using the gesture recognition function per un esempio)
...
SStatus=VL53L1__GetDistance(&Distance);
if (SStatus<=VL53L1__RANGE_STATUS_THRESH)
VL53L1__CheckGesture(Distance, &shortClick, &doubleClick, &longClick, &longClickVal, TESTGESTURE_LCLICK_LOWER, TESTGESTURE_LCLICK_UPPER);
...