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) 反転させることにより、疑似リセットクロックを生成します。
その後は、通常の起動手順に復帰し、以降はこれまでと同様の動作をします。
edge_sensor/edge_pressure.h
- Committer:
- gaku_miyagawa
- Date:
- 2018-06-18
- Revision:
- 2:de22987be9ba
- Parent:
- 0:d895cd1cd897
File content as of revision 2:de22987be9ba:
#ifndef _EDGE_PRESSURE_H_ #define _EDGE_PRESSURE_H_ #include "mbed.h" #include "edge_sensor.h" #include "PSE530.h" /** * edge_pressure edge_sensor for measuring gas presssure */ class edge_pressure : public edge_sensor { public: /** * constructor * @param *pse PSE530 pressure sensor object */ edge_pressure(PSE530 *pse, DigitalOut *en) ; /** * destructor */ ~edge_pressure(void) ; /** * reset and clear internal values */ virtual void reset(void) ; /** * prepare for sampling (not used) */ virtual void prepare(void) ; /** * sample the value * @returns 0: success non-0: failure */ virtual int sample(void) ; /** * deliver the sampled value to afero cloud */ virtual int deliver(void) ; /** * show the value in the display (TFT) */ virtual void show(void) ; // virtual void send_config(void) ; /* send config data to cloud */ // virtual void recv_config(void) ; /* receive config data from cloud */ /** * get_value sample sensor value and calcurate it to the metric value * @returns measured value in kgf/cm2 */ float get_value(void) ; /** * Set threshold mode * @param mode int 0: absolute value 1: relative value in percent */ void set_thr_mode(int mode) { _thr_mode = mode ; } /** * Get threshold mode * @returns the mode 0: absolute value 1: relative value in percent */ int get_thr_mode(void) { return _thr_mode ; } /** * Set higher threshold * @param thr_high int16_t the higher threshold */ void set_thr_high(int16_t thr_high) ; /** * Get higher threshold, the value is calcurated with expected value * @param expected float the expected pressure value for current temperature */ float get_thr_high(float expected) ; /** * Set lower threshold * @param thr_low int16_t the lower threshold */ void set_thr_low(int16_t thr_low) ; /** * Get lower threshold, the value is calcurated with expected value * @param expected float the expected pressure value for current temperature */ float get_thr_low(float expected) ; /** * draw triangle pointer for GAS pressure mode display */ void drawPointer(int c) ; private: PSE530 *_pse ; DigitalOut *_en ; float _value ; float _thr_high ; float _thr_low ; int _thr_mode ; float _expected ; float _higher ; float _lower ; } ; float temp2expected(float temp) ; extern float *current_temp ; #endif /* _EDGE_PRESSURE_H_ */