Sketch verkleinern //Anfänger

Hey Leute,
ich habe eben einen Würfel gebaut (eher gesagt einen Zufallswürfel)
nun wollte ich die Codes verkleinern (um dies einfach zu lernen)
Könnte mir dabei jemand helfen wie das geht?

Man sagte zu mir das die Cases verkleinert werden können.

— Sketch —

bool schalter = false;
int zufallszahl;
#include <TrueRandom.h>

void setup() {
bool schalter = false;
pinMode(2, INPUT);
Serial.begin(9600);
pinMode(7, OUTPUT);
pinMode(12, OUTPUT);
pinMode(5, OUTPUT);
digitalWrite(7, LOW);
digitalWrite(5, LOW);
digitalWrite(12, LOW);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(11, OUTPUT);
pinMode(6, OUTPUT);
}

void loop() {
if (digitalRead(2) == HIGH) {
int zufallszahl = TrueRandom.random(1, 7);
switch (zufallszahl) {
case 1: {
digitalWrite(7, HIGH);
break;
}
case 2: {
digitalWrite(5, HIGH);
digitalWrite(12, HIGH);
break;
}
case 3: {
digitalWrite(7, HIGH);
digitalWrite(5, HIGH);
digitalWrite(12, HIGH);
break;
}
case 4: {
digitalWrite(5, HIGH);
digitalWrite(12, HIGH);
digitalWrite(9, HIGH);
digitalWrite(11, HIGH);
break;
}
case 5: {
digitalWrite(7, HIGH);
digitalWrite(5, HIGH);
digitalWrite(12, HIGH);
digitalWrite(9, HIGH);
digitalWrite(11, HIGH);
break;
}
case 6: {
digitalWrite(5, HIGH);
digitalWrite(12, HIGH);
digitalWrite(6, HIGH);
digitalWrite(11, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
break;
}
}
Serial.println(zufallszahl);
}
delay(2000);
digitalWrite(7, LOW);
digitalWrite(5, LOW);
digitalWrite(9, LOW);
digitalWrite(6, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(8, LOW);

}

— Sketch —

Gruß Daniel :slight_smile:

hi,

schau zb.:

http://deskfactory.de/arduino-led-wuerfel-mit-zufallszahlen-generator

gruß stefan

Datenstrukturen und Funktionen.
(In c++ kann man das auch zusammen als Klasse definieren, aber wenn du so fragst, lassen wir es mal)
Du brauchst für jede Würfelzahl die zugeordneten LED - Pins.
Praktisch wäre auch, die Anzahl Leds zu wissen. Aber das wird kaum einen Unterschied machen, ob es einmal je Struktur gespeichert ist, oder beim Aufruf der Anzeige-Funktion mitgegeben wird.

const byte EINS[] = {7}; 
const byte ZWEI[] = {5, 12};
//...
// const byte ALLE[] = {5, 6, 7, 8, 9, 10, 11, 12};  // für clear(), kann man evtl. auch codieren.

void setup() {
  // ohne Verwendung von ALLE:
  for (byte pin=5; pin<13; pin++)
     pinMode (pin, OUTPUT);
}

void loop() {
  int zufallszahl=random(6)+1;
  switch (zufallszahl) {
  case 1: show(EINS, sizeof(EINS)); break;
  case 2: show(ZWEI, sizeof(ZWEI));break;
//...
  }
   delay(2000);
   clear();
}

void show(const byte * pins, byte size) {
  for (byte i=0; i<size; i++)
    digitalWrite(*pins++, HIGH);
}

void clear() {
  // ohne Verwendung von ALLE:
  for (byte pin=5; pin<13; pin++)
     digitalWrite (pin, LOW);
}

In echt solltest du erst prüfen, ob deine TrueRandom library nicht der größte unnötige Batzen ist :wink:

wegen dem truerandom.
Das habe ich reingemacht weil wenn ich das programm neu lade weiß ich genau welche zahlen kommen also ist das quasi in einer Reihenfolge was ziemlich doof ist^^

Aber Trotzdem danke :slight_smile:

Es geht auch ohne. Wenn man mit Tastern arbeitet kann man den Zeitpunkt des ersten Tastendrucks als Seed für randomSeed() nehmen. Dann hat man nicht immer die gleiche Sequenz.

Hallo,

als ich angefangen habe, hatte ich mir das Buch von Erik Bartmann gekauft. Daraus zitiere ich mal wie Du das mit dem Würfel vereinfachen kannst. Da steckt nämlich eine geniale Idee dahinter. Bei µC wird an allen Ecken und Enden Pins gespart. :slight_smile:

Wenn man die Würfel LED’s hardwaremäßig zusammenfasst, braucht man nur noch 4 statt 7 Leitungen.
Die Grundfrage dazu ist. Welche LED leuchtet bei welcher Zahl? Leuchtet manche immer mit bei anderen Zahlen?
Daraus entstehen 4 LED Gruppen, die dann je nach Zahl verwendet werden, auch in Kombination. Man hat es aber dann nur noch mit 4 Gruppen zu tun. Nicht mehr mit 7 Einzelsegment LEDs. Die LEDs der Gruppen sind in Hardware zusammengeschalten.

Und den Code beim nächstenmal oder den Beitrag nachbearbeiten, in Code Tags stellen.
Oben links in der Leiste das </> Symbol.