@@ -148,21 +148,20 @@ int compare(const void* a, const void* b)
148
148
return x - y;
149
149
}
150
150
151
- int analogReadFilter (int pin)
151
+ // Median filter, use with odd values (non even).
152
+ int analogReadFilter (int pin, int total_reads)
152
153
{
153
- uint16_t measurements[ANALOG_FILTER_M_COUNT] ;
154
+ uint16_t * measurements = ( uint16_t *) malloc (total_reads * sizeof ( uint16_t )) ;
154
155
155
- for (int i = 0 ; i < ANALOG_FILTER_M_COUNT ; i++)
156
+ for (int i = 0 ; i < total_reads ; i++)
156
157
measurements[i] = analogRead (pin);
157
158
158
- float sum = 0 ;
159
+ qsort (measurements, total_reads, sizeof ( uint16_t ), compare) ;
159
160
160
- qsort (measurements, ANALOG_FILTER_M_COUNT, sizeof ( int16_t ), compare) ;
161
+ int filtered_val = measurements[total_reads / 2 ] ;
161
162
162
- for (int i = ANALOG_FILTER_M_DISCARD; i < ANALOG_FILTER_M_COUNT - ANALOG_FILTER_M_DISCARD; i++)
163
- sum += measurements[i];
164
-
165
- return sum / (ANALOG_FILTER_M_COUNT - 2 * ANALOG_FILTER_M_DISCARD);
163
+ free (measurements);
164
+ return filtered_val;
166
165
}
167
166
168
167
int readToCurve (int reading, int index)
@@ -202,32 +201,34 @@ int hat(int hat_x, int hat_y)
202
201
}
203
202
}
204
203
205
- int axisRead (int index, int option = CURVE)
204
+ int axisRead (int index, int filter_total, int option = CURVE)
206
205
{
207
206
if (option == CURVE) {
208
207
return readToCurve (
209
- constrain (
210
- map (
211
- analogReadFilter (
212
- analog_pins[index]),
213
- calibration_data.min [index],
214
- calibration_data.max [index],
215
- 0 ,
216
- 1023 ),
208
+ map (
209
+ analogReadFilter (
210
+ analog_pins[index],
211
+ filter_total
212
+ ),
213
+ calibration_data.min [index],
214
+ calibration_data.max [index],
217
215
0 ,
218
- 1023 ),
219
- index);
216
+ 1023
217
+ ),
218
+ index
219
+ );
220
220
}
221
- return constrain (
222
- map (
223
- analogReadFilter (
224
- analog_pins[index]),
225
- calibration_data.min [index],
226
- calibration_data.max [index],
227
- 0 ,
228
- 1023 ),
221
+ return map (
222
+ analogReadFilter (
223
+ analog_pins[index],
224
+ filter_total
225
+ ),
226
+ calibration_data.min [index],
227
+ calibration_data.max [index],
229
228
0 ,
230
- 1023 );
229
+ 1023
230
+ );
231
+ }
231
232
232
233
int buttonRead (int index)
233
234
{
@@ -263,10 +264,10 @@ void loop()
263
264
for (int btn = 0 ; btn < (sizeof (digital_pins) / sizeof (int )); btn++)
264
265
joystick.setButton (btn, buttonRead (btn));
265
266
266
- // read the analog inputs
267
- joystick.setYAxis (axisRead (0 , CURVE));
268
- joystick.setXAxis (axisRead (1 , CURVE));
269
- joystick.setZAxis (axisRead (2 , LINEAR));
267
+ // read the axes
268
+ joystick.setYAxis (axisRead (0 , 3 , CURVE));
269
+ joystick.setXAxis (axisRead (1 , 3 , CURVE));
270
+ joystick.setZAxis (axisRead (2 , 5 , LINEAR));
270
271
271
272
/* joystick.setRxAxis(constrain(map(analog(A8), */
272
273
/* calibration_data.min[2], */
0 commit comments