幾年前,我創(chuàng)建了一個支持手勢交互的嵌入式項目,允許用戶通過向左或向右滑動來翻頁。然而,一直困擾我的一個問題是,傳統(tǒng)的手勢傳感器依賴于光信號,這意味著它們必須保持暢通無阻。這需要切一個洞來暴露傳感器,這看起來并不美觀。所以,我想知道:有沒有一種方法可以隱藏手勢傳感器,同時保持良好的性能?這是一個我一直無法解決的挑戰(zhàn)。
現(xiàn)在,當我開始創(chuàng)建另一個有趣的互動項目時,我開始再次尋找符合我要求的手勢傳感器。我不僅找到了一個,而且它也更強大——提供更高的靈敏度、更高的精度,甚至可以精確地跟蹤手部運動的3D空間。有了這個,我可以在我的項目中加入更多創(chuàng)造性的互動。
最后,我成功地集成了一個可以通過實體物體檢測運動的手勢傳感器。它使用I2C協(xié)議,使其相對容易與微控制器接口。復雜的算法預先配置并存儲在傳感器的固件中,允許微控制器通過簡單的I2C通信檢測手勢。
代碼
/**
* @fn begin
* @brief initialization function
* @return bool,returns the initialization status
* @retval true Initialization succeeded
* @retval fasle Initialization failed
*/
bool begin(void);
/**
* @fn reset
* @brief reset the sensor
*/
void reset(void);
/**
* @fn sensorDataRecv
* @brief get the sensor data
*/
void sensorDataRecv(void);
/**
* @fn enableGestures
* @brief enable gesture recognition function
* @return Result of enabling gesture recognition
* @retval -1 setup fails
* @retval 0 setup succeeds
*/
int8_t enableGestures(void);
/**
* @fn disableGestures
* @brief turn off gesture recognition function
* @return Result of disabling gesture recognition
* @retval -1 setup fails
* @retval 0 setup succeeds
*/
int8_t disableGestures(void);
/**
* @fn disableAirWheel
* @brief turn off AirWheel function
* @return Result of disabling AirWheel function
* @retval -1 setup fails
* @retval 0 setup succeeds
*/
int8_t disableAirWheel(void);
/**
* @fn enableAirWheel
* @brief enable AirWheel function
* @return Result of enabling AirWheel function
* @retval -1 setup fails
* @retval 0 setup succeeds
*/
int8_t enableAirWheel(void);
/**
* @fn disableApproachDetection
* @brief turn off proximity detection function
* @return Result of disabling proximity detection function
* @retval -1 setup fails
* @retval 0 setup succeeds
*/
int8_t disableApproachDetection(void);
/**
* @fn enableApproachDetection
* @brief enable proximity detection function
* @return Result of enabling proximity detection function
* @retval -1 setup fails
* @retval 0 setup succeeds
*/
int8_t enableApproachDetection(void);
/**
* @fn disableTouchDetection
* @brief turn off touch detection function
* @return Result of disabling touch detection function
* @retval -1 setup fails
* @retval 0 setup succeeds
*/
int8_t disableTouchDetection(void);
/**
* @fn enableTouchDetection
* @brief enable touch detection function
* @return Result of enabling touch detection function
* @retval -1 setup fails
* @retval 0 setup succeeds
*/
int8_t enableTouchDetection(void);
/**
* @fn getPositionX
* @brief get the X-axis position
* @return X-axis position
*/
uint16_t getPositionX(void);
/**
* @fn getPositionY
* @brief get the Y-axis position
* @return Y-axis position
*/
uint16_t getPositionY(void);
/**
* @fn getPositionZ
* @brief get the Z-axis position
* @return Z-axis position
*/
uint16_t getPositionZ(void);
/**
* @fn getTouchInfo
* @brief get touch information
* @return touch information
* @retval eDoubleTapCenter Double Tap Center electrode
* @retval eDoubleTapRight Double Tap Right electrode
* @retval eDoubleTapUp Double Tap Up electrode
* @retval eDoubleTapLeft Double Tap Left electrode
* @retval eDoubleTapDown Double Tap Down electrode
* @retval eTapCenter Tap Center electrode
* @retval eTapRight Tap Right electrode
* @retval eTapUp Tap Up electrode
* @retval eTapLeft Tap Left electrode
* @retval eTapDown Tap Down electrode
* @retval eTouchCenter Touch Center electrode
* @retval eTouchRight Touch Right electrode
* @retval eTouchUp Touch Up electrode
* @retval eTouchLeft Touch Left electrode
* @retval eTouchDown Touch Down electrode
*/
uint16_t getTouchInfo(void);
/**
* @fn getGestureInfo
* @brief get gesture information
* @return gesture information
* @retval eFilckR Flick Left to Right
* @retval eFilckL Flick Right to Left
* @retval eFilckU Flick Down to Up
* @retval eFilckD Flick Up to Down
* @retval eCircleClockwise Circle clockwise (only active if AirWheel disabled)
* @retval eCircleCounterclockwise Circle counterclockwise (only active if AirWheel disabled)
*/
uint8_t getGestureInfo(void);
/**
* @fn havePositionInfo
* @brief monitor position information
* @return Results of monitoring position information
* @retval true position information exists
* @retval false There is no position information
*/
bool havePositionInfo(void);
本文編譯自hackster.io