Arduino Tafeldienst Programm?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Hi,

Ein Arduino ist als Mikrocontroller nicht wirklich erste Wahl für so eine Aufgabe. Mit Excel VBA wäre das wesentlich leichter. Aber es geht. Ich habe das so hinbekommen, wobei es bestimmt elegantere Lösungen gibt:

void setup() {

    char *Schueler[19];
    Serial.begin(115200);
    Schueler[0] = "Anton";
    Schueler[1] = "Bert";
    Schueler[2] = "Claus";
    Schueler[3] = "Dagmar";
    Schueler[4] = "Emma";
    Schueler[5] = "Fritz";
    Schueler[6] = "Gabi";
    Schueler[7] = "Hans";
    Schueler[8] = "Inge";
    Schueler[9] = "Jürgen";
    Schueler[10] = "Klaudia";
    Schueler[11] = "Luise";
    Schueler[12] = "Malte";
    Schueler[13] = "Nina";
    Schueler[14] = "Otto";
    Schueler[15] = "Petra";
    Schueler[16] = "Quentin";
    Schueler[17] = "Roland";
    Schueler[18] = "Sabine";


    Serial.println("Hier kommt der neue Tafeldienstplan");
    randomSeed(analogRead(0));
    int Woche = 1;
    for (int i=18; i>=0; i=i-1){
        int NTD = random(0, i+1);  //NTD steht für NächsterTafelDienst. Zunächst Zufallszahl 0 - 18, dann 0 - 17, wenn der erste Name gezogen und aus der Liste gelöscht wurde.
        Serial.print("Woche ");
        Serial.print (Woche);
        Serial.print(": ");
        Serial.println(Schueler[NTD]);

        // Die folgenden Elemente um eine Stelle vorrücken. 
        // Damit werden zum Beispiel aus 19 Namen 18 und der bereits gezogene Name wird gelöscht. 
        for (int j=NTD+1; j<=i; j=j+1){
          Schueler[j-1] = Schueler[j];
          }
        Woche++;
    }
}

void loop() {
// Hier passiert nichts mehr. Der Code soll ja nur einmal ausgeführt werden.
// Daher alles im Setup.
}

Viel Spaß damit. Ich würde mich über Feedback freuen.

Gruß

Hannes

Woher ich das weiß:Hobby
Hannes62a  18.03.2020, 20:05

Schon komisch, dass sich nach so zielgerichteter Hilfe der Fragesteller nicht mal zurückmeldet.

0
lostchild540 
Fragesteller
 21.04.2020, 16:01

Hallo Hannes!
Vielen Dank für Ihre Hilfe! Es tut mir wirklich leid, dass ich bisher nicht geantwortet habe! Ich hatte leider viel Stress in der Zeit. Ich bin Ihnen sehr sehr dankbar, Ihre Antwort ist wirklich die hilfreichste!! Ich werde das Programm ausprobieren. Ich fühle mich schlecht weil ich mich erst nach 34 Tagen bedanke:(

Ich wünsche Ihnen alles gute!

0
  1. Wieso Arduino? Das hört sich nicht für eine Aufgabe nach Arduino an
  2. Wo liegt nun dein Problem? Du hast doch alles gegeben: Array und Random-Funktion. Probier mal aus.

Schreib in ein Array alle Namen. Lass dir mit dem Random-Befehl eine Zahl zwischen 0 und 18 ausgeben (für das Array). Dann fragst du die Stelle im Array mit der Zahl ab.

Wenn der Schüler ausgewählt wurde speicherst du diesen in ein anderes Array rein, in welchem die Schüler drin stehen, die bereits dran waren.

Und den Rest kannst du dir ja mal selbst überlegen :)

lostchild540 
Fragesteller
 14.03.2020, 20:52

Erstmal Vielen Dank für die Antwort:)

also ja ich muss das mit Arduino machen also ich brauch ja den seriellen Monitor

Und mit einer anderen array-Liste ist eigentlich eine ganz gute Idee, aber kann man des machen ohne die Namen die bereits drankamen jedes mal speichern zu müssen? Mein Lehrer hat was von der while Schleife gesagt, bin heute den ganzen Tag vor dem Rechner gesessen und nichts hinbekommen:( also halt des mit random aber ohne Wiederholungen?

0
skiddy  15.03.2020, 13:21
@lostchild540
aber kann man des machen ohne die Namen die bereits drankamen jedes mal speichern zu müssen

Geht theoretisch schon. Da ich jedoch fast keine C-Kenntnisse besitze kann ich dir nur sagen, um ein Element (zum Beispiel der Name) aus einem Array zu entfernen und zu "löschen", bedarf es an einer selbstgebastelten Funktion, die dies tut. Für den Anfang denke ich jedoch, dass es erstmal ausreicht 2 Arrays zu erstellen. Im ersten die Namen und im Zweiten die Namen, die bereits dran kamen.

Immer wenn ein neuer Name aus Array 1 gezogen wird vergleichst du es mit Array 2, ob der Name schon dran kam. Lieber erst einmal kleine Schritte machen, bevor man etwas komplizierteres in Angriff nimmt.

Theoretisch kannst du es auch mit einem Array machen, in welchem die Namen gespeichert sind. Jedes Mal wenn ein neuer Mitschüler gezogen wird setzt du die Stelle im Array auf diesen String-Wert: ""

Du solltest jedoch eine IF-Bedingung einsetzen um zu überprüfen, ob die ausgewählte Stelle im Array bereits ein "" ist. Wenn ja, dann soll solange weitergesucht werden, bis ein Schüler gefunden wurde.

1
lostchild540 
Fragesteller
 15.03.2020, 16:54
@skiddy

Okay ich versuchs vieelen vielen Dank für die Hilfe!

1

Meine Frage wäre eigentlich wie die Ausgabe geschehen soll? Mit LEDs? Was du brauchst ist vor allem die Programmiersprache C, bzw. die leichte Abwandlung, die der Arduino benutzt. Schau nach random number generators und arrays, in denen du z.B. die Namensliste speichern kannst.

Dann lässt du eine random Zahl generieren und speicherst sie in einer Variable. Dann wählst du eine Zweite und zwar so lange, bis sie ungleich der ersten ist (Tipp: Do while Schleife)

lostchild540 
Fragesteller
 14.03.2020, 20:57

Danke erstmal für die Antwort:)

also ohne leds, die Namen sollen auf dem seriellen Monitor angezeigt werden

ich hab des mit Variablen nicht verstanden:( ich bin total verwirrt

wie soll das denn als code aussehen? Helpp

0