Mehrere FSR-Sensoren mit Arduino Mega

Guten Abend,
Ich wollte mich noch mal für deine Arbeit bedanken. Das hat mir sehr weiter geholfen.

Ich denke gerade darüber nach die Darstellung im seriellen Monitor zu ändern. Und zwar wäre es übersichtlicher die Ausgabewerte, statt untereinander, spaltenweise A0 bis A9 wieder zu geben. ist das denn so einfach umsetzbar?
Des Weiteren ist aufgefallen, dass bei dauerhaft unter Druck stehenden Sensor, bspw. A0, sporadisch Werte ausgelassen werden. Hier habe ich mal ein Beispiel. Unten folgt der Quellcode. Vielleicht hast Du ja Zeit und kannst mal drüber schauen :slightly_smiling_face:.

Danke und viele Grüße
Robert

17:22:43.422 -> Star..
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0.795 N
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> Start...
17:22:43.422 -> 7.577 N
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.422 -> 0
17:22:43.748 -> 7.630 N
17:22:43.748 -> 0
17:22:43.748 -> 0
17:22:43.748 -> 0
17:22:43.748 -> 0
17:22:43.748 -> 0
17:22:43.748 -> 0
17:22:43.748 -> 0
17:22:43.748 -> 0
17:22:43.748 -> 0
17:22:44.028 -> 7.700 N
17:22:44.028 -> 0
17:22:44.028 -> 0
17:22:44.028 -> 0
17:22:44.074 -> 0
17:22:44.074 -> 0
17:22:44.074 -> 0
17:22:44.074 -> 0
17:22:44.074 -> 0
17:22:44.074 -> 0
17:22:44.351 -> 0
17:22:44.351 -> 0
17:22:44.351 -> 0
17:22:44.351 -> 0
17:22:44.351 -> 0
17:22:44.351 -> 0
17:22:44.351 -> 0
17:22:44.351 -> 0
17:22:44.351 -> 0
17:22:44.632 -> 9.074 N
17:22:44.632 -> 0
17:22:44.632 -> 0
17:22:44.632 -> 0
17:22:44.632 -> 0
17:22:44.632 -> 0
17:22:44.632 -> 0
17:22:44.632 -> 0
17:22:44.632 -> 0
17:22:44.632 -> 0
17:22:44.958 -> 8.868 N
17:22:44.958 -> 0
17:22:44.958 -> 0
17:22:44.958 -> 0
17:22:44.958 -> 0
17:22:44.958 -> 0
17:22:44.958 -> 0
17:22:44.958 -> 0
17:22:44.958 -> 0
17:22:44.958 -> 0
17:22:45.238 -> 0
17:22:45.238 -> 0
17:22:45.238 -> 0
17:22:45.238 -> 0
17:22:45.238 -> 0
17:22:45.238 -> 0
17:22:45.238 -> 0
17:22:45.238 -> 0
17:22:45.238 -> 0
17:22:45.570 -> 8.971 N
17:22:45.570 -> 0
17:22:45.570 -> 0
17:22:45.570 -> 0
17:22:45.570 -> 0
17:22:45.570 -> 0
17:22:45.570 -> 0
17:22:45.570 -> 0
17:22:45.570 -> 0
17:22:45.570 -> 0
17:22:45.851 -> 8.765 N
17:22:45.851 -> 0
17:22:45.851 -> 0
17:22:45.851 -> 0
17:22:45.851 -> 0
17:22:45.851 -> 0
17:22:45.851 -> 0
17:22:45.851 -> 0
17:22:45.851 -> 0
17:22:45.851 -> 0
17:22:46.175 -> 8.662 N
17:22:46.175 -> 0
17:22:46.175 -> 0
17:22:46.175 -> 0
17:22:46.175 -> 0
17:22:46.175 -> 0
17:22:46.175 -> 0
17:22:46.175 -> 0
17:22:46.175 -> 0
17:22:46.175 -> 0
17:22:46.458 -> 8.765 N
17:22:46.458 -> 0
17:22:46.458 -> 0
17:22:46.458 -> 0
17:22:46.458 -> 0
17:22:46.458 -> 0
17:22:46.458 -> 0
17:22:46.458 -> 0
17:22:46.458 -> 0
17:22:46.458 -> 0
17:22:46.782 -> 9.795 N
17:22:46.782 -> 0
17:22:46.782 -> 0
17:22:46.782 -> 0
17:22:46.782 -> 0
17:22:46.782 -> 0
17:22:46.782 -> 0
17:22:46.782 -> 0
17:22:46.782 -> 0
17:22:46.782 -> 0
17:22:47.062 -> 9.966 N
17:22:47.062 -> 0
17:22:47.062 -> 0
17:22:47.062 -> 0
17:22:47.062 -> 0
17:22:47.062 -> 0
17:22:47.062 -> 0
17:22:47.062 -> 0
17:22:47.062 -> 0
17:22:47.062 -> 0
17:22:47.388 -> 0
17:22:47.388 -> 0
17:22:47.388 -> 0
17:22:47.388 -> 0
17:22:47.388 -> 0
17:22:47.388 -> 0
17:22:47.388 -> 0
17:22:47.388 -> 0
17:22:47.388 -> 0
17:22:47.668 -> 9.451 N
17:22:47.668 -> 0
17:22:47.668 -> 0
17:22:47.668 -> 0
17:22:47.668 -> 0
17:22:47.668 -> 0
17:22:47.668 -> 0
17:22:47.668 -> 0
17:22:47.668 -> 0
17:22:47.668 -> 0
17:22:47.990 -> 9.795 N
17:22:47.990 -> 0
17:22:47.990 -> 0
17:22:47.990 -> 0
17:22:47.990 -> 0
17:22:47.990 -> 0
17:22:47.990 -> 0
17:22:47.990 -> 0
17:22:47.990 -> 0
17:22:47.990 -> 0
17:22:48.267 -> 0
17:22:48.267 -> 0
17:22:48.267 -> 0
17:22:48.267 -> 0
17:22:48.267 -> 0
17:22:48.267 -> 0
17:22:48.267 -> 0
17:22:48.267 -> 0
17:22:48.267 -> 0
17:22:48.594 -> 10.310 N
17:22:48.594 -> 0
17:22:48.594 -> 0
17:22:48.594 -> 0
17:22:48.594 -> 0
17:22:48.594 -> 0
17:22:48.594 -> 0
17:22:48.594 -> 0
17:22:48.594 -> 0
17:22:48.594 -> 0
17:22:48.875 -> 9.795 N
17:22:48.875 -> 0
17:22:48.875 -> 0
17:22:48.875 -> 0
17:22:48.875 -> 0
17:22:48.875 -> 0
17:22:48.875 -> 0
17:22:48.875 -> 0
17:22:48.875 -> 0
17:22:48.875 -> 0
17:22:49.155 -> 9.966 N
17:22:49.155 -> 0
17:22:49.202 -> 0
17:22:49.202 -> 0
17:22:49.202 -> 0
17:22:49.202 -> 0
17:22:49.202 -> 0
17:22:49.202 -> 0
17:22:49.202 -> 0
17:22:49.202 -> 0
17:22:49.486 -> 0
17:22:49.486 -> 0
17:22:49.486 -> 0
17:22:49.486 -> 0
17:22:49.486 -> 0
17:22:49.486 -> 0
17:22:49.486 -> 0
17:22:49.486 -> 0
17:22:49.486 -> 0
17:22:49.486 -> 0
17:22:49.767 -> 0
17:22:49.767 -> 0
17:22:49.767 -> 0
17:22:49.767 -> 0
17:22:49.767 -> 0
17:22:49.767 -> 0
17:22:49.767 -> 0
17:22:49.767 -> 0
17:22:49.767 -> 0
17:22:49.767 -> 0
17:22:50.092 -> 0
17:22:50.092 -> 0
17:22:50.092 -> 0
17:22:50.092 -> 0
17:22:50.092 -> 0
17:22:50.092 -> 0
17:22:50.092 -> 0
17:22:50.092 -> 0
17:22:50.092 -> 0

