Dobbelsteen

Toon hier Uw afgeronde projecten aan anderen.
Gebruikers-avatar
Berichten: 12
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

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: Dobbelsteen

Berichtdoor ctunes » 21 Mei 2021, 00:56

weirdweb schreef:
Code: Alles selecteren
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
   }
}


Hoi.

Ik heb met dergelijke code altijd wat problemen.

De programmeur zelf weet precies wat er gebeurt, maar de buitenstaander heeft weinig aan de "documentatie" in "mixed languages".

Wees: of duidelijker in de code, of meer duidelijk in de documentatie.

Obfuscated programmeren kunnen we allemaal al, en ik meen dat jouw bedoeling was dat wij iets konden leren?

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Dobbelsteen

Berichtdoor shooter » 22 Mei 2021, 13:26

ja je hebt gelijk de bits komen juist uit een dice array en gaan naar pinbase, tja ik moest even opzoeken wat obfuscated betekent hoor, ik zou zeggen kies voor de politiek.
paul deelen
shooter@home.nl

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: Dobbelsteen

Berichtdoor ctunes » 23 Mei 2021, 19:10

https://www.ioccc.org
To show the importance of programming style, in an ironic way.

Terug naar Afgeronde projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 2 gasten