/*
https://forum.arduino.cc/t/schiebepotentiometer-mit-arduino/1245197/6
https://wokwi.com/projects/394602087747438593
2024-04-08 by noiasca
code in thread
to be deleted 2024-07
*/
class Slider {
const uint8_t pin; // analog pin to read
const uint16_t filterFactor; // weight of each new value
float filteredValue = 0; // current value
uint16_t count = 0; // current measurements under filter factors
public:
Slider (uint8_t pin, uint16_t filterFactor = 100) : pin(pin), filterFactor(filterFactor) {}
// wenn man mag, aber nicht notwendig
void begin() {
pinMode(pin, INPUT);
}
// fitered read
uint16_t read() {
int adc = analogRead(pin);
int newValue = map(adc, 0, 1023, 0, 100);
uint16_t factor = filterFactor;
if (count < filterFactor) {
factor = count++;
}
filteredValue = ((filteredValue * factor) + newValue) / (factor + 1);
return round(filteredValue);
}
};
// Slider slider[] {A0, A1}; // mit default Parameter für den Faktor
Slider slider[] {{A0, 10}, {A1, 20}}; // verschiedene Faktoren
// muss das echt ein String Objekt sein?!?
void sendSliderValues() {
String builtString;
builtString.reserve(42);
for (size_t i = 0; i < sizeof(slider) / sizeof(slider[0]); i++) {
if (i != 0) builtString += '|';
builtString += slider[i].read();
}
Serial.println(builtString);
}
void setup() {
Serial.begin(9600);
for (auto &i : slider) i.begin();
}
void loop() {
sendSliderValues();
delay(20);
}