/*
   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
*/

#define SIMULATION  // Diese Zeile auskommentieren, wenn alle Sensoren im Life-Betrieb

// InputPins
const byte fsrPins[] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9}; 
#ifdef SIMULATION
  const byte sensorZahl = 1;
#else
  const byte sensorZahl = sizeof(fsrPins) / sizeof(fsrPins[0]);
#endif
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, 190, 105};
const byte stuetzWerte = sizeof(adcWert) / sizeof(adcWert[0]);
const unsigned long nWert[stuetzWerte] = {100, 1000, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000, 5500, 6000, 6500, 7000, 8000, 9000, 10000, 13636, 27580, 65600, 70000, 100000}; // Der Wert ist *1000 wegen ohne Nachkommastelle!!
//                                        0.1  1     1,5   2     2,5   3     3,5   4     4,5   5     5,5   6     6,5   7     8     9     10     13,636 27,58  65,6     Newton

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
}
void loop(void)
{
  readSensors ();
  rechneSensors();
#ifdef SIMULATION
  delay(100);
#else
  delay(2000);
#endif
}
unsigned int simulation(const byte b)
{
  static byte pin = 10;
  static unsigned int zaehler = 0;
  if (pin != b)
  {
    pin = b;
    zaehler = 0;
    return zaehler;
  }
  zaehler += 10;
  if (zaehler > 1023) zaehler = 0;
  return zaehler;
}

void readSensors()
{
  for (byte i = 0; i < sensorZahl; i++)
  {
    fsrReading[i] = analogRead(fsrPins[i]);
#ifdef SIMULATION
  //  fsrReading[i] = simulation(i);
#endif
  }
}
void rechneSensors()
{
  for (byte b = 0; b < sensorZahl; b++)
  {
    if (fsrReading[b] > adcWert[0])
    {
      Serial.println(F("No pressure"));
    }
    else
    {
      newton(fsrReading[b]);
    }
  }
}

unsigned int newton(unsigned int analogWert)
{
  unsigned int j = 0;
  //Serial.print(F("analogWert: ")); Serial.print(analogWert);Serial.print("\t");
  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])
    {
      /*
         Ab hier erfolgt die Berechnung des Druckes durch Näherung
         Es wird wird ein mapping zwischen den ADC-Arraywerten und den zugehörigen NewtonArraywerten gemacht.
      */
      delay(200);
      Serial.print(F("")); Serial.print(analogWert);
      //Serial.print(F(" Wert liegt zwischen: ")); Serial.print(adcWert[i - 1]); Serial.print(F(" und ")); Serial.print(adcWert[i]);
     // Serial.print(F("")); Serial.print(nWert[i]); Serial.print(F("")); Serial.print(nWert[i - 1]); Serial.print(F(" Newton "));
      j = map(analogWert, adcWert[i - 1], adcWert[i], nWert[i - 1], nWert[i]);
      Serial.print(("")); //Serial.print(j); Serial.print((""));
      //Serial.print((float)j / 1000, 3); 
      Serial.println(F(" "));
      return j;
    }
  }
  return j;
}