Ich habe in meinen Programm mehrere Zähler so um die 20 Stück (Integer). Jetzt würde ich gerne eine automatische Rangliste erstellen lassen und dies dann auf mein HMI ausgeben.
Meine Frage ist wie ich dies einfach programmieren könnte das es mir automatisch z.B. meine Zähler auswertet und die ersten 5 Zähler (die Zähler die am höchsten sind) dann in den Variable für das HMI schreibt zum Anzeigen.
Das mit dem HMI anzeigen ist kein Problem nur eben wie ich alle Zähler miteinander vergleichen kann und eine Rangfolge erstellt wird.
Am einfachsten, wenn alle Zähler (können die negativ werden - wegen int?) in einem Array stehen. Mehr kann man ohne Deinen Sketch dazu nicht konkretisieren.
Bedenke, dass du in Wirklichkeit nicht nur Zahlen sortieren willst, sondern zum Zähler wohl auch Zusatzinformation gehört (Bei einer HiScore-Tabelle z.B. der Name).
Wirst also eher Zeiger umsortieren, oder eine sortierte Kette der Elemente aufbauen.
Und da hast du die Wahl, diese Zeiger bei jeder Änderung eines Zählers zu aktualisieren oder einmal gezielt alle Zeiger neu aufzubauen.
Danke
Array war das Stichwort.
Meine Zähler sind nur positiv.
Hab ein kleines Beispiel Skript geschrieben wo ich 5 Zähler sortieren lasse und mir im Serial Monitor Ausgebe.
Meine Frage zu diesen Sketch ist,
Ich gebe im Serial Monitor aus.
Unsortiert Array: 372,200,439,6,692
Sortiert Array:6,200,372,439,692
Nummer 1: 692
Nummer 2: 439
Nummer 3: 372
Wie kann ich es Programmieren das mir anstatt das Ergebnis der Name vom Int ausgeben wird ? z.B Nummer 1: Z5
Programm:
int Z1 =372;
int Z2 =200;
int Z3 =439;
int Z4 = 6;
int Z5 = 692;
const int iaSize = 5; //Array size
int sortValues[iaSize] = {Z1, Z2, Z3, Z4, Z5,};
void printarray(){ //Print array to Com3
for (int i=0; i<iaSize; i++) { //loop through array
Serial.print (sortValues [i]); //Print value indexed by i
if(i<(iaSize-1)){Serial.print(',');} //Separator
}
Serial.println(); //Blank line
}
void sort(int ia[], int size){ //Sort Routine int
for (int x = 0; x < iaSize; x++){ //Outer loop
for(int y = 0; y < iaSize-1; y++){ //Inner loop
if(ia[y] > ia[y+1]){ //if this value is bigger than next
int tmp = ia[y+1]; //Store a temp of the next
ia[y+1] = ia[y]; //Move this value to next position in array
ia[y] = tmp;} //Put temp value at the current position
}
}
}
void setup(){ //Do this 1 time in the setup routine
Serial.begin (9600);
Serial.print ("Unsortiert Array: ");
printarray();
sort (sortValues, iaSize);
Serial.print("Sortiert Array:");
printarray();
Serial.print("Nummer 1: ");
Serial.print (sortValues [4]);
Serial.println();
Serial.print("Nummer 2: ");
Serial.print (sortValues [3]);
Serial.println();
Serial.print("Nummer 3: ");
Serial.print (sortValues [2]);
}
void loop() {}
//Put your code here