關 閉

新聞中心

EEPW首頁 > 工控自動化 > 設計應用 > 觸控設備手勢喚醒的設計思路及其實現(xiàn)

觸控設備手勢喚醒的設計思路及其實現(xiàn)

作者: 時間:2012-07-14 來源:網(wǎng)絡 收藏
示例代碼2

本文引用地址:http://2s4d.com/article/160306.htm

  // example interrupt function where this might be implemented

  __interrupt void TimedInterrupt( void )

  {

  uint8 proximity_counts;

  uint8 filtered_counts;

  ....

  ....

  if ( device_status == SLEEP_MODE )

  {

  // read one byte from register 0x16

  proximity_counts = read_i2c_register(MAX44000_ADDR,0x16,1);

  // weights[QUEUE_SIZE] contains the filter weights for the FIR filter

  // data_queue[QUEUE_SIZE] is a FIFO queue meant to be the input to the filter

  filtered_counts = fir_filter(proximity_counts,weights,data_queue);

  if (filtered_counts 》 WAKEUP_THRESHOLD)

  {

  device_status = WAKE_MODE;

  ...

  }

  else

  {

  // do whatever it is you need to in sleep mode

  ...

  ...

  }

  }

  ...

  ...

  }

  /**

  * fir_filter()

  *

  * Implements an FIR filter in the form

  * y = w[0]*x[0] + w[1]*x[1] + 。。.+ w[QUEUE_SIZE]*x[QUEUE_SIZE]

  *

  * Arguments:

  * uint8 input - newest datapoint taken (that is, x[0])

  * uint8 *weights - w[0]。。.w[QUEUE_SIZE]

  * uint8 *queue - the discrete sequence x[0]。。.x[QUEUE_SIZE]

  *

  * Returns:

  * The FIR-filtered output, y

  */

  uint8 fir_filter(uint8 input, uint8 *weights, uint8 *queue)

  {

  uint8 i;

  int sum = 0;

  // pop first entry in the queue, then

  // push new data into the last position

  push_into_queue(queue,input);

  // input is now x[0]

  for (i=0; i {

  sum += weights[i]*queue[i];

  }

  return (sum/QUEUE_SIZE);

  }



評論


相關推薦

技術專區(qū)

關閉