Simple dice

Hi i made a very simple deice to test my skill or lack there of in electronics :wink: it uses the led display that looks like a 8 and has a little dot in the corner. it is wired up as here: http://cybotrules.googlepages.com/pinout.bmp( you will need to know what pin goes to which led)
My code is simple but it works!

int value = 1;
int val = 900;
int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;
int led7 = 8;
int led8 = 9;
void setup()
{
  randomSeed(analogRead(0)); //Random
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
  pinMode(led5,OUTPUT);
  pinMode(led6,OUTPUT);
  pinMode(led7,OUTPUT);
  pinMode(led8,OUTPUT);
}

void loop()
{
  value = random(1, 13); //range for dice add one to the second number as it doesnt include it
  Serial.print(value); // print the number to pc as well for debugging
  Serial.print("  "); //adds double space to output to pc (neatness)
  if (value == 1)     //Begin specs for digits
  {
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);  
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  }
  else{
  }


  if (value == 2)
  {
    digitalWrite(led5, HIGH);
    digitalWrite(led1, HIGH);
    digitalWrite(led6, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  }
  else{
  }


  if (value == 3)
  {
    digitalWrite(led1, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led6, HIGH);
    digitalWrite(led7, HIGH);
    digitalWrite(led4, HIGH);
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  }
  else{
  }

  if (value == 4)
  {
    digitalWrite(led2, HIGH); 
    digitalWrite(led6, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led7, HIGH);  
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  }
  else{
  }

  if (value == 5)
  {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led6, HIGH);
    digitalWrite(led7, HIGH);  
    digitalWrite(led4, HIGH);
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  }
  else{
  }

  if (value == 6)
  {
    digitalWrite(led6, HIGH); 
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led7, HIGH);
    digitalWrite(led4, HIGH); 
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  }
  else{
  }

  if (value == 7){
    digitalWrite(led1, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led7, HIGH);
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  }

  if (value == 8){
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led7, HIGH);
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  }
  else{
  }

  if (value == 9){
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led6, HIGH);
    digitalWrite(led7, HIGH);
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  }
  else{
  }

  if (value == 10){
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led8, HIGH);
    delay(200);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    delay(val);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led7, HIGH);
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led8, LOW);
    digitalWrite(led7, LOW);
  }
  else{
  }

  if (value == 11){
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH); 
    digitalWrite(led8, HIGH);
    delay(200);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);  
    delay(val);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH); 
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led8, LOW);
  }
  else{
  }

  if (value == 12){
    digitalWrite(led2, HIGH);
    digitalWrite(led8, HIGH);
    digitalWrite(led3, HIGH);  
    delay(200);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);  
    delay(val);
    digitalWrite(led5, HIGH);
    digitalWrite(led1, HIGH);
    digitalWrite(led6, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led8, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  } //end of specs
  // check if data has been sent from the computer
  if (Serial.available()) {
    val = Serial.read();
  }

}

:slight_smile:

A comment and a question.

The switch/case statement is intended for this kind of usage over the long string of if/else. Accomplishes the same thing...just looks prettier.

If I'm correct, you're seeding the random number generator with the value of the analog input port. I'm curious why you took that approach. With no inputs attached, does the value of the analog port really vary that much? In theory, one would think it would be zero if there were nothing attached to it. Or did I misread something?

In reply of your second question the analog sensors have a slight thing where there is a variation of the value so that it doesnt seed the same thing twice. I not that good at explaining it its mentioned in the playground thing about random numbers.

Not sure what you mean in the first comment. Little explaining would ne nice. As im not the best coder only been coding for only 2 weeks.

Problem: depending on i our program will execute differently.
i is eelement of [0,2]

Stupid explanatory example:

if - else if - else solution:

if(i=0)
{
statements1;
}
else if(i==1)
{
statements2;
}
else //if(i==3)
{
statements3;
}

switch - case solution

