Pages: [1]   Go Down
Author Topic: Happy Xmas POV display  (Read 581 times)
0 Members and 1 Guest are viewing this topic.
scotlans
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi folks

I thought some one might be interested in this simple POV code which spells out Happy Xmas using LEDs on D2 to D10:-


int HappyXmas[50] = {254,16,16,254,0,62,72,72,62,0,63,68,68,56,0,63,68,68,56,0,0,114,9,9,126,0,0,198,40,16,40,198,62,96,62,96,62,0,62,72,72,62,0,36,82,74,36,0,0,0};

void setup() {:
for  (int i=0; i< 20; i++) pinMode(i,OUTPUT);
for  (int i=0; i< 20; i++) digitalWrite(i,LOW);
}

void loop() {
for  (int j=0; j< 50; j++)
    {
    int Row = HappyXmas[j];
    for  (int i=0; i< 8; i++)
      {
      // LEds on D2 to D10.
      if (Row == (Row/2)*2)digitalWrite(i+2,LOW);  else digitalWrite(i+2,HIGH);   
      Row = Row >> 1;
      };
    delay(2);   
    };
   delay(100);
}
Logged

Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

There's a : in there that will prevent the code from even compiling.

Too many ;'s around...

Why do you initialize D0 to D19 if you only use D2..D10 ?

Here's a slightly modified version:

Code:
// LEds on D2 to D10.

#define ARY_LEN(a) (sizeof(a)/(sizeof(a[0])))

int HappyXmas[] = {
    254,16,16,254,0,62,72,72,62,0,63,68,68,56,0,63,68,68,56,0,0,114,9,9,126,0,0,198,40,16,40,198,62,96,62,96,62,0,62,72,72,62,0,36,82,74,36,0,0,0
};


void setup() {
    for  (int i = 0; i < 20; i++) pinMode(i,OUTPUT);
    for  (int i = 0; i < 20; i++) digitalWrite(i,LOW);
}

void loop() {
    for  (int j = 0; j < ARY_LEN(HappyXmas); j++) {
        int Row = HappyXmas[j];
        for (int i = 0; i < 8; i++) {
            if (bitRead(Row, i)) {
                digitalWrite(i+2, HIGH);   
            }
            else {
                digitalWrite(i+2, LOW);
            }
            Row = Row >> 1;
        }
        delay(2);   
    }
    delay(100);
}
Logged

Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Edit: there's an error: D2..D10 are 9 pins, so in fact you're only using D2..D9

Here's a 2nd revision:

Code:
// LEds on D2 to D9.


#define ARY_LEN(a) (sizeof(a)/(sizeof(a[0])))


byte ledPins[] = {
    2, 3, 4, 5, 6, 7, 8, 9
};

const byte NUM_PINS = ARY_LEN(ledPins);


unsigned int HappyXmas[] = {
    254,16,16,254,0,62,72,72,62,0,63,68,68,56,0,63,68,68,56,0,0,114,9,9,126,0,0,198,40,16,40,198,62,96,62,96,62,0,62,72,72,62,0,36,82,74,36,0,0,0
};

const byte NUM_ROWS = ARY_LEN(HappyXmas);


void setup() {
    for  (int i = 0; i < NUM_PINS; i++) {
        pinMode(i, OUTPUT);
        digitalWrite(i, LOW);
    }
}


void loop() {
    for  (int j = 0; j < NUM_ROWS; j++) {
       
        int Row = HappyXmas[j];
       
        for (int i = 0; i < NUM_PINS; i++) {
            if (bitRead(Row, i)) {
                digitalWrite(ledPins[i], HIGH);   
            }
            else {
                digitalWrite(ledPins[i], LOW);
            }
        }
        delay(2);   
    }
    delay(100);
}

Also, how is it all wired up ? The leds must be moving somehow I guess...
Logged

Pages: [1]   Go Up
Jump to: