Dobbelsteen

Toon hier Uw afgeronde projecten aan anderen.
Gebruikers-avatar
Berichten: 9
Geregistreerd: 24 Jan 2021, 20:37
Woonplaats: Bovenkarspel

Dobbelsteen

Berichtdoor weirdweb » 11 Feb 2021, 21:45

Voor dit project schoot me een oud knutselwerkje te binnen van ergens jaren 1980.
Toen heb ik eens een digitale dobbelsteen gemaakt met flipflops en wat schuifregisters.
Deze heb ik dus nagemaakt met een Arduino nano en in een klein kastje gestopt.

Het kastje heeft binnenmaten van 87 x 53 x 2,6 cm.

Het lege gedeelte naast de schakelaar en drukknop biedt ruimte voor een 9V batterij.
Die zit op deze manier redelijk klem in het kastje.

Zoals te zien op de foto's is de Arduino "opgehangen" aan de weerstanden naar de LEDs.

In de sketch wordt het rollen en het uitrollen gesimuleerd door het steeds geleidelijk langer maken van de delay tijd
tot een zekere waarde waarop het programma stopt en wacht tot de drukknop weer wordt ingedrukt.

Op m'n site staat wat meer info met ook wat foto's (Weird Science Web).
Je browser kan een melding geven dat de https verbinding niet vertrouwd is. Dat kan kloppen aangezien mijn site op m'n NAS draait en ik er een zelf ondertekende
certificaat in heb gestopt louter en alleen om de communicatie te versleutelen.
Ik kan een ieder verzekeren dat er absoluut GEEN externe obscure scripts op draaien alleen een dingetje van de buienradar.nl.

Code: Alles selecteren
/*
 LED layout

 1     4
 2  7  5
 3     6

 */

byte buttonPin = A0;
byte pinBase = 2; // LED 1..7 op pin 2..8

void setPins( byte num )
{
   byte dice[6] = { B01000000, B00100001, B01001100, B00101101, B01101101, B00111111 };
   byte i;

   for( i = 0; i < 7; i++ )
   {
      digitalWrite( pinBase + i, bitRead( dice[num], i )); // Set outputs volgens bit waaardes in 'dice' array
   }
}

void setup()
{
   byte i;

   for( i = 0; i < 7; i++ )
   {
      pinMode( pinBase + i, OUTPUT );
   }

   pinMode( buttonPin, INPUT );
   delay( 1000 );
}

void loop()
{
   float delayTime = 5.0; // Initiële delay
   int randomDice, previousDice[3] = { -1, -1, -1 };

   randomSeed( analogRead( 1 )); // Randomize met ruis van een open analoge input.

   while( digitalRead( buttonPin ) == HIGH )
   {
      setPins( random( 6 ));
      delay( delayTime );
   }

   while( delayTime < 750 )
   {
      do {
         randomDice = random( 6 ); // Niet de onderzijde van de dobbelsteen als volgende kiezen of de vorige 3 keuzes (niet terug rollen)
      } while( randomDice == previousDice[0] || randomDice == 5 - previousDice[0] || randomDice == previousDice[1] || randomDice == previousDice[2] );
      previousDice[2] = previousDice[1];
      previousDice[1] = previousDice[0];
      previousDice[0] = randomDice;
      setPins( randomDice );
      delay( delayTime );
      delayTime *= 1.15; // Geleidelijk langzamer uitrollen
   }

   while( digitalRead( buttonPin ) == LOW ) {} // Wacht voor indrukken button
}

Advertisement

Terug naar Afgeronde projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 2 gasten