Changeset 1b85b3453508760034543f581cd81bf742bc4edc

Show
Ignore:
Timestamp:
04/09/07 00:27:22 (6 years ago)
Author:
dsmith <dsmith@…>
Children:
e39b37ab41f0238d01273bb43a18bb92e0052bad
Parents:
2547e8f25e763b200d31004cde5b97f428d0afc9
git-author:
L. Donnie Smith <donnie.smith@…> (04/09/07 00:27:22)
git-committer:
dsmith <dsmith@…> (04/09/07 00:27:22)
Message:

plugin improvements (ir src debounce, low-pass filters) (#5)

git-svn-id: http://abstrakraft.org/cwiid/svn/trunk@73 918edb2d-ff29-0410-9de2-eb38e7f22bc7

Files:
4 modified

Legend:

Unmodified
Added
Removed
  • ChangeLog

    r2547e8f r1b85b34  
     12007-04-08 Arthur Peters <amp@singingwizard.org> 
     2        wminput 
     3        * added debounce and low-pass filter to ir_ptr plugin 
     4        * added low-pass filter to acc plugin 
     5 
    162007-04-08 L. Donnie Smith <cwiid@abstrakraft.org> 
    27        defs.mak 
     
    1116        wminput 
    1217        * fixed signed/unsigned comparison warning in uinput_open and get_plugin 
     18        * copied acc low-pass filter to nunchuk_acc 
    1319 
    14202007-04-08 Petter Reinholdtsen <pere@hungry.com> 
  • wminput/plugins/acc/acc.c

    r9ef2b8a r1b85b34  
    1616 * 
    1717 *  ChangeLog: 
     18 *  2007-04-08 Arthur Peters <amp@singingwizard.org> 
     19 *  * added low-pass filter 
     20 * 
    1821 *  2007-03-04 L. Donnie Smith <cwiid@abstrakraft.org> 
    1922 *  * type audit (stdint, const, char booleans) 
     
    128131} 
    129132 
     133#define NEW_AMOUNT 0.1 
     134#define OLD_AMOUNT (1.0-NEW_AMOUNT) 
     135double a_x = 0, a_y = 0, a_z = 0; 
     136 
    130137static void process_acc(struct wiimote_acc_mesg *mesg) 
    131138{ 
    132         double a_x, a_y, a_z, a; 
     139        double a; 
    133140        double roll, pitch; 
    134141 
    135         a_x = ((double)mesg->x - acc_zero.x) / 
    136               (acc_one.x - acc_zero.x); 
    137         a_y = ((double)mesg->y - acc_zero.y) / 
    138               (acc_one.y - acc_zero.y); 
    139         a_z = ((double)mesg->z - acc_zero.z) / 
    140               (acc_one.z - acc_zero.z); 
     142        a_x = (((double)mesg->x - acc_zero.x) / 
     143              (acc_one.x - acc_zero.x))*NEW_AMOUNT + a_x*OLD_AMOUNT; 
     144        a_y = (((double)mesg->y - acc_zero.y) / 
     145              (acc_one.y - acc_zero.y))*NEW_AMOUNT + a_y*OLD_AMOUNT; 
     146        a_z = (((double)mesg->z - acc_zero.z) / 
     147              (acc_one.z - acc_zero.z))*NEW_AMOUNT + a_z*OLD_AMOUNT; 
    141148 
    142149        a = sqrt(pow(a_x,2)+pow(a_y,2)+pow(a_z,2)); 
  • wminput/plugins/ir_ptr/ir_ptr.c

    r9ef2b8a r1b85b34  
    1616 * 
    1717 *  ChangeLog: 
     18 *  2007-04-08 Arthur Peters <amp@singingwizard.org> 
     19 *  * added debounce and low pass filter 
     20 * 
    1821 *  2007-03-04 L. Donnie Smith <cwiid@abstrakraft.org> 
    1922 *  * type audit (stdint, const, char booleans) 
     
    3336        uint16_t y; 
    3437}; 
     38int a_debounce, b_debounce; 
    3539 
    3640/* static objects are initialized to 0 by default */ 
     
    135139                } 
    136140        } 
     141 
     142#define DEBOUNCE_THRESHOLD 50 
     143 
    137144        /* set a & b, mirror the x coordinates */ 
    138145        if (a_index == -1) { 
    139                 a.valid = 0; 
     146                a_debounce++; 
     147                if( a_debounce > DEBOUNCE_THRESHOLD ) { 
     148                        a.valid = 0; 
     149                } 
     150                else { 
     151                        a = prev_a; 
     152                } 
    140153        } 
    141154        else { 
    142155                a = ir_mesg->src[a_index]; 
    143156                a.x = WIIMOTE_IR_X_MAX - a.x; 
     157                a_debounce = 0; 
    144158        } 
    145159        if (b_index == -1) { 
    146                 b.valid = 0; 
     160                b_debounce++; 
     161                if( b_debounce > DEBOUNCE_THRESHOLD ) { 
     162                        b.valid = 0; 
     163                } 
     164                else { 
     165                        b = prev_b; 
     166                } 
    147167        } 
    148168        else { 
    149169                b = ir_mesg->src[b_index]; 
    150170                b.x = WIIMOTE_IR_X_MAX - b.x; 
     171                b_debounce = 0; 
    151172        } 
    152173 
     
    217238 
    218239        data.axes[0].valid = data.axes[1].valid = c.valid; 
    219         data.axes[0].value = c.x; 
    220         data.axes[1].value = c.y; 
     240 
     241#define NEW_AMOUNT 0.6 
     242#define OLD_AMOUNT (1.0-NEW_AMOUNT) 
     243 
     244        data.axes[0].value = c.x*NEW_AMOUNT + data.axes[0].value*OLD_AMOUNT; 
     245        data.axes[1].value = c.y*NEW_AMOUNT + data.axes[1].value*OLD_AMOUNT; 
    221246 
    222247        return &data; 
  • wminput/plugins/nunchuk_acc/nunchuk_acc.c

    r9ef2b8a r1b85b34  
    136136} 
    137137 
     138#define NEW_AMOUNT 0.1 
     139#define OLD_AMOUNT (1.0-NEW_AMOUNT) 
     140double a_x = 0, a_y = 0, a_z = 0; 
     141 
    138142static void process_nunchuk(struct wiimote_nunchuk_mesg *mesg) 
    139143{ 
    140         double a_x, a_y, a_z, a; 
     144        double a; 
    141145        double roll, pitch; 
    142146 
    143         a_x = ((double)mesg->acc_x - acc_zero.x) / 
    144               (acc_one.x - acc_zero.x); 
    145         a_y = ((double)mesg->acc_y - acc_zero.y) / 
    146               (acc_one.y - acc_zero.y); 
    147         a_z = ((double)mesg->acc_z - acc_zero.z) / 
    148               (acc_one.z - acc_zero.z); 
     147        a_x = (((double)mesg->acc_x - acc_zero.x) / 
     148              (acc_one.x - acc_zero.x))*NEW_AMOUNT + a_x*OLD_AMOUNT; 
     149        a_y = (((double)mesg->acc_y - acc_zero.y) / 
     150              (acc_one.y - acc_zero.y))*NEW_AMOUNT + a_y*OLD_AMOUNT; 
     151        a_z = (((double)mesg->acc_z - acc_zero.z) / 
     152              (acc_one.z - acc_zero.z))*NEW_AMOUNT + a_z*OLD_AMOUNT; 
    149153 
    150154        a = sqrt(pow(a_x,2)+pow(a_y,2)+pow(a_z,2));