Elektrischer Würfel umschreiben

Hallo zusammen,

ich versuche gerade die ersten Schritte mit dem Arduino zu machen.
Ich bin gerade dabei ein Sketch zu schreiben, der einen elektrischen Würfel ansteuern soll.
Dazu gibt es bereits zahlreiche Sketches im Internet. Ich möchte aber den Sketch mit den Basic-Befehlen digitalWirte, pinMode, random, if-else, int, switch, case schreiben, da ich diese als Realschule-lehrer meinen Schüler als einstieg erstmals einführe.

Im Anhang befindet sich ein Programm, dass mit Basic geschrieben ist. Diese Struktur würde ich gerne übernehmen, da sie leicht zu erklären ist.

Hier ist ein Versuch eines Sketches für Arduino. Leider ist dieser nicht funktionsfähig, da immer wenn der Schalter gedrückt wird nur zwei LED's aufleuchten.

Wäre cool wenn jemand den Fehler findet oder weiterhelfen kann :slight_smile:

int tasterPin = 2;                                       // Pin an dem der Taster angeschlossen ist
int tasterWert = LOW;

void setup() {
 
pinMode(13, OUTPUT);                                      // digitaler Pin wird für Ausgabe festgelegt
 pinMode(12, OUTPUT);                                    // ... auch die folgenden
 pinMode(11, OUTPUT);         
 pinMode(10, OUTPUT);         
 pinMode(9, OUTPUT);         
 pinMode(8, OUTPUT);         
 pinMode(7, OUTPUT);                   
 pinMode(tasterPin, INPUT);   
 Serial.begin(9600);
}

void loop() {
tasterWert = digitalRead (tasterPin);

if (tasterWert == HIGH)
{ 
 int Zufallszahl = random (1,6);
 Serial.println(Zufallszahl);

 switch (Zufallszahl) {                                               // in Abhängigkeit von der Zahl wird auf dem Würfel die Augenzahl dargestellt
   case 1:                     // Wuerfelzahl 1                     // über die Anweisungen Case werden die verschiednen LED entsprechende der Augenzahl eingeschaltet
    digitalWrite(7, HIGH);
    Serial.println("W 1");    
     break;
   case 2:                     // Wuerfelzahl 2
     digitalWrite(9, HIGH);
     digitalWrite(13, HIGH);
     break;
   case 3:                     // Wuerfelzahl 3
     digitalWrite(7, HIGH);
     digitalWrite(8, HIGH);
     digitalWrite(11, HIGH);
     break;
   case 4:                     // Wuerfelzahl 4
     digitalWrite(8, HIGH);
     digitalWrite(9, HIGH);
     digitalWrite(11, HIGH);
     digitalWrite(13, HIGH);
     break;
   case 5:                      // Wuerfelzahl 5
     digitalWrite(8, HIGH);
     digitalWrite(9, HIGH);
     digitalWrite(11, HIGH);
     digitalWrite(13, HIGH);
     digitalWrite(7, HIGH) ;
     break;
  case 6:                      // Wuerfelzahl 6
     digitalWrite(8, HIGH);
     digitalWrite(9, HIGH);
     digitalWrite(10, HIGH);
     digitalWrite(11, HIGH);
     digitalWrite(12, HIGH);
     digitalWrite(13, HIGH);
     break;
 default:                                        //ansonsten, wenn es keiner dieser cases ist
    break;
 }
 delay(100);

}
  
}

Schön mal jemanden von der anderen Seite der Macht hier zu sehen. Normalerweise kommen nur Schüler mit ihren Hausaufgaben hier her. Künftig gehören die Schülerfragen hier herinnen dir.

Grundsätzlich gilt auch für dich

  • stelle deinen Sketch in Code-Tags
  • Formierte den Sketch in der IDE mit STRG-T
  • Beschreibe deinen Hardwareaufbau

Da ich nicht weis wie du den Taster angeschlossen hast habe ich ihn gegen GND geschaltet und somit den internen Pullup genutzt.
const gesetzt wo möglich.
und da aus dem vorhergehenden Würfelbild die anderen LEDs high sein könnten, müssen die anderen LEDs aus meiner Sicht abgeschaltet werden

/* *******************************************************************
   Würfel

   Einfacher Würfel mit 6 Würfelbilder
   Taster gegen GNC
   7 LEDs zum Simulieren der Augen
   http://forum.arduino.cc/index.php?topic=560092.0

   ***************************************************************** */

const int tasterPin = 2;                             // Pin an dem der Taster angeschlossen ist - ändert sich nie - daher const
int tasterWert = LOW;

void setup() {
  pinMode(13, OUTPUT);                               // digitaler Pin wird für Ausgabe festgelegt
  pinMode(12, OUTPUT);                               // ... auch die folgenden
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(tasterPin, INPUT_PULLUP);                  // da wir keinen externen Widerstand verwenden, aktivieren wir den internen Pullup und der Eingang ist standardmäßig auf HIGH
  Serial.begin(115200);                              // 2018 kann man ruhig Baud-Raten aus dem 3 Jahrtausend verwenden
}

void loop() {
  tasterWert = digitalRead (tasterPin);

  if (tasterWert == LOW)                                         // durch den INPUT_PULLUP müssen wir den Taster gegen GND schalten
  {
    int Zufallszahl = random (1, 6);
    Serial.println(Zufallszahl);

    switch (Zufallszahl) {                                       // in Abhängigkeit von der Zahl wird auf dem Würfel die Augenzahl dargestellt
      case 1:                     // Wuerfelzahl 1               // über die Anweisungen Case werden die verschiednen LED entsprechende der Augenzahl eingeschaltet
        digitalWrite(7, HIGH);
        Serial.println(F("W 1"));                                // um RAM zu sparen gewöhnen wir uns von Anfang an an, Fixtexte in den Programmspeicher mit dem F-Makro zu verschieben!
        digitalWrite(8, LOW);                                    // alle anderen müssen wir abschalten da sie vorm vorhergenden Würfel HIGH sein könnten
        digitalWrite(9, LOW);
        digitalWrite(10, LOW);
        digitalWrite(11, LOW);
        digitalWrite(12, LOW);
        digitalWrite(13, LOW);
        break;
      case 2:                     // Wuerfelzahl 2
        digitalWrite(9, HIGH);
        digitalWrite(13, HIGH);
        Serial.println(F("W 2"));                                // um RAM zu sparen gewöhnen wir uns von Anfang an an, Fixtexte in den Programmspeicher mit dem F-Makro zu verschieben!
        digitalWrite(7, LOW);                                    // alle anderen müssen wir abschalten da sie vorm vorhergenden Würfel HIGH sein könnten
        digitalWrite(8, LOW);
        digitalWrite(10, LOW);
        digitalWrite(11, LOW);
        digitalWrite(12, LOW);
        break;
      case 3:                     // Wuerfelzahl 3
        digitalWrite(7, HIGH);
        digitalWrite(8, HIGH);
        digitalWrite(11, HIGH);
        Serial.println(F("W 3"));                               // um RAM zu sparen gewöhnen wir uns von Anfang an an, Fixtexte in den Programmspeicher mit dem F-Makro zu verschieben!
        digitalWrite(9, LOW);
        digitalWrite(10, LOW);
        digitalWrite(12, LOW);
        digitalWrite(13, LOW);
        break;
      case 4:                     // Wuerfelzahl 4
        digitalWrite(8, HIGH);
        digitalWrite(9, HIGH);
        digitalWrite(11, HIGH);
        digitalWrite(13, HIGH);
        Serial.println(F("W 4"));                               
        digitalWrite(7, LOW);                                    
        digitalWrite(10, LOW);
        digitalWrite(12, LOW);
        digitalWrite(13, LOW);
        break;
      case 5:                      // Wuerfelzahl 5
        digitalWrite(8, HIGH);
        digitalWrite(9, HIGH);
        digitalWrite(11, HIGH);
        digitalWrite(13, HIGH);
        digitalWrite(7, HIGH) ;
        Serial.println(F("W 5"));                               
        digitalWrite(10, LOW);
        digitalWrite(12, LOW);
        break;
      case 6:                      // Wuerfelzahl 6
        digitalWrite(8, HIGH);
        digitalWrite(9, HIGH);
        digitalWrite(10, HIGH);
        digitalWrite(11, HIGH);
        digitalWrite(12, HIGH);
        digitalWrite(13, HIGH);
        Serial.println(F("W 6"));                              
        digitalWrite(7, LOW);                                  
        break;
      default:                                                 // ansonsten, wenn es keiner dieser cases ist
        break;
    }
    delay(100);                                                // und hier vermerken wir DEUTLICH, dass wir dieses Delay ausschließlich in unserem ersten Sketch verwenden und 
                                                               // nächste Stunde machen wir das BlinkWithoutDelay Beispiel!

  }
}