switch( i )
{
case 0:
{ //this sets the scope for variables created inside {...}
statements1;
break;
} //this sets the en of scope
case 1:
{
statements2;
break;
}
case 2:
{
statements;3
break;
}
}//end switch i

I would also recommand that you look up on arrays.

That way you can loop through all pins and set it according to another array. And by the time you get that down, you also might concider making it a function.

NOT TESTED:

/*
|| Demonstration of arrays and a simple comparason
||
||    ___1___ 
||   |       |
|| 2 |       | 5
||   |___6___|
||   |       |
|| 3 |       | 7
||   |_______| 
||      4     <> 8
*/

typedef unsigned char uchar;
#define DICE_PINS 8
//for instance, create an array of your pins
uchar ucMyDice[] = { 2, 3, 4, 5, 6, 7, 8, 9 };
//and then a new array for displaying '4'
uchar ucNumbers[][DICE_PINS]     = {
                                  { 1, 0, 0, 0, 1, 0, 1, 0 }, //pin 2 on, 3 off, 4 off, 5 on, 6 off, 7 on, 8 off
                                  { 1, 0, 1, 1, 1, 1, 0, 0 }, //2
                                  { 0, 0, 0, 0, 0, 0, 0, 0 }, //TODO implement
                                  { 0, 1, 0, 0, 1, 1, 1, 0 }, //TODO implement
                                  { 0, 0, 0, 0, 0, 0, 0, 0 }, //TODO implement
                                  { 0, 0, 0, 0, 0, 0, 0, 0 }  //TODO implement
                                };//  
//later you can loop through both and turn on/off ucMydice according to ucFour


void setup()
{
  for(uchar i=0; i<DICE_PINS; i++)
  {
    pinMode(ucMyDice[i],OUTPUT); //init all pins inside this array as outputs
  }
  lightANumber(2); //test
}

void loop()
{
  //
}

void lightANumber(unsigned char ucNumber)
{
  //loop through all pins according to the number
  for(unsigned char i=0; i<DICE_PINS; i++)
  {
    digitalWrite(ucMyDice[i],ucNumbers[ucNumber-1][i]);
  }
}

I did a little research on seeding random number generators, and using electrical noise is not unusual. Check out random.org. That's valuable information.

If your code were rewritten with the case statement, it would look something like this:

switch(value)
{
case 1: // this means "this is the case where value == 1"
{
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
delay(val);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
}
case 2: // do this when value == 2
{
digitalWrite(led5, HIGH);
digitalWrite(led1, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(val);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
}

etc
etc

default:
{
//whatever code you want to use if all the possibilities fail
}

The array approach would reduce the number of lines of code. With eight LEDs, I'd start thinking of a way to work in binary because I could represent any combination of LEDs on or off with one value, for example, zero would mean everyone is off, 255 would mean everyone is on, 42 would mean LEDs 2, 4 and six are on and the rest are off.

I like chilinski's way of doing it as it would not too much to change. :slight_smile:
Although i will look into using arrays.(not sure how they wokr as of yet)

UPDATE:
Chilinski's way doesnt work for some reason it just rolls a number then displays it and every number after it E.g:
It rolls a 2 (pc says so) so it displays;
2
3
4
5
6
7
8
9
10
11
12.

What gone wrong?
here is my current code:

int value = 1;
int val = 900;
int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int led6 = 7;
int led7 = 8;
int led8 = 9;
void setup()
{
  randomSeed(analogRead(0)); //Random
  Serial.begin(9600);
  pinMode(led1, OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
  pinMode(led5,OUTPUT);
  pinMode(led6,OUTPUT);
  pinMode(led7,OUTPUT);
  pinMode(led8,OUTPUT);
}

void loop()
{
  value = random(1, 13); //range for dice add one to the second number as it doesnt include it
  Serial.print(value); // print the number to pc as well for debugging
  Serial.print("  "); //adds double space to output to pc (neatness)
  
  switch(value)
{
case 1:       // this means "this is the case where value == 1"
 {
 digitalWrite(led2, HIGH);
   digitalWrite(led3, HIGH);
   delay(val);
   digitalWrite(led2, LOW);
   digitalWrite(led3, LOW);
 }
case 2:     // do this when value == 2
 {
   digitalWrite(led5, HIGH);
   digitalWrite(led1, HIGH);
   digitalWrite(led6, HIGH);
   digitalWrite(led3, HIGH);
   digitalWrite(led4, HIGH);
   delay(val);
   digitalWrite(led1, LOW);
   digitalWrite(led5, LOW);
   digitalWrite(led6, LOW);
   digitalWrite(led3, LOW);
   digitalWrite(led4, LOW);
 }
case 3:
  {
    digitalWrite(led1, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led6, HIGH);
    digitalWrite(led7, HIGH);
    digitalWrite(led4, HIGH);
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  }
  
case 4:
  {
    digitalWrite(led2, HIGH); 
    digitalWrite(led6, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led7, HIGH);  
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  }
case 5:
  {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led6, HIGH);
    digitalWrite(led7, HIGH);  
    digitalWrite(led4, HIGH);
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  }
case 6:
  {
    digitalWrite(led6, HIGH); 
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led7, HIGH);
    digitalWrite(led4, HIGH); 
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  }
  
case 7:{
    digitalWrite(led1, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led7, HIGH);
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  }

 case 8:
 {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led6, HIGH);
    digitalWrite(led7, HIGH);
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  }

  case 9:
  {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led6, HIGH);
    digitalWrite(led7, HIGH);
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  }
case 10:
{
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led8, HIGH);
    delay(200);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    delay(val);
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    digitalWrite(led5, HIGH);
    digitalWrite(led7, HIGH);
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led8, LOW);
    digitalWrite(led7, LOW);
  }

  case 11:
  {
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH); 
    digitalWrite(led8, HIGH);
    delay(200);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);  
    delay(val);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH); 
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led8, LOW);
  }

case 12:
{
    digitalWrite(led2, HIGH);
    digitalWrite(led8, HIGH);
    digitalWrite(led3, HIGH);  
    delay(200);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);  
    delay(val);
    digitalWrite(led5, HIGH);
    digitalWrite(led1, HIGH);
    digitalWrite(led6, HIGH);
    digitalWrite(led3, HIGH);
    digitalWrite(led4, HIGH);
    delay(val);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led8, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
  } //end of specs
}
  // check if data has been sent from the computer
  if (Serial.available()) {
    val = Serial.read();
  }


}

Cybot--

In C, a case statement doesn't end just because it hits a new case. You have to insert a break at the end of each case.

case 1:
  do_something();
  break;
case 2:
  do_something_else();
  break;
...

Without the first break, case 1 calls both functions.

FWIW, I vote for AlphaBeta's technique of storing the 7-segment display data in arrays. It makes the code smaller, more easily modifiable, and easier to maintain.

Mikal

Thanks Works perfectly!
The problem with Arrays is that im not sure how they work same as the idea of using binary codes.

The problem with Arrays is that im not sure how they work same as the idea of using binary codes.

The general idea is, instead of writing expansive code like:

digitalWrite(0, LOW);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
...
digitalWrite(15, HIGH);

you encode the sequence of steps into concise data form like

byte pindata[16] = {LOW, HIGH, HIGH, LOW, ..., HIGH};
for (int i=0; i<16; ++i)
  digitalWrite(i, pindata[i]);

On the other hand, I don't know how it's phrased in Australia, but in Texas we say "if it ain't broke, don't fix it.". :slight_smile:

Mikal

I think i understand know of anywhere that has a good tut for arrays?

Sorry if my code was a bit overkill. If you want to familiarize with arrays, play around with http://arduino.cc/en/Tutorial/Loop understand how it works and modify it :slight_smile:

If you do this:

int a=10;
int b=11;
int c=12;

// b + c = 23

And all variables describe the same thing, as for instance a series of out pins, using arrays will simplify thing a whole lot.

