Neuling: Würfel soll 600 x gewürfelt werden, Anzahl 6-er soll gezählt werden

Hallo Zusammen,

Habe viele Beiträge durchgesehen und finde nix zu meinem Thema…

Es funktioniert nicht >:( Kann mir bitte jemand helfen?

Mein Code bisher:

int a = 0;                   // Gewürfelte Augenzahl 
int w = 0;                  // Anzahl der Würfe
int s = 0;                   // Anzahl der gewürfelten 6-er            

void setup() 
{
 Serial.begin(9600);           // braucht man immer, wenn man den seriellen Monitor benutzen will
 randomSeed(analogRead(0));
}

void loop() 
{
for ( w; w<601; w=w+1);     //beschränkt das programm auf 600 Würfe

while(a!=6)                        // != bedeutet ungleich
 {      
a = random(1,7);                                                      
delay(500);
Serial.println(a);

(s=s+1);                            // zählt die 6-er

s += Serial.read(s);             // soll die 6-er aus dem Serial Monitor auslesen
 }

Serial.println(s=s+1);
delay(500);

a = 0;
w = 0;
s = 0;
}
  1. Setze bitte deinen Code in Code Tags.
  2. For (w;...... ist Blödsinn, du solltest die Schleifenvariable schon initialisieren.
    also for (w = 0; ...
  3. Warum die Klammer uns (s=s+1) ? Stört nicht aber nutzt auch nix.
  4. Was soll das Serial.Read ? Da musst du ja was eingeben sonst hängt die loop.
    Und zwar musst du bei jedem Schleifendurchlauf was eingeben.
  5. Du zählst (wenn das serial.read nicht da wäre) die Anzahl der Durchläufe bis
    eine 6 kommt und das machst du dann 600 mal.
  6. Sehe ich jetzt erst : Die Forschleife hat direkt ein ; das heißt sie tut 601s mal nix.
  7. Warum machst du so was auf einem Arduino ? Das kann doch jeder PC ?

Ulli

Da sind so viele Fehler drin. Gerade bei den Schleifen

const unsigned int WUERFE = 600;

void setup()
{  
  Serial.begin(9600);

  unsigned int ergebnis = 0;
  
  for (unsigned int i = 0; i < WUERFE; i++)
  {
    byte w = random(1, 7);
    if (w == 6)
      ergebnis++;
  }

  Serial.println(ergebnis);
}

void loop()
{
}

Und gewöhne dir an globale Variablen nur da zu verwenden wo sie auch nötig sein. Globale Schleifenvariablen gehen zwar theoretisch, sind aber unsinnig

Nur mal als Schnellschuss (kann natürlich auch Fehler enthalten)

int sixes;
int cnt;


void loop()
{
   sixes = 0;

   for (cnt = 0 ; cnt < 600 ; cnt ++)
   {
      if (random(1,7) == 6) 
      {
         sixes++;
      }
   }
   Serial.print("Anzahl der Sechsen : ");
   Serial.println(sixes);

   // Do it again 
}

Das war ja komplett syncron :slight_smile:

Hallo Ulli,
Hallo Serenifly,

vielen Dank für eure Hilfe!

Wie ihr sicherlich bemerkt habt, bin ich ein blutiger Anfänger...
Aber, obwohl es recht peinlich ist, sein völliges Unwissen für alle Welt preiszugeben, denke ich: noch schlimmer ist, unwissend zu bleiben.

Es liegt noch viel Arbeit vor uns...

Danke nochmals! Ich versuche nun eure Vorschläge zu analysieren und daraus zu lernen.

Gruß

Viktor

Noch schlimmer ist es unwissend zu sein und zu glauben alles zu wissen.
Gegen wissen unwissend zu sein gibt es ja ein Mittel: lernen.
Wir helfen Dir beim lernen gerne.
Grüße Uwe

Hallo Ulli,

folgender Fehler taucht in deinem Vorschlag auf: ‘sixes’ was not declared in this scope

kann man das in 2 Worten erklären, was da fehlt? Denn für mich war das schon deklariert…

Gruß

Viktor

Du hast die Deklarationen in setup() gesetzt. Dann sind sie auch nur in setup gültig.
Das hat Ulli nicht getan.

Gruß Tommy

Danke Tommy!

habe die Klammer bei

void setup()
{
}

hochgesetzt.

Jetzt wird kein Fehler angezeigt, aber im seriellen Monitor wird nichts angezeigt...

Wurde es auch vorher nicht. Du hast ja Seriell nicht initialisiert.

Gruß Tommy

wie macht man das?

Indem man sich mit den Grundlagen beschäftigt. z.B. hier.

Gruß Tommy