Pages: [1] 2   Go Down
Author Topic: :) my first not-so-good persistence of vision  (Read 6449 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 23
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

My first Arduino project: a classic persistence of vision display.

Definitely disappointed; it seems a lot worse than other ones i have seen people make. smiley-sad
but i think i will try again with another design. a clock perhaps.

any comment on my code? Is there another way to code POV?
it seems so.. laggy?
i read something about using interrupt, but i didn't exactly know how that works. I only have very basic C++/ arduino programming experience.

any advice would be appreciated!  smiley-grin

Quote
// 7 LED POV

// letter width
#define WIDTH 5

//library
const byte font [][WIDTH] =
{
  {0x7e, 0x09, 0x09, 0x09, 0x7e}, //A
  {0x7f, 0x49, 0x49, 0x49, 0x36}, //B
  {0x3e, 0x41, 0x41, 0x41, 0x22}, //C
  {0x7f, 0x41, 0x41, 0x22, 0x1c}, //D
  {0x7f, 0x49, 0x49, 0x49, 0x49}, //E
  {0x7f, 0x09, 0x09, 0x09, 0x09}, //F
  {0x7e, 0x41, 0x49, 0x49, 0x38}, //G
  {0x7f, 0x08, 0x08, 0x08, 0x7f}, //H
  {0x00, 0x41, 0x7f, 0x41, 0x00}, //I
  {0x30, 0x40, 0x41, 0x7f, 0x01}, //J
  {0x7f, 0x08, 0x14, 0x22, 0x41}, //K
  {0x7f, 0x40, 0x40, 0x40, 0x40}, //L
  {0x7f, 0x02, 0x04, 0x02, 0x7f}, //M
  {0x7f, 0x02, 0x0c, 0x10, 0x7f}, //N
  {0x3e, 0x41, 0x41, 0x41, 0x3e}, //O
  {0x1e, 0x21, 0x21, 0x21, 0x5e}, //Q
  {0x7f, 0x09, 0x19, 0x29, 0x46}, //R
  {0x26, 0x49, 0x49, 0x49, 0x32}, //S
  {0x01, 0x01, 0x7f, 0x01, 0x01}, //T
  {0x3f, 0x40, 0x40, 0x40, 0x3f}, //U
  {0x07, 0x38, 0x40, 0x38, 0x07}, //V
  {0x3f, 0x40, 0x3f, 0x40, 0x3f}, //W
  {0x63, 0x14, 0x08, 0x14, 0x63}, //X
  {0x07, 0x08, 0x70, 0x08, 0x07}, //Y
  {0x61, 0x51, 0x49, 0x45, 0x43} //Z  
};
  
void setup()
{  
  for (int k=0;k<=7;k++)
     pinMode(k,OUTPUT);
}


void display (char POVstring[])
{
  for (int i=(strlen(POVstring)-1); i>=0; i--)
    {  for (int j=(WIDTH-1); j>=0; j--)
        { PORTD = font[(int)POVstring-65][j]; delay(1); }
        PORTD = B00000000; delay(1);
    }
}

void loop()
{
 if ( analogRead(5)==0 )
  { display("HELLO"); }
}


« Last Edit: June 23, 2010, 05:44:41 am by alansmk » Logged

Phoenix, Arizona USA
Offline Offline
Faraday Member
**
Karma: 36
Posts: 5519
Where's the beer?
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

First off, never be disappointed in something you have built or made, especially if you did the best job you could or know how. You should only be disappointed if you know you didn't try your best; and the only person who should worry about that is you. Be proud of your accomplishments, because they are for you and you only. Learn from your mistakes and progress, grow, and become better. What you have managed to do is beyond what 99% of the people on this planet can do, if only because they lack the experience, or more likely, the willingness to try (and potentially fail). You have tried and succeeded - REJOICE!

 smiley
Logged

I will not respond to Arduino help PM's from random forum users; if you have such a question, start a new topic thread.

0
Offline Offline
Newbie
*
Karma: 0
Posts: 23
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

lol, not the kind of input i was looking for, but.. thanks!
Logged

Knivsta,Sweden
Offline Offline
Sr. Member
****
Karma: 0
Posts: 274
Low level's cool
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

delay() is rather imprecise around 1 millisecond, try using delayMicroseconds() instead.
What makes you think your POV is worse than others?
« Last Edit: June 23, 2010, 06:16:03 am by drhex » Logged

Global Moderator
UK
Offline Offline
Brattain Member
*****
Karma: 238
Posts: 24317
I don't think you connected the grounds, Dave.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Great work, and everything that cr0sh said.

My questions are,
1) what have you got on analogue pin 5?
2) what do you mean by "laggy"?
3) what is your rotational rate?

