Changeset 1b85b3453508760034543f581cd81bf742bc4edc
- 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:
-
Legend:
- Unmodified
- Added
- Removed
-
|
r2547e8f
|
r1b85b34
|
|
| | 1 | 2007-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 | |
| 1 | 6 | 2007-04-08 L. Donnie Smith <cwiid@abstrakraft.org> |
| 2 | 7 | defs.mak |
| … |
… |
|
| 11 | 16 | wminput |
| 12 | 17 | * fixed signed/unsigned comparison warning in uinput_open and get_plugin |
| | 18 | * copied acc low-pass filter to nunchuk_acc |
| 13 | 19 | |
| 14 | 20 | 2007-04-08 Petter Reinholdtsen <pere@hungry.com> |
-
|
r9ef2b8a
|
r1b85b34
|
|
| 16 | 16 | * |
| 17 | 17 | * ChangeLog: |
| | 18 | * 2007-04-08 Arthur Peters <amp@singingwizard.org> |
| | 19 | * * added low-pass filter |
| | 20 | * |
| 18 | 21 | * 2007-03-04 L. Donnie Smith <cwiid@abstrakraft.org> |
| 19 | 22 | * * type audit (stdint, const, char booleans) |
| … |
… |
|
| 128 | 131 | } |
| 129 | 132 | |
| | 133 | #define NEW_AMOUNT 0.1 |
| | 134 | #define OLD_AMOUNT (1.0-NEW_AMOUNT) |
| | 135 | double a_x = 0, a_y = 0, a_z = 0; |
| | 136 | |
| 130 | 137 | static void process_acc(struct wiimote_acc_mesg *mesg) |
| 131 | 138 | { |
| 132 | | double a_x, a_y, a_z, a; |
| | 139 | double a; |
| 133 | 140 | double roll, pitch; |
| 134 | 141 | |
| 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; |
| 141 | 148 | |
| 142 | 149 | a = sqrt(pow(a_x,2)+pow(a_y,2)+pow(a_z,2)); |
-
|
r9ef2b8a
|
r1b85b34
|
|
| 16 | 16 | * |
| 17 | 17 | * ChangeLog: |
| | 18 | * 2007-04-08 Arthur Peters <amp@singingwizard.org> |
| | 19 | * * added debounce and low pass filter |
| | 20 | * |
| 18 | 21 | * 2007-03-04 L. Donnie Smith <cwiid@abstrakraft.org> |
| 19 | 22 | * * type audit (stdint, const, char booleans) |
| … |
… |
|
| 33 | 36 | uint16_t y; |
| 34 | 37 | }; |
| | 38 | int a_debounce, b_debounce; |
| 35 | 39 | |
| 36 | 40 | /* static objects are initialized to 0 by default */ |
| … |
… |
|
| 135 | 139 | } |
| 136 | 140 | } |
| | 141 | |
| | 142 | #define DEBOUNCE_THRESHOLD 50 |
| | 143 | |
| 137 | 144 | /* set a & b, mirror the x coordinates */ |
| 138 | 145 | 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 | } |
| 140 | 153 | } |
| 141 | 154 | else { |
| 142 | 155 | a = ir_mesg->src[a_index]; |
| 143 | 156 | a.x = WIIMOTE_IR_X_MAX - a.x; |
| | 157 | a_debounce = 0; |
| 144 | 158 | } |
| 145 | 159 | 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 | } |
| 147 | 167 | } |
| 148 | 168 | else { |
| 149 | 169 | b = ir_mesg->src[b_index]; |
| 150 | 170 | b.x = WIIMOTE_IR_X_MAX - b.x; |
| | 171 | b_debounce = 0; |
| 151 | 172 | } |
| 152 | 173 | |
| … |
… |
|
| 217 | 238 | |
| 218 | 239 | 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; |
| 221 | 246 | |
| 222 | 247 | return &data; |
-
|
r9ef2b8a
|
r1b85b34
|
|
| 136 | 136 | } |
| 137 | 137 | |
| | 138 | #define NEW_AMOUNT 0.1 |
| | 139 | #define OLD_AMOUNT (1.0-NEW_AMOUNT) |
| | 140 | double a_x = 0, a_y = 0, a_z = 0; |
| | 141 | |
| 138 | 142 | static void process_nunchuk(struct wiimote_nunchuk_mesg *mesg) |
| 139 | 143 | { |
| 140 | | double a_x, a_y, a_z, a; |
| | 144 | double a; |
| 141 | 145 | double roll, pitch; |
| 142 | 146 | |
| 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; |
| 149 | 153 | |
| 150 | 154 | a = sqrt(pow(a_x,2)+pow(a_y,2)+pow(a_z,2)); |