Sensor updates
This commit is contained in:
parent
f4e95668ce
commit
80c8ccd54b
8 changed files with 251 additions and 179 deletions
|
|
@ -14,6 +14,9 @@ FilterOnePole rollFilter;
|
|||
FilterOnePole sliderFilterExtra;
|
||||
FilterOnePole sliderFilterPB;
|
||||
FilterOnePole sliderFilterLever;
|
||||
float sliderMAExtra = 0.0;
|
||||
float sliderMAPB = 0.0;
|
||||
float sliderMALever = 0.0;
|
||||
|
||||
Adafruit_MPR121 touchSensorKeys = Adafruit_MPR121();
|
||||
Adafruit_MPR121 touchSensorRoller = Adafruit_MPR121();
|
||||
|
|
@ -49,13 +52,13 @@ void initHardware() {
|
|||
|
||||
breathFilter.setFilter(LOWPASS, FILTER_FREQ, 0.0); // create a one pole (RC) lowpass filter
|
||||
breathAltFilter.setFilter(LOWPASS, FILTER_FREQ, 0.0); // create a one pole (RC) lowpass filter
|
||||
spikeFilter.setFilter(HIGHPASS, 200, 0.0); // create a one pole (RC) lowpass filter
|
||||
tiltFilter.setFilter(LOWPASS, 2, 0.0); // create a one pole (RC) lowpass filter
|
||||
rollFilter.setFilter(LOWPASS, 2, 0.0); // create a one pole (RC) lowpass filter
|
||||
spikeFilter.setFilter(HIGHPASS, SPIKE_FILTER_FREQ, 0.0); // create a one pole (RC) lowpass filter
|
||||
tiltFilter.setFilter(LOWPASS, ICM_FILTER_FREQ, 0.0); // create a one pole (RC) lowpass filter
|
||||
rollFilter.setFilter(LOWPASS, ICM_FILTER_FREQ, 0.0); // create a one pole (RC) lowpass filter
|
||||
icmSensor.begin_I2C(ICM20948_I2CADDR_DEFAULT, &MainI2CBus);
|
||||
sliderFilterExtra.setFilter(LOWPASS, 1.0, 0.0);
|
||||
sliderFilterLever.setFilter(LOWPASS, 1.0, 0.0);
|
||||
sliderFilterPB.setFilter(LOWPASS, 1.0, 0.0);
|
||||
sliderFilterExtra.setFilter(INTEGRATOR, 0.75, 0.0);
|
||||
sliderFilterLever.setFilter(INTEGRATOR, 0.75, 0.0);
|
||||
sliderFilterPB.setFilter(INTEGRATOR, 0.75, 0.0);
|
||||
|
||||
ledStrip.begin();
|
||||
|
||||
|
|
@ -76,16 +79,17 @@ void initHardware() {
|
|||
//touchSensorUtil.writeRegister(MPR121_CONFIG1, 0x3f); // default, 16uA charge current
|
||||
//touchSensorUtil.writeRegister(MPR121_CONFIG2, 0xE0); // 0.5uS encoding, 1ms period
|
||||
|
||||
if (!pressureSensorMain.begin(MPRLS_DEFAULT_ADDR, &MainI2CBus)) {
|
||||
if (!pressureSensorMain.begin(MPRLS_DEFAULT_ADDR, &AuxI2CBus)) {
|
||||
displayError("Main pressure sensor error");
|
||||
errorWait();
|
||||
}
|
||||
|
||||
if (!pressureSensorAlt.begin(MPRLS_DEFAULT_ADDR, &AuxI2CBus)) {
|
||||
if (!pressureSensorAlt.begin(MPRLS_DEFAULT_ADDR, &MainI2CBus)) {
|
||||
displayError("Alt pressure sensor error");
|
||||
errorWait();
|
||||
}
|
||||
|
||||
|
||||
if (!icmSensor.begin_I2C(ICM20948_I2CADDR_DEFAULT, &MainI2CBus)) {
|
||||
displayError("ICM sensor error");
|
||||
errorWait();
|
||||
|
|
@ -180,37 +184,61 @@ uint16_t utilTouched() {
|
|||
}
|
||||
|
||||
int readSpikePressure() {
|
||||
return spikeFilter.input(pressureSensorMain.readPressure()) * PRESSURE_SENS_MULTIPLIER;
|
||||
return spikeFilter.output();
|
||||
}
|
||||
|
||||
int readPressure() {
|
||||
float p = pressureSensorMain.readPressure();
|
||||
return breathFilter.input(p) * PRESSURE_SENS_MULTIPLIER;
|
||||
int r = breathFilter.input(p) * PRESSURE_SENS_MULTIPLIER;
|
||||
spikeFilter.input(r);
|
||||
return r;
|
||||
}
|
||||
|
||||
int readAltPressure() {
|
||||
return breathAltFilter.input(pressureSensorAlt.readPressure()) * PRESSURE_SENS_MULTIPLIER;
|
||||
}
|
||||
|
||||
float readSlider(Slider id) {
|
||||
float diff = 0.0;
|
||||
int16_t readSlider(Slider id, int thr) {
|
||||
float filtered = 0.0;
|
||||
float a = 0, b = 0;
|
||||
FilterOnePole *filter;
|
||||
|
||||
switch (id) {
|
||||
case SLIDER_PITCH_BEND:
|
||||
diff = touchSensorUtil.filteredData(pbSliderPin1) - touchSensorUtil.filteredData(pbSliderPin2);
|
||||
filtered = sliderFilterPB.input(diff);
|
||||
break;
|
||||
a = touchSensorUtil.filteredData(pbSliderPin1);
|
||||
b = touchSensorUtil.filteredData(pbSliderPin2);
|
||||
filter = &sliderFilterPB;
|
||||
break;
|
||||
case SLIDER_EXTRA:
|
||||
diff = touchSensorRoller.filteredData(extraSliderPin1) - touchSensorRoller.filteredData(extraSliderPin2);
|
||||
filtered = sliderFilterExtra.input(diff);
|
||||
break;
|
||||
a = touchSensorRoller.filteredData(extraSliderPin1);
|
||||
b = touchSensorRoller.filteredData(extraSliderPin2);
|
||||
filter = &sliderFilterExtra;
|
||||
/*
|
||||
Serial.print(">a:");
|
||||
Serial.println(a);
|
||||
Serial.print(">b:");
|
||||
Serial.println(b);
|
||||
Serial.print(">thr:");
|
||||
Serial.println(thr);
|
||||
*/
|
||||
break;
|
||||
case SLIDER_LEVER:
|
||||
diff = touchSensorUtil.filteredData(leverSliderPin1) - touchSensorUtil.filteredData(leverSliderPin2);
|
||||
filtered = sliderFilterLever.input(diff);
|
||||
break;
|
||||
a = touchSensorUtil.filteredData(leverSliderPin1);
|
||||
b = touchSensorUtil.filteredData(leverSliderPin2);
|
||||
filter = &sliderFilterLever;
|
||||
break;
|
||||
default:
|
||||
return 0.0;
|
||||
break;
|
||||
}
|
||||
|
||||
return filtered;
|
||||
if ((a + b) <= (thr + thr - SLIDER_TOUCH_OFFSET)) {
|
||||
filtered = filter->input(a - b);
|
||||
} else {
|
||||
return INT16_MIN;
|
||||
}
|
||||
|
||||
return filtered * 100;
|
||||
}
|
||||
|
||||
icm_result_t readICM() {
|
||||
|
|
@ -224,4 +252,27 @@ icm_result_t readICM() {
|
|||
tiltFilter.input(mag.magnetic.y),
|
||||
rollFilter.input(mag.magnetic.x),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
int readRawSlider(Slider id) {
|
||||
float a, b;
|
||||
switch (id) {
|
||||
case SLIDER_PITCH_BEND:
|
||||
a = touchSensorUtil.filteredData(pbSliderPin1);
|
||||
b = touchSensorUtil.filteredData(pbSliderPin2);
|
||||
break;
|
||||
case SLIDER_EXTRA:
|
||||
a = touchSensorRoller.filteredData(extraSliderPin1);
|
||||
b = touchSensorRoller.filteredData(extraSliderPin2);
|
||||
break;
|
||||
case SLIDER_LEVER:
|
||||
a = touchSensorUtil.filteredData(leverSliderPin1);
|
||||
b = touchSensorUtil.filteredData(leverSliderPin2);
|
||||
break;
|
||||
default:
|
||||
return 0.0;
|
||||
break;
|
||||
}
|
||||
|
||||
return (a + b) / 2;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue