mbed with Nintendo DS touchpad, accelerometer & touchpad.

Dependencies:   mbed

Committer:
Clemo
Date:
Wed May 05 12:10:15 2010 +0000
Revision:
0:0a76ae27065b

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Clemo 0:0a76ae27065b 1 /*
Clemo 0:0a76ae27065b 2 mbed touchpad & accelerometer experiments.
Clemo 0:0a76ae27065b 3
Clemo 0:0a76ae27065b 4 CPV, 14/09/2009
Clemo 0:0a76ae27065b 5 */
Clemo 0:0a76ae27065b 6
Clemo 0:0a76ae27065b 7
Clemo 0:0a76ae27065b 8 #include <string.h>
Clemo 0:0a76ae27065b 9 #include "filters.h"
Clemo 0:0a76ae27065b 10
Clemo 0:0a76ae27065b 11
Clemo 0:0a76ae27065b 12 void FilterBoxF::initialise(unsigned int size)
Clemo 0:0a76ae27065b 13 {
Clemo 0:0a76ae27065b 14 m_size = size;
Clemo 0:0a76ae27065b 15 if (m_size>FILTER_MAX_SIZE) m_size = FILTER_MAX_SIZE;
Clemo 0:0a76ae27065b 16 memset(m_history,0,sizeof(float)*FILTER_MAX_SIZE);
Clemo 0:0a76ae27065b 17 m_index = 0;
Clemo 0:0a76ae27065b 18 m_out = 0;
Clemo 0:0a76ae27065b 19 }
Clemo 0:0a76ae27065b 20
Clemo 0:0a76ae27065b 21
Clemo 0:0a76ae27065b 22 float FilterBoxF::tick(float in)
Clemo 0:0a76ae27065b 23 {
Clemo 0:0a76ae27065b 24 m_history[m_index] = in;
Clemo 0:0a76ae27065b 25 m_index += 1;
Clemo 0:0a76ae27065b 26 if (m_index>=m_size) m_index = 0;
Clemo 0:0a76ae27065b 27
Clemo 0:0a76ae27065b 28 float sum = 0;
Clemo 0:0a76ae27065b 29 for (int i=0; i<m_size; i++)
Clemo 0:0a76ae27065b 30 {
Clemo 0:0a76ae27065b 31 sum += m_history[i];
Clemo 0:0a76ae27065b 32 }
Clemo 0:0a76ae27065b 33 m_out = sum/m_size;
Clemo 0:0a76ae27065b 34 return m_out;
Clemo 0:0a76ae27065b 35 }
Clemo 0:0a76ae27065b 36
Clemo 0:0a76ae27065b 37 //=================================
Clemo 0:0a76ae27065b 38
Clemo 0:0a76ae27065b 39 void FilterBoxI::initialise(unsigned int size)
Clemo 0:0a76ae27065b 40 {
Clemo 0:0a76ae27065b 41 m_size = size;
Clemo 0:0a76ae27065b 42 if (m_size>FILTER_MAX_SIZE) m_size = FILTER_MAX_SIZE;
Clemo 0:0a76ae27065b 43 memset(m_history,0,sizeof(int)*FILTER_MAX_SIZE);
Clemo 0:0a76ae27065b 44 m_index = 0;
Clemo 0:0a76ae27065b 45 m_out = 0;
Clemo 0:0a76ae27065b 46 }
Clemo 0:0a76ae27065b 47
Clemo 0:0a76ae27065b 48
Clemo 0:0a76ae27065b 49 int FilterBoxI::tick(int in)
Clemo 0:0a76ae27065b 50 {
Clemo 0:0a76ae27065b 51 m_history[m_index] = in;
Clemo 0:0a76ae27065b 52 m_index += 1;
Clemo 0:0a76ae27065b 53 if (m_index>=m_size) m_index = 0;
Clemo 0:0a76ae27065b 54
Clemo 0:0a76ae27065b 55 int sum = 0;
Clemo 0:0a76ae27065b 56 for (int i=0; i<m_size; i++)
Clemo 0:0a76ae27065b 57 {
Clemo 0:0a76ae27065b 58 sum += m_history[i];
Clemo 0:0a76ae27065b 59 }
Clemo 0:0a76ae27065b 60 m_out = sum/m_size;
Clemo 0:0a76ae27065b 61 return m_out;
Clemo 0:0a76ae27065b 62 }
Clemo 0:0a76ae27065b 63
Clemo 0:0a76ae27065b 64 //=================================
Clemo 0:0a76ae27065b 65
Clemo 0:0a76ae27065b 66 void FilterIirI::initialise(int tau, int limit)
Clemo 0:0a76ae27065b 67 {
Clemo 0:0a76ae27065b 68 m_tau = tau;
Clemo 0:0a76ae27065b 69 m_limit = limit;
Clemo 0:0a76ae27065b 70 m_remainder = 0;
Clemo 0:0a76ae27065b 71 m_out = 0;
Clemo 0:0a76ae27065b 72 }
Clemo 0:0a76ae27065b 73
Clemo 0:0a76ae27065b 74
Clemo 0:0a76ae27065b 75 int FilterIirI::tick(int in)
Clemo 0:0a76ae27065b 76 {
Clemo 0:0a76ae27065b 77 int temp = in - m_out + m_remainder;
Clemo 0:0a76ae27065b 78 m_remainder = temp % m_tau;
Clemo 0:0a76ae27065b 79 m_out += temp / m_tau;
Clemo 0:0a76ae27065b 80 if (m_out>m_limit) m_out = m_limit;
Clemo 0:0a76ae27065b 81 if (m_out<-m_limit) m_out = -m_limit;
Clemo 0:0a76ae27065b 82 return m_out;
Clemo 0:0a76ae27065b 83 }
Clemo 0:0a76ae27065b 84