I2C hang recover function added

Dependencies:   UniGraphic mbed vt100

In this version, check_i2c_pins function was added in edge_mgr.cpp.

プログラムの起動時、I2Cモジュールを初期化する前に、I2Cに使用するピンの電位を確認し
もし一方でも Low に張り付いていた場合、SCL を GPIO 出力に設定して 
所定回数 (I2C_UNLOCK_TRIAL_CYCLE) 反転させることにより、疑似リセットクロックを生成します。

その後は、通常の起動手順に復帰し、以降はこれまでと同様の動作をします。

Revision:
0:d895cd1cd897
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/edge_sensor/edge_accel.h	Tue Apr 03 08:30:29 2018 +0000
@@ -0,0 +1,78 @@
+#ifndef _EDGE_ACCEL_H_
+#define _EDGE_ACCEL_H_
+#include "mbed.h"
+#include "edge_sensor.h"
+#include "MMA8451Q.h"
+
+/**
+ * edge_accel edge_sensor which manage the accelerometer sensor (MMA8451Q)
+ * @note The behavior of this class is somewhat exceptional as an edge_sensor
+ * @note it samples and accumulates data which is the abs sum of current
+ * @note values and previous values every 0.1 sec
+ * @note and in each "interval" it delivers the averaged value 
+ */
+
+class edge_accel : public edge_sensor {
+public:
+/**
+ * constructor
+ * @param the MMA8451Q object
+ */
+    edge_accel(MMA8451Q *accel) ;
+    
+/**
+ * destructor
+ */
+    ~edge_accel(void) ;
+
+/**
+ * clear and reset interval values
+ */
+    virtual void    reset(void) ;
+//    virtual void    prepare(void) ;
+
+/**
+ * sample calculate the average value
+ * from _accumulation and _sample_count
+ * the average value is assigned to _value
+ * and currnt _sample_count is stored in _num_sampled
+ * then both _accumuation and _sample_count will be cleared
+ * @returns 0: success non-0: failure
+ */
+    virtual int    sample(void) ;
+    
+/**
+ * deliver the value to the afero cloud
+ */
+    virtual int     deliver(void) ;
+    
+/**
+ * show the data in the display (TFT)
+ */
+    virtual void    show(void) ;
+        
+/**
+ * accum this is the real sampling
+ * and the differences of sampled values 
+ * and previous values are calcurated and accumulated
+ * @returns 0: success non-0: failure
+ */
+    int accum(void) ;
+    
+/**
+ * Clear internal values
+ */
+    void clear_value(void) ;
+
+private:
+    MMA8451Q *_accel ;
+    float   _value ;
+    int32_t _num_sampled ;
+    int32_t _sample_count ;
+    int32_t _accumulation ;
+    int16_t _prev_x ;
+    int16_t _prev_y ;
+    int16_t _prev_z ;
+} ;
+
+#endif /* _EDGE_ACCEL_H_ */
\ No newline at end of file