Sensor updates

This commit is contained in:
Brian Hrebec 2024-08-20 13:45:22 -05:00
parent f4e95668ce
commit 80c8ccd54b
8 changed files with 251 additions and 179 deletions

View file

@ -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;
}