Stimmen die Werte?
Dann ist das die Kurzfassung. 80 Zeilen Code und wenn die ersten oben weg gehen und die Klammern nicht jede Zeile füllen, sinds nur noch etwa 50
/*
Bedingung ist, das der Sensor zwischen AnalogPin und GND geschalten ist
zwischen AnalogPin und +5V liegt ein Pullup
Berechnung der Widerstandswerte auf Basis der Kalkulation aus:
https://forum.arduino.cc/t/mehrere-fsr-sensoren-mit-arduino-mega/908917/86?u=my_xy_projekt
*/
const byte fsrPins[] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9}; // the FSR and 10K pulldown are connected to a0 <- Dieser Kommentar war original drin und ist FALSCH!
const byte sensorZahl = sizeof(fsrPins) / sizeof(fsrPins[0]);
unsigned int fsrReading[sensorZahl]; // the analog reading from the FSR resistor divider
// Messwerte
// Das geht noch anders mit einem 2D-Array, aber erstmal anfangen....
const unsigned int adcWert[] = {1014, 1003, 911, 751, 652, 571, 526, 490, 464, 435, 410, 399, 367, 354, 336, 322, 297, 276, 234, 205};
const byte stuetzWerte = sizeof(adcWert) / sizeof(adcWert[0]);
const unsigned long nWert[stuetzWerte] = {100, 1000, 1500, 2000, 2500, 3000, 3500, 4000,
//0.1 1 1,5 2 2,5 3 3,5 4
4500, 5000, 5500, 6000, 6500, 7000, 8000, 9000,
//4,5 5 5,5 6 6,5 7 8 9
10000, 13636, 27580, 65600
//10 13,636 27,58 65,6 Newton
}; // Der Wert ist *1000 wegen ohne Nachkommastelle!!
unsigned int druck = 0;
void setup()
{
Serial.begin(115200);
Serial.println(F("Start..."));
}
void loop(void)
{
readSensors ();
rechneSensors();
delay(2000);
}
void readSensors()
{
for (byte i = 0; i < sensorZahl; i++)
{
fsrReading[i] = analogRead(fsrPins[i]);
}
}
void rechneSensors()
{
static unsigned long lastdruck[sensorZahl] = {0};
for (byte b = 0; b < sensorZahl; b++)
{
if (fsrReading[b] > adcWert[0])
{
Serial.println(F("No pressure"));
}
else
{
druck = newton(fsrReading[b]);
if (druck != lastdruck[b])
{
Serial.print((float)druck / 1000, 3); Serial.println(F(" N"));
lastdruck[b] = druck;
}
}
}
}
unsigned int newton(unsigned int analogWert)
{
unsigned int j = 0;
for (unsigned int i = 0; i < stuetzWerte; i++) // Abfrage des gesamten arrayinhalt
{
if (analogWert == adcWert[i]) // Messwert passt auf analogwert
{
return nWert[i]; // gebe passenden Druckwert zurueck
}
else if (analogWert > adcWert[i]) // Messwert liegt zwischen dem letzten (adcWert[i])
// // und dem vorletzten (adcWert[i-1])
{
j = map(analogWert, adcWert[i - 1], adcWert[i], nWert[i - 1], nWert[i]);
return j;
}
}
return j;
}
Soll/muss ich erklären?