"analogRead" is much slower than "digitalRead"
Logged

"Pete, it's a fool looks for logic in the chambers of the human heart." Ulysses Everett McGill.
Do not send technical questions via personal messaging - they will be ignored.

Darlington, UK
Offline Offline
Full Member
***
Karma: 0
Posts: 125
Shaamo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

That's coool  smiley-grin

Might have to have a bash at it myself!
Logged

Norway
Offline Offline
Sr. Member
****
Karma: 4
Posts: 423
microscopic quantum convulsions of space-time
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

I love it!
I especially like the simplicity of your sketch! Beautifully made, well done!:)

I'm also curious about the answers to AWOL's question.
Btw Is that a hall effect sensor I see bent down towards the center?

cr0sh: Wow. Well put! I might be using that as a quote some time smiley
Logged

B0100111001000011, USA
Offline Offline
Edison Member
*
Karma: 0
Posts: 1503
I'm confused.  Wait, maybe not..
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Looks like it works fine to me, and the code truly is a beautiful work of art in its simplicity.

I love it.  I can't stop looking at it! :O
« Last Edit: June 23, 2010, 11:06:11 pm by Tchnclfl » Logged

Somewhere in Arizona
Offline Offline
God Member
*****
Karma: 0
Posts: 725
Arduino must be a drug, because I'm addicted!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I better never hear you say this is bad again! This is way beyond anything I can do! This is genious by standards!  smiley
Logged

Norway
Offline Offline
Sr. Member
****
Karma: 4
Posts: 423
microscopic quantum convulsions of space-time
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

In fact when I think about it, I can probably just about answer AWOL's question 3 from the look(s) of it:

"HELLO" seems to cover about 90 degrees of a circle, 5 letters 5 pixels wide + 4 one-pixel space between letters = 29 pixels, or 29 ms for 1/4 circle. Should be about 8.6 rotations/sec (or 517 RPM).

So display FPS is 8.6-ish Hz? I guess this is what you mean by "laggy"? IE Flicker. Probably, if you switch to micros() as suggested, and also decrease the time between pixel columns (and increase the speed, say at least 4-6 times as fast), you will get a more stable display.
Unless I'm mistaken.
« Last Edit: June 23, 2010, 11:39:47 pm by raron » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 23
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

o, i didn't know there such a thing as Microsecond()
that changes a lot! awesome.

1.) yeah, analog 5 is a hall effect sensor. i didn't know digitalRead is faster.. i suppose i could try that  smiley-grin
2.)i guess laggy as in... it doesn't refresh very fast. hardly "persistence" of vision.
3.) i have no idea what the rotational rate is. i just strapped on a motor and let it spin. lol, i guess raron's guess on the speed is probably right on.

so i could get a more stable display (which was my problem) if i use Microsecond and increase the motor speed? okay, sounds like a easy fix!

wow, thanks for all the positivity / input, guys!
 ;D

« Last Edit: June 24, 2010, 07:50:27 am by alansmk » Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10105
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

i think with some precomputed trigonometry you can also eliminate the letter deformation
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

North Yorkshire, UK
Offline Offline
Faraday Member
**
Karma: 104
Posts: 5531
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
i think with some precomputed trigonometry you can also eliminate the letter deformation
Yes in theory but it would be much more difficult as at the moment, the line of LEDs is defined and lit accordingly. If they were all seperate then they would have to be individually controlled with different time scales etc.

The spaces would then be more stretched.

Personally I think it looks fine  smiley-wink

It would look better with a larger disk so the letters are not so curved but it's not a massive issue  smiley

Mowcius
Logged

Central UK
Offline Offline
Newbie
*
Karma: 0
Posts: 46
Hard of Thinking
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

It is neat code like this that makes me realise I still have lots to learn.
I've been writing the same thing, from a completely different angle, with the letters defined as individual bits.  This is so much tidier.
I'll revisit my code and rewrite my excel font creation spreadsheet to output hex rather than binary.
Most of my issues with writing at the moment seem to relate back to knowing when you can and can't make use of different data types.

Many thanks for posting.
Logged

Dresden, Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 15
constantly learning
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey Alan,
I managed to get a somewhat bigger project done,  and the code for my project is longer...
But: I dont understand a bit of your (appearantly really nice) code! Can you maybe add some comments to the code so that other people can understand what its doing?
Greetings
                          Jan
« Last Edit: June 28, 2010, 07:00:19 am by jfkreuter » Logged

Pages: [1] 2   Go Up
Jump to: