Messwerte in einem Array speichern

Ich messe eine Geschwindigkeit, die fehlerbehaftet ist und über den Arduino kalibriert werden soll. Dabei ist mir als blutigem Anfänger Unsicherheiten zur Realisierung aufgetaucht:

Es soll ungefähr so funktionieren:

  • Solange ein Wert gemessen wird, der exakt dem alten entspricht soll eine while Schleife weiter durchlaufen wären als wäre nichts gewesen
  • Sobald der Wert sich ändert soll der neue Wert an die nächste Stelle des Arrays gespeichert werden und der ganze Prozess von vorne beginnen. Ich würde gerne 3 Werte so messen.

Mein bisheriger miserabler Code Versuch war ungefähr so:

  for(int i=0; i<3; i++){ //Schleife zum Eingeben der 3 Werte in den Array  //3 Tests machen und die Werte in das array speedvals schreiben
    //StartWert der Kalibrierung (Abhängig von der geforderten Geschwindigkeit?
    
    while(true){ //Während der Speedvalue der aktuellen for Schleife den errechneten Speedvalues durch CalcSpeed entspricht, berechne den Wert neu

      if(currentSpeedVal != speedvals[i]){ //Wenn ein neuer Wert gemessen wurde soll i um 1 erhöht werden und die nächste Messung starten können
        Serial.print("curSpeedval: ");
        Serial.println(currentSpeedVal);
        Serial.print("speedval[");
        Serial.print(i);
        Serial.print("]: ");
        Serial.println(speedvals[i]);
        Serial.println("Break");
        break;
                                          }

      else{
        
      
      speedvals[i] = CalcSpeed();
      
      Serial.println("***************");//Alles folgende spft
      Serial.print("Gemessener Wert für ");
      Serial.print(i);
      Serial.print(". Wert im Array: ");
      Serial.println(speedvals[i]);
      delay(100); //Damit nicht viel zu viele Werte berechnet werden spft???

      currentSpeedVal = CalcSpeed();

    
          }
                        }
  }

Geht das auch einfacher oder bin ich auf dem richtigen Dampfer um das ganze zu realisieren?
Danke im Voraus :slight_smile:

Du hast doch schon eine Schleife: loop
Da brauchst keine weitere Schleife.

Gruß Tommy

Das Programm ist eigentlich umfassender und soll an dieser Stelle im Code nur diese spezielle Funktion erfüllen.

Sowas habe ich bisher immer eigentlich mit switch case oder einem while loop in der eigentlichen loop Funktion gelöst

Das muss ja nicht heißen, das das der richtige Weg ist.

Gruß Tommy

Ich bin für Programmiertipps sehr empfänglich. Immer her mit den Verbesserungsvorschlägen :wink:

Vorschlag (ungetestet)

byte counter = 0;
const byte maxCounter = 3;
// hier fehlt von Dir die Info über den Typ
int speedVals[maxCounter];
uint32_t lastMillis, intervall = 100;

...
void loop() {
  uint32_t aktMillis = millis();
  if (aktMillis - lastMillis >= intervall) {
    lastMillis = aktMillis;
    int aktSpeed = CalcSpeed();
    if (counter = 0) speedVals[counter] = aktSpeed;
    else {
      if (aktSpeed != speedVals[counter]) {
        counter++;
        speedVals[counter] = aktSpeed;
        if (counter == maxCounter -1) {
          counter = 0;
          // tue irgendetwas mit den Daten
        }
      } 
    } 
  }
}

Gruß Tommy