This is what happens:

int all = { 10 , 11 , 12 } ;

// all[1] + all[2] = 23

Any specific questions, just ask.

Sorry about neglecting the break. I was cutting and pasting and forgot to add it.

In general, I'd agree not to fix it if "it ain't broke." But the Arduino has a small memory area, so writing efficiently can become critical. You might as well learn now while the projects are merely educational.

The binary stuff. If you have eight LEDs, you can represent each one as on and off with a 1 or 0. So imagine a line like this:

1 1 1 1 0 0 0 0

representing LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1.

So the 11110000 would mean that LED8, LED7, LED6 and LED5 are on and 4 3 2 1 are off. In decimal, 1111000 is equal to 240. You could therefore represent any combination of LEDs on and off with one 8-bit integer (from 0 to 255). Then just mask each bit to find out if that LED is on or off.

I did a search on "Arduino binary" and came up with this link:

So it's even easier than I thought. With basically one command, you can write to all the LEDs at once. No if/else, no arrays, no cases.

So how would i use the binary to control the sets of lights?

Chilinski's assertion that the technique involves "no arrays" is not strictly true, because you still (sort of) have an array of bits. But his idea his sound. In this case, controlling 16 LEDs requires only two bytes of storage, vs. 16 for the "true array" technique I mentioned above. The trade off is that the code is slightly more complicated and opaque, so I wouldn't recommend it for an application like this unless you are really at the edge of memory.

But if you want to try anyway, instead of

byte pindata[16] = {LOW, HIGH, HIGH, LOW, ..., HIGH};
for (int i=0; i<16; ++i)
  digitalWrite(i, pindata[i]);

you could write

const unsigned int pindata = 0b0110001011101001; // binary equivalent of above array
for (int i=0; i<16; ++i)
  digitalWrite(i, (pindata & (0b1000000000000000 >> i)) ? HIGH : LOW);

The & operator is used here to identify whether a particular bit is on or off.

Mikal

It IS true. There is a built-in constant called PORTD that writes to all eight pins simultaneously. Look at the example on the link I posted last night: & - Arduino Reference and also check this one in the reference area: Arduino Reference - Arduino Reference .

Basically, you tell the port that it's going to be an output and then you use a line like PORTD = some_binary_value.

PORTD allows you to write to all the pins. So if you wrote PORTD = B1010100 you would set pins 7, 5 and 3 high.

So you could do something as simple as:

randomSeed(analogRead(0));
value = random(1,255);
DDRD = DDRD | B11111111; //set the port to output using all pins
PORTD = value; //turns pins on and off according to value of value

Note that you cannot generate a random number between 1 and 12 because 12 is 00001100 in binary, which would only turn on pins 3 and 2. To control all the pins you need values between 0 and 255.

HEY, this is important. I didn't know this until you brought this whole thing up. I learned something really great from your question. So THANKS!

Quite right. And if efficiency is a question, it is faster to perform direct port writes. But in my opinion this is overkill for a dice program, which needn't be at all high performing. Also, it wouldn't be appropriate to set all the pins to random values, because the goal is to have 2 seven-segment displays coherently displaying random digits. You must still encode the way each digit looks somewhere, and that usually means defining an array of bits or bytes.

If you hook up your pins so that on your diagram pin 1 actually goes to pin 0 and pin 2 goes to pin 1 and so on. You can use the port manipulation.

void setup()
{
      DDRD = B11111111;
}

void loop()
{
      randomSeed(analogRead(0));
      switch(random(1,7))
      {
            case 1:
            PORTD = B01010000;
            break;
                  
            case 2:
            PORTD = B00111101;
            break;
                  
            case 3:
            PORTD = B01111001;
            break;
            
            case 4:
            PORTD = B01110010;
            break;
      
            case 5:
            PORTD = B01101011;
            break;
            
            case 6:
            PORTD = B01101111;
            break;
      }
        delay(1000);
}