Sweep a servo according to Proximity sensor measure

Dependencies:   Servo X_NUCLEO_6180XA1 mbed

Fork of HelloWorld_6180XA1 by ST

Files at this revision

API Documentation at this revision

Comitter:
gallonm
Date:
Wed Oct 28 15:06:09 2015 +0000
Parent:
17:68515d0667af
Child:
19:394c9a4a3046
Commit message:
Deleted Middlewares folder and its subfolders.; Deleted HmiBBGesture files.

Changed in this revision

Middlewares/ST/STM32_HMI_HandGesture/HmiBBGesture.cpp Show diff for this revision Revisions of this file
Middlewares/ST/STM32_HMI_HandGesture/HmiBBGesture.h Show diff for this revision Revisions of this file
X_NUCLEO_COMMON.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Middlewares/ST/STM32_HMI_HandGesture/HmiBBGesture.cpp	Wed Oct 28 14:56:58 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,296 +0,0 @@
-/* ----------------------------------------------------------------------
- * Copyright (C) 2014 STMicroelectronics. All rights reserved.
- *
- * Project: BB gesture recognition
- * Title:   HmiBBGesture
- *
- * Description: Gesture recognition - left, right, tap
- *
- * 20/10/14
- * Changed from proximity to range
- * Ultra simplified version
- *
- * -------------------------------------------------------------------- */
-
-//#define PRINT_DEBUG_
-#define USE_MICRO_
-
-#include "HmiBBGesture.h"
-#include "stm32f4xx_hal.h"
-#include <stdint.h>
-#include <stdio.h>
-
-#ifdef USE_MICRO_
-//#include "vl6180x_shield.h"
-//#include "platform.h"
-//#define GET_TIME_STAMP() ((int)timer_get_clock_time_msecs())  // for Mbed
-#define GET_TIME_STAMP()  (int32_t)HAL_GetTick()   // for Cube
-#else
-/* PC config */
-#include <windows.h>
-#define GET_TIME_STAMP() ((int)timeGetTime())
-#endif
-
-#ifdef PRINT_DEBUG_
-#ifdef USE_MICRO_
-static char str[80];
-//extern void serial_print(const char *str);
-#define serial_print(str)  printf(str)
-#endif
-#endif
-
-#define HMI_SIGNAL_CODE_DROP_DOWN 1
-#define HMI_SIGNAL_CODE_RAISE_UP 2
-#define HMI_SIGNAL_CODE_DOWN_STATE 3
-#define HMI_SIGNAL_CODE_UP_STATE 4
-#define HMI_SIGNAL_CODE_NULL -1
-
-#define HMI_TAP_CODE_SINGLE 0
-#define HMI_TAP_CODE_DOUBLE 1
-#define HMI_TAP_CODE_HOLD 2
-#define HMI_TAP_CODE_NULL -1
-
-
-
-
-/**********************************************************************************
- *
- *
- *  Gesture recognition class
- *
- *
- **********************************************************************************/
-
-
-void HmiBBGesture::Init(int threshold_mm, int tap_threshold_mm, int min_hold_duration_ms, int min_swipe_duration_ms, int max_gesture_duration_ms )
-{
-    m_motion_r.Init( threshold_mm );
-    m_motion_l.Init( threshold_mm );
-    m_tap_det.Init( tap_threshold_mm, 150, min_hold_duration_ms, false, 0 );
-    m_fsm_state = 0;
-    m_timestamp = GET_TIME_STAMP();
-    m_min_swipe_ms   = min_swipe_duration_ms;
-    m_max_gesture_ms = max_gesture_duration_ms;
-    m_gesture_starts_from_right = false;
-}
-
-int HmiBBGesture::Update(int range_r, int range_l, int *gesture_duration_ms)
-{
-    int r_code, r_ms;
-    int l_code, l_ms;
-    int duration;
-    int gesture_code = HMI_BB_GESTURE_CODE_NULL;
-    *gesture_duration_ms = 0;
-
-    r_code = m_motion_r.Update( range_r , &r_ms );
-    l_code = m_motion_l.Update( range_l , &l_ms );
-//        printf ("r_ms: %d l_ms: %d\n\r",r_ms, l_ms);
-    switch( m_fsm_state )
-    {
-    case 1: // gesture ends
-
-        duration = GET_TIME_STAMP() - m_timestamp;
-        if(duration > m_max_gesture_ms)  // gesture is too long - discard it
-        {
-            m_fsm_state = 0;
-#ifdef PRINT_DEBUG_
-
-#ifdef USE_MICRO_
-sprintf(str, "FSM 1 - Discarded %d %d %d mts %d\n",r_code,l_code,duration, m_timestamp);
-serial_print(str);
-#else
-printf("FSM 1 - Discarded %d %d %d \n",r_code,l_code,duration);
-#endif
-
-#endif
-        }
-        else if( (m_gesture_starts_from_right && l_code == HMI_SIGNAL_CODE_RAISE_UP ) ||
-                 (m_gesture_starts_from_right==false && r_code == HMI_SIGNAL_CODE_RAISE_UP) )
-        {
-            m_fsm_state = 0;
-            if( duration > (m_min_swipe_ms/2) )
-            {
-                gesture_code = ( m_gesture_starts_from_right ) ? HMI_BB_GESTURE_CODE_RIGHT : HMI_BB_GESTURE_CODE_LEFT;
-                *gesture_duration_ms = duration;
-#ifdef PRINT_DEBUG_
-
-#ifdef USE_MICRO_
-sprintf(str,"FSM 2 - Recognized %d\n",gesture_code);
-serial_print(str);
-#else
-printf("FSM 2 - Recognized %d\n",gesture_code);
-#endif
-
-#endif
-            }
-#ifdef PRINT_DEBUG_
-            else
-            {
-#ifdef USE_MICRO_
-sprintf(str,"FSM 1 - Discarded %d %d %d \n",r_code,l_code,duration);
-serial_print(str);
-#else
-printf("FSM 1 - Discarded %d %d %d \n",r_code,l_code,duration);
-#endif
-            }
-#endif
-        }
-
-        break;
-
-    case 0: // gesture starts
-        if( l_code == HMI_SIGNAL_CODE_DOWN_STATE && r_code == HMI_SIGNAL_CODE_RAISE_UP && r_ms > m_min_swipe_ms )
-        {
-            m_gesture_starts_from_right = true;
-            m_fsm_state = 1;
-            m_timestamp = GET_TIME_STAMP();
-            m_var_max_gesture_ms = r_ms;
-#ifdef PRINT_DEBUG_
-
-#ifdef USE_MICRO_
-sprintf(str,"FSM 0 - Right started %d\n",r_ms);
-serial_print(str);
-#else
-printf("FSM 0 - Right started %d\n",r_ms);
-#endif
-
-#endif
-        }
-        else if( l_code == HMI_SIGNAL_CODE_RAISE_UP && r_code == HMI_SIGNAL_CODE_DOWN_STATE && l_ms > m_min_swipe_ms )
-        {
-            m_gesture_starts_from_right = false;
-            m_fsm_state = 1;
-            m_timestamp = GET_TIME_STAMP();
-            m_var_max_gesture_ms = l_ms;
-#ifdef PRINT_DEBUG_
-
-#ifdef USE_MICRO_
-sprintf(str,"FSM 0 - Left started %d\n",l_ms);
-serial_print(str);
-#else
-printf("FSM 0 - Left started %d\n",l_ms);
-#endif
-
-#endif
-        }
-        break;
-
-    default:
-        break;
-    };
-
-    if( m_tap_det.Update((range_r+range_l)/2,&duration) == HMI_TAP_CODE_HOLD )
-    {
-        gesture_code = HMI_BB_GESTURE_CODE_TAP;
-        *gesture_duration_ms = duration;
-        m_fsm_state = 0;
-    }
-
-    return gesture_code;
-}
-
-
-/**********************************************************************************
- *
- *
- *  MotionDetector class
- *
- *
- **********************************************************************************/
-
-void MotionDetector::Init(int threshold)
-{
-    m_threshold = threshold;
-    m_runonce = true;
-}
-
-
-int MotionDetector::Update(int sample,int *duration)
-{
-    int return_code;
-    bool belowCurrent, isContinuous;
-
-
-    // run once
-    if( m_runonce )
-    {
-        m_runonce = false;
-        m_timestamp = GET_TIME_STAMP();
-        m_prev_sample = sample;
-        belowCurrent  = (sample < m_threshold);
-        isContinuous  = true;
-        return_code = ( belowCurrent ) ? HMI_SIGNAL_CODE_DOWN_STATE : HMI_SIGNAL_CODE_UP_STATE;
-        *duration = 1;
-        return return_code;
-    }
-
-    *duration = 0;
-    return_code = HMI_SIGNAL_CODE_NULL;
-    belowCurrent  = (sample < m_threshold);
-    isContinuous  = ( belowCurrent ==  (m_prev_sample < m_threshold));
-    m_prev_sample = sample;
-
-    // update
-    *duration = GET_TIME_STAMP() - m_timestamp;
-    if( isContinuous )
-    {
-        return_code = ( belowCurrent ) ? HMI_SIGNAL_CODE_DOWN_STATE : HMI_SIGNAL_CODE_UP_STATE;
-    }
-    else
-    {
-        return_code = ( belowCurrent ) ? HMI_SIGNAL_CODE_DROP_DOWN : HMI_SIGNAL_CODE_RAISE_UP;
-        m_timestamp = GET_TIME_STAMP();
-    }
-
-    return return_code;
-}
-
-
-
-/**********************************************************************************
- *
- *
- *  TapDetector
- *
- *
- **********************************************************************************/
-void TapDetector::Init( int threshold, int min_down_duration_ms, int min_hold_duration_ms, bool enable_double_tap, int double_tap_min_duration_ms)
-{
-    m_threshold = threshold;
-    m_motion.Init( threshold );
-    m_min_down_duration_ms = min_down_duration_ms;
-    m_min_hold_duration_ms = min_hold_duration_ms;
-    m_min_dtap_duration_ms = double_tap_min_duration_ms;
-    m_notify_hold = true;
-    m_notify_dtap = enable_double_tap;
-    m_timestamp = GET_TIME_STAMP();
-}
-
-int TapDetector::Update( int sample, int *duration )
-{
-    int return_code;
-    int motion_code,motion_duration;
-
-    return_code = HMI_TAP_CODE_NULL;
-    *duration = 0;
-    motion_code = m_motion.Update(sample, &motion_duration);
-
-    // hold condition - down_duration > hold_time
-    if( motion_code == HMI_SIGNAL_CODE_DOWN_STATE && motion_duration > m_min_hold_duration_ms )
-    {
-        if( m_notify_hold )
-        {
-            return_code = HMI_TAP_CODE_HOLD;
-            m_notify_hold = false; // to avoid continue notification ( anti flood )
-            *duration = motion_duration;
-        }
-    }
-    else if( motion_code == HMI_SIGNAL_CODE_RAISE_UP )
-    {
-        m_notify_hold = true;
-        /* TODO add TAP single/double code */
-    }
-
-    return return_code;
-}
-
--- a/Middlewares/ST/STM32_HMI_HandGesture/HmiBBGesture.h	Wed Oct 28 14:56:58 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-/* ----------------------------------------------------------------------
- * Copyright (C) 2014 STMicroelectronics. All rights reserved.
- *
- * Project: BB gesture recognition
- * Title:   HmiBBGesture
- *
- * Description: Gesture recognition - left, right, tap
- *
- * -------------------------------------------------------------------- */
-
-#ifndef HMIBBGESTURE_H_
-#define HMIBBGESTURE_H_
-
-#ifdef __cplusplus      //c++
-extern "C"  
-{       
-#endif  
-
-#define HMI_BB_GESTURE_CODE_TAP 0
-#define HMI_BB_GESTURE_CODE_LEFT 1
-#define HMI_BB_GESTURE_CODE_RIGHT 2
-#define HMI_BB_GESTURE_CODE_NULL -1
-
-
-class MotionDetector
-{
-public:
-    MotionDetector() {};
-    ~MotionDetector() {};
-
-    void Init(int threshold);
-    int Update(int sample,int *duration);
-
-protected:
-    int m_prev_sample;
-    int m_threshold;
-    int m_timestamp;
-    bool m_runonce;
-};
-
-
-class TapDetector
-{
-public:
-    TapDetector() {};
-    ~TapDetector() {};
-    void Init( int threshold, int min_down_duration_ms, int min_hold_duration_ms, bool enable_double_tap, int double_tap_min_duration_ms);
-    int Update( int sample, int *duration );
-
-protected:
-    MotionDetector m_motion;
-    int m_threshold;
-    int m_min_down_duration_ms;
-    int m_min_hold_duration_ms;
-    int m_min_dtap_duration_ms;
-    int m_timestamp;
-    bool m_notify_hold;
-    bool m_notify_dtap;
-};
-
-
-class HmiBBGesture
-{
-public:
-    HmiBBGesture() {};
-    ~HmiBBGesture() {};
-
-    void Init(int threshold_mm, int tap_threshold_mm, int min_hold_duration_ms, int min_swipe_duration_ms, int max_gesture_duration_ms );
-    int Update(int range_r, int range_l,int *gesture_duration_ms);
-
-protected:
-    MotionDetector m_motion_r;
-    MotionDetector m_motion_l;
-    TapDetector m_tap_det;
-    int m_timestamp;
-    int m_fsm_state;
-    int m_min_swipe_ms;
-    int m_max_gesture_ms;
-    int m_var_max_gesture_ms;
-    bool m_gesture_starts_from_right;
-
-};
-#ifdef __cplusplus  //c++
-}                   
-#endif  
-#endif /* HMIBBGESTURE_H_ */
--- a/X_NUCLEO_COMMON.lib	Wed Oct 28 14:56:58 2015 +0000
+++ b/X_NUCLEO_COMMON.lib	Wed Oct 28 15:06:09 2015 +0000
@@ -1,1 +1,1 @@
-http://developer.mbed.org/teams/ST/code/X_NUCLEO_COMMON/#527e203b709b
+http://developer.mbed.org/teams/ST/code/X_NUCLEO_COMMON/#da29b5403ca1
--- a/main.cpp	Wed Oct 28 14:56:58 2015 +0000
+++ b/main.cpp	Wed Oct 28 15:06:09 2015 +0000
@@ -1,6 +1,5 @@
 #include "mbed.h"
 #include "x_nucleo_6180xa1.h"
-#include "HmiBBGesture.h"
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
@@ -40,8 +39,6 @@
 DevI2C device_i2c(VL6180X_I2C_SDA, VL6180X_I2C_SCL);
 static X_NUCLEO_6180XA1 *board=X_NUCLEO_6180XA1::Instance(&device_i2c);
 
-//HmiBBGesture gesture_reco;
-
 MeasureData_t data_sensor_top, data_sensor_bottom, data_sensor_left, data_sensor_right;
 	
 /* flags that handle interrupt request */