P.S.: was das ganze mit "Basic" zu tun hat ... keine Ahnung. BASIC ist eine andere Programmiersprache und deine Erklärung verwirrend. In der Arduino IDE programmiert man in C++ (auch wenns momentan noch nicht nach objektorientiert aussiehst)

Ich würde Dir und Deinen Schülern empfehlen, erst einmal die Basics zu lernen, d.h. wie man LED und Schalter anschließt und entprellt, Zustandswechsel erkennt, Ausgänge ein und auch wieder ausschaltet, und wie man Arrays für die Muster verwenden kann.

Dabei kannst Du mit Deinem defekten Code anfangen, und dann den Schülern schrittweise erklären, was alles zu beachten ist, wenn das Programm alles richtig machen soll.

Die Anzeige von zwei LED kann ich nicht nachvollziehen, vielleicht hast Du die übrigen Ausgänge schon gegrillt?

Und nein, ich habe nichts gegen Lehrer - solange sie versuchen, erst einmal selbst zu verstehen, was sie ihren Schülern "einführen" möchten

Leider ist dieser nicht funktionsfähig, da immer wenn der Schalter gedrückt wird nur zwei LED's aufleuchten.

Wahrscheinlich LED 10 und LED 12 ?
Um ein LED einzuschalten in dem Fall ein Pin HIGH ist, ist es zwischen GND und dem Pin zu verbinden (natürlich mit einem Wiederstand z.B. 330 Ohm)

int Zufallszahl = random (1,6);

eigenlich:

int Zufallszahl = random (1,7);

Siehe: random() - Arduino Reference

noiasca:
vergiss es - der TO meldet sich eh nicht mehr. Schade um die Zeit!

Also doch ein Schüler, der sich als Lehrer verkleidet hat. Ein Lehrer wäre nicht so unhöflich :wink:

Hi

Vll. schon durch das Wort 'cool' zu erkennen gewesen?
Ok, bin selber schon ein paar Jährchen aus der Schule draußen - zumindest damals waren die Lehrer nicht so cool, wie wir :wink:
(Rückblickend waren aber echte Granaten dabei, wirklich tolle Lehrer, wo ich froh bin, Diese gehabt zu haben)

MfG

postmaster-ino:
... wirklich tolle Lehrer, wo ich froh bin, Diese gehabt zu haben)

Ja, manche haben mich gerettet, motiviert, mein Selbsbewußtsein gebildet. Ohne sie wäre ich nicht da, wo ich heute bin und könnte anderen Tipps geben.

Leider gab es auch zwei Lehrer, die meine Abiturnoten bestimmt haben, die später suspendiert wurden. Meinen Noten hat das nicht geholfen, nachhaltig geschadet hat es mir glücklicherweise auch nicht.

Glücklicherweise gibt es Lehrer, denn ich möchte es nicht sein.