$10 ATtiny85/45 POV Display!! (works Really Well)

50,042

134

41

Posted

Introduction: $10 ATtiny85/45 POV Display!! (works Really Well)

Hey guys! This is an Instructable for making your own ATtiny85/45 5 LED POV (Persistence Of Vision) display!

This is my second Instructable, also for the Elemental LED contest, so drop a comment and vote it up!

The total parts cost for this POV display is under $10! (If you get the parts from a wholesale supplier, like Mouser or Digi-Key)

I apologize for all the horribly blurry pictures, I'm using my iPod touch to take them (what a crap camera on that one, right?) I will be taking the pictures with a different camera for my future Instructables. :)

Step 1: Parts List

Things you will need:

Parts:
1x ATtiny85/45 microcontroller
1x 8 pin DIP socket
1x 2 position slide switch
1x 100-220 Ohm resistor
1x 2 AA battery pack
5x LEDs (any color) (I used rectangular 2x5mm LEDs because they fit right next to each other without a gap on the perfboard)
Some bits of wire
Some perfboard

Tools:
1x AVR programmer (can be an Arduino, go here for instructions)
1x Saw or Dremel for cutting the perfboard down to size

Step 2: Circuit Schematic

Here's the schematic for the circuit. I have attached the Eagle .sch file at the bottom.

Step 3: Program the ATtiny MCU

I made an Arudino sketch to upload to the ATtiny, so the Arduino would be the logical choice for uploading to the ATtiny. You can find a guide on how to do this here. (You can skip the guide if you already know how)

After you followed the guide above, hook up the ATtiny, and upload the sketch.

To change the message displayed, open the sketch, and scroll all the way down to the bottom. There will be a line that says "displayString("wow!!");", you can change the text inside quotes if you want to change the message. After you have done that, just re-upload the sketch to the ATtiny and you're ready to go.

Here's the code (for some reason it's not letting me upload the .pde file, it keep saying either HTTP Error or ir gets stuck at 100%. If anybody knows how to fix this please do tell.):


int delayTime = 2; //sub-char delay time
int charBreak = 5; //char delay time

int LED1 = 0;
int LED2 = 1;
int LED3 = 2;
int LED4 = 3;
int LED5 = 4;

void setup()
{
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);
  pinMode(7, INPUT); 
}

int a[] = {1, 6, 26, 6, 1};
int b[] = {31, 21, 21, 10, 0};
int c2[] = {14, 17, 17, 10, 0};
int d[] = {31, 17, 17, 14, 0};
int e[] = {31, 21, 21, 17, 0};
int f[] = {31, 20, 20, 16, 0};
int g[] = {14, 17, 19, 10, 0};
int h[] = {31, 4, 4, 4, 31};
int i[] = {0, 17, 31, 17, 0};
int j[] = {0, 17, 30, 16, 0};
int k[] = {31, 4, 10, 17, 0};
int l[] = {31, 1, 1, 1, 0};
int m[] = {31, 12, 3, 12, 31};
int n[] = {31, 12, 3, 31, 0};
int o[] = {14, 17, 17, 14, 0};
int p[] = {31, 20, 20, 8, 0};
int q[] = {14, 17, 19, 14, 2};
int r[] = {31, 20, 22, 9, 0};
int s[] = {8, 21, 21, 2, 0};
int t[] = {16, 16, 31, 16, 16};
int u[] = {30, 1, 1, 30, 0};
int v[] = {24, 6, 1, 6, 24};
int w[] = {28, 3, 12, 3, 28};
int x[] = {17, 10, 4, 10, 17};
int y[] = {17, 10, 4, 8, 16};
int z[] = {19, 21, 21, 25, 0};

int eos[] = {0, 1, 0, 0, 0};
int excl[] = {0, 29, 0, 0, 0};
int ques[] = {8, 19, 20, 8, 0};

void displayLine(int line)
{
  int myline;
  myline = line;
  if (myline>=16) {digitalWrite(LED1, HIGH); myline-=16;} else {digitalWrite(LED1, LOW);}
  if (myline>=8)  {digitalWrite(LED2, HIGH); myline-=8;}  else {digitalWrite(LED2, LOW);}
  if (myline>=4)  {digitalWrite(LED3, HIGH); myline-=4;}  else {digitalWrite(LED3, LOW);}
  if (myline>=2)  {digitalWrite(LED4, HIGH); myline-=2;}  else {digitalWrite(LED4, LOW);}
  if (myline>=1)  {digitalWrite(LED5, HIGH); myline-=1;}  else {digitalWrite(LED5, LOW);} 
}

void displayChar(char c)
{
  if (c == 'a'){for (int i = 0; i <5; i++){displayLine(a[i]);delay(delayTime);}displayLine(0);}
  if (c == 'b'){for (int i = 0; i <5; i++){displayLine(b[i]);delay(delayTime);}displayLine(0);}
  if (c == 'c'){for (int i = 0; i <5; i++){displayLine(c2[i]);delay(delayTime);}displayLine(0);}
  if (c == 'd'){for (int i = 0; i <5; i++){displayLine(d[i]);delay(delayTime);}displayLine(0);}
  if (c == 'e'){for (int i = 0; i <5; i++){displayLine(e[i]);delay(delayTime);}displayLine(0);}
  if (c == 'f'){for (int i = 0; i <5; i++){displayLine(f[i]);delay(delayTime);}displayLine(0);}
  if (c == 'g'){for (int i = 0; i <5; i++){displayLine(g[i]);delay(delayTime);}displayLine(0);}
  if (c == 'h'){for (int i = 0; i <5; i++){displayLine(h[i]);delay(delayTime);}displayLine(0);} 
  if (c == 'i'){for (int it = 0; it <5; it++){displayLine(i[it]);delay(delayTime);}displayLine(0);}
  if (c == 'j'){for (int i = 0; i <5; i++){displayLine(j[i]);delay(delayTime);}displayLine(0);}
  if (c == 'k'){for (int i = 0; i <5; i++){displayLine(k[i]);delay(delayTime);}displayLine(0);}
  if (c == 'l'){for (int i = 0; i <5; i++){displayLine(l[i]);delay(delayTime);}displayLine(0);}
  if (c == 'm'){for (int i = 0; i <5; i++){displayLine(m[i]);delay(delayTime);}displayLine(0);}
  if (c == 'n'){for (int i = 0; i <5; i++){displayLine(n[i]);delay(delayTime);}displayLine(0);}
  if (c == 'o'){for (int i = 0; i <5; i++){displayLine(o[i]);delay(delayTime);}displayLine(0);}
  if (c == 'p'){for (int i = 0; i <5; i++){displayLine(p[i]);delay(delayTime);}displayLine(0);}
  if (c == 'q'){for (int i = 0; i <5; i++){displayLine(q[i]);delay(delayTime);}displayLine(0);}
  if (c == 'r'){for (int i = 0; i <5; i++){displayLine(r[i]);delay(delayTime);}displayLine(0);}
  if (c == 's'){for (int i = 0; i <5; i++){displayLine(s[i]);delay(delayTime);}displayLine(0);}
  if (c == 't'){for (int i = 0; i <5; i++){displayLine(t[i]);delay(delayTime);}displayLine(0);}
  if (c == 'u'){for (int i = 0; i <5; i++){displayLine(u[i]);delay(delayTime);}displayLine(0);}
  if (c == 'v'){for (int i = 0; i <5; i++){displayLine(v[i]);delay(delayTime);}displayLine(0);}
  if (c == 'w'){for (int i = 0; i <5; i++){displayLine(w[i]);delay(delayTime);}displayLine(0);}
  if (c == 'x'){for (int i = 0; i <5; i++){displayLine(x[i]);delay(delayTime);}displayLine(0);}
  if (c == 'y'){for (int i = 0; i <5; i++){displayLine(y[i]);delay(delayTime);}displayLine(0);}
  if (c == 'z'){for (int i = 0; i <5; i++){displayLine(z[i]);delay(delayTime);}displayLine(0);}
  if (c == '!'){for (int i = 0; i <5; i++){displayLine(excl[i]);delay(delayTime);}displayLine(0);}
  if (c == '?'){for (int i = 0; i <5; i++){displayLine(ques[i]);delay(delayTime);}displayLine(0);}
  if (c == '.'){for (int i = 0; i <5; i++){displayLine(eos[i]);delay(delayTime);}displayLine(0);}
  delay(charBreak);
}

void displayString(char* s)
{
  for (int i = 0; i<=strlen(s); i++)
  {
    displayChar(s[i]);
  }
}

void loop()
{   
  displayString("wow!!");
}

Step 4: Breadboard It!

Now assemble the circuit on a breadboard to make sure that it is working properly. Power it with a 3 volt power source (such as 2 AA batteries or a CR2032 3V coin cell battery)

Make sure that the LEDs are in the right order. I will put the LED order first, and then the ATtiny pin it connects to.

Top LED - pin 3
Second LED from top - pin 2
Middle LED - pin 7
Second LED from bottom - pin 6
Bottom LED - pin 5

Step 5: Solder It!

When you have made the circuit on a breadboard and checked that it is working, you can solder it to a small piece of perfboard.
I used a piece about 12 holes long by 17 holes wide, but I'm sure you could make it smaller if you want.

I used rectangular 2x5mm LEDs because they fit right next to each other without a gap on the perfboard, and that makes the picture look better.

Step 6: Make It Look Nice!

I attached the battery pack to the back of the perfboard with hot glue, and then I used my Dremel to cut the part of my perfboard with the circuit on it to as small as I could. Then I used a sanding bit on the Dremel to make the edges nice and smooth and rounded.

Now it looks a lot better ;)

Step 7: Now You're Done! Good Job!

Now you can test out your brand-new POV display. You can change the text that displays on it as many times as you want by simply hooking it back up to the Arduino for programming, changing the message at the bottom of the code (in to "void loop()" function), and re-uploading to the ATtiny.

If it is not working, try using it upside-down instead.

Have fun!

3 People Made This Project!

  • Just completed the c...-bd594

    bd594 made it!

  • I made a PCB using F...-B45i

    B45i made it!

  • I made it with Etche...-Jamebonds1

    Jamebonds1 made it!

Recommendations

  • Epilog Challenge 9

    Epilog Challenge 9
  • First Time Author Contest 2018

    First Time Author Contest 2018
  • Sew Warm Contest 2018

    Sew Warm Contest 2018
user

We have a be nice policy.
Please be positive and constructive.

Tips

Questions

38 Comments

// When Uploading the code you should use the ATTiny 85 @ 1MHZ option

// This version will allow you to use a wand instead of a motor. You will need to connect a 4.7K resistor between PB5 (pin1)

// on the ATTiny85 and VCC. Connect the tilt switch between PB5 (pin 1) and ground.

// As you wave the wand DOWN the display will turn ON and display the text. As you wave the wand UP the display will turn off.

// This way you will not be distracted with the text showing both forward and backward characters.

// depending how you mount the tilt switch if the characters are displaying backward just change the value of the

// TiltSwitchState from 0 to 1 in the IF statement under the "DisplayString(char* s)" routine.

int delayTime =1; //sub-char delay time

int charBreak = 5; //char delay time

int LED1 = 0;

int LED2 = 1;

int LED3 = 2;

int LED4 = 3;

int LED5 = 4;

int TiltSwitchState = 0;

void setup()

{

pinMode(LED1, OUTPUT); // PB0 which is Pin 5

pinMode(LED2, OUTPUT); // PB1 which is Pin 6

pinMode(LED3, OUTPUT); // PB2 which is Pin 7

pinMode(LED4, OUTPUT); // PB3 which is Pin 2

pinMode(LED5, OUTPUT); // PB4 which is Pin 3

pinMode(5, INPUT); // Tilt Switch on PB5 which is Pin 1 use 4.7K pull up resistor to VCC

}

int a[] = {1, 6, 26, 6, 1};

int b[] = {31, 21, 21, 10, 0};

int c2[] = {14, 17, 17, 10, 0};

int d[] = {31, 17, 17, 14, 0};

int e[] = {31, 21, 21, 17, 0};

int f[] = {31, 20, 20, 16, 0};

int g[] = {14, 17, 19, 10, 0};

int h[] = {31, 4, 4, 4, 31};

int i[] = {0, 17, 31, 17, 0};

int j[] = {0, 17, 30, 16, 0};

int k[] = {31, 4, 10, 17, 0};

int l[] = {31, 1, 1, 1, 0};

int m[] = {31, 12, 3, 12, 31};

int n[] = {31, 12, 3, 31, 0};

int o[] = {14, 17, 17, 14, 0};

int p[] = {31, 20, 20, 8, 0};

int q[] = {14, 17, 19, 14, 2};

int r[] = {31, 20, 22, 9, 0};

int s[] = {8, 21, 21, 2, 0};

int t[] = {16, 16, 31, 16, 16};

int u[] = {30, 1, 1, 30, 0};

int v[] = {24, 6, 1, 6, 24};

int w[] = {28, 3, 12, 3, 28};

int x[] = {17, 10, 4, 10, 17};

int y[] = {17, 10, 4, 8, 16};

int z[] = {19, 21, 21, 25, 0};

int eos[] = {0, 1, 0, 0, 0};

int excl[] = {0, 29, 0, 0, 0};

int ques[] = {8, 19, 20, 8, 0};

void displayLine(int line)

{

int myline;

myline = line;

if (myline>=16) {digitalWrite(LED1, HIGH); myline-=16;} else {digitalWrite(LED1, LOW);}

if (myline>=8) {digitalWrite(LED2, HIGH); myline-=8;} else {digitalWrite(LED2, LOW);}

if (myline>=4) {digitalWrite(LED3, HIGH); myline-=4;} else {digitalWrite(LED3, LOW);}

if (myline>=2) {digitalWrite(LED4, HIGH); myline-=2;} else {digitalWrite(LED4, LOW);}

if (myline>=1) {digitalWrite(LED5, HIGH); myline-=1;} else {digitalWrite(LED5, LOW);}

}

void displayChar(char c)

{

if (c == 'a'){for (int i = 0; i <5; i++){displayLine(a[i]);delay(delayTime);}displayLine(0);}

if (c == 'b'){for (int i = 0; i <5; i++){displayLine(b[i]);delay(delayTime);}displayLine(0);}

if (c == 'c'){for (int i = 0; i <5; i++){displayLine(c2[i]);delay(delayTime);}displayLine(0);}

if (c == 'd'){for (int i = 0; i <5; i++){displayLine(d[i]);delay(delayTime);}displayLine(0);}

if (c == 'e'){for (int i = 0; i <5; i++){displayLine(e[i]);delay(delayTime);}displayLine(0);}

if (c == 'f'){for (int i = 0; i <5; i++){displayLine(f[i]);delay(delayTime);}displayLine(0);}

if (c == 'g'){for (int i = 0; i <5; i++){displayLine(g[i]);delay(delayTime);}displayLine(0);}

if (c == 'h'){for (int i = 0; i <5; i++){displayLine(h[i]);delay(delayTime);}displayLine(0);}

if (c == 'i'){for (int it = 0; it <5; it++){displayLine(i[it]);delay(delayTime);}displayLine(0);}

if (c == 'j'){for (int i = 0; i <5; i++){displayLine(j[i]);delay(delayTime);}displayLine(0);}

if (c == 'k'){for (int i = 0; i <5; i++){displayLine(k[i]);delay(delayTime);}displayLine(0);}

if (c == 'l'){for (int i = 0; i <5; i++){displayLine(l[i]);delay(delayTime);}displayLine(0);}

if (c == 'm'){for (int i = 0; i <5; i++){displayLine(m[i]);delay(delayTime);}displayLine(0);}

if (c == 'n'){for (int i = 0; i <5; i++){displayLine(n[i]);delay(delayTime);}displayLine(0);}

if (c == 'o'){for (int i = 0; i <5; i++){displayLine(o[i]);delay(delayTime);}displayLine(0);}

if (c == 'p'){for (int i = 0; i <5; i++){displayLine(p[i]);delay(delayTime);}displayLine(0);}

if (c == 'q'){for (int i = 0; i <5; i++){displayLine(q[i]);delay(delayTime);}displayLine(0);}

if (c == 'r'){for (int i = 0; i <5; i++){displayLine(r[i]);delay(delayTime);}displayLine(0);}

if (c == 's'){for (int i = 0; i <5; i++){displayLine(s[i]);delay(delayTime);}displayLine(0);}

if (c == 't'){for (int i = 0; i <5; i++){displayLine(t[i]);delay(delayTime);}displayLine(0);}

if (c == 'u'){for (int i = 0; i <5; i++){displayLine(u[i]);delay(delayTime);}displayLine(0);}

if (c == 'v'){for (int i = 0; i <5; i++){displayLine(v[i]);delay(delayTime);}displayLine(0);}

if (c == 'w'){for (int i = 0; i <5; i++){displayLine(w[i]);delay(delayTime);}displayLine(0);}

if (c == 'x'){for (int i = 0; i <5; i++){displayLine(x[i]);delay(delayTime);}displayLine(0);}

if (c == 'y'){for (int i = 0; i <5; i++){displayLine(y[i]);delay(delayTime);}displayLine(0);}

if (c == 'z'){for (int i = 0; i <5; i++){displayLine(z[i]);delay(delayTime);}displayLine(0);}

if (c == '!'){for (int i = 0; i <5; i++){displayLine(excl[i]);delay(delayTime);}displayLine(0);}

if (c == '?'){for (int i = 0; i <5; i++){displayLine(ques[i]);delay(delayTime);}displayLine(0);}

if (c == '.'){for (int i = 0; i <5; i++){displayLine(eos[i]);delay(delayTime);}displayLine(0);}

delay(charBreak);

}

void displayString(char* s)

{

TiltSwitchState = digitalRead(5);

if (TiltSwitchState == 0) {

for (int i = 0; i<=strlen(s); i++)

{

displayChar(s[i]);

}

}

}

void loop()

{

displayString("abc");

}

Great first POV project!

attiny45 NOTE: I'm using ATtiny 45
on this, and ran into a problem of memory overflow. I don;t know why,
because the 45 is supposed ot have 4k on it, but it would not do
anything, even thpough the compiler only counted about 2.5k???. The
only workaround I found to make it function was to reduce the code
size. I // commented out the all the 'if (c==' lines in the displayChar
method that weren't included in my dispay word, and it works fine. (In
the "wow! case, only the w, the o, and the ! remained un-

commented-out)
now it works. Probably not a problem with the 85. Also if using 3v,
you can probably use less of a resistor (or none, I have mine jumped
out) because it's pretty dim with 220.

DSCN2734.JPG

The bootloader takes up about 2K, that is why your compiler reports
about 4-2 = 2K. Program the Attiny45 without bootloader (with a
programmer or Arduino) or easier, use an Attiny85 which have 6K.

Have you upload with ATTiny85 1 MHz? 8 MHz doesn't work well because it is equal to or less than 3 Volt.

Updated the code for anyone still interested. The letters on the device are capital letters, but the input is lowercase. This was a gotcha that needed to be fixed. Also added a character for a space, so you could put a space between words.

int delayTime = 2;
int charBreak = 5;
int LED1 = 4;
int LED2 = 3;
int LED3 = 2;
int LED4 = 1;
int LED5 = 0;

void setup()

{
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
}

int A[] = {7, 10, 18, 10, 7};
int B[] = {31, 21, 21, 10, 0};
int C[] = {14, 17, 17, 10, 0};
int D[] = {31, 17, 17, 14, 0};
int E[] = {31, 21, 21, 17, 0};
int F[] = {31, 20, 20, 16, 0};
int G[] = {14, 17, 19, 10, 0};
int H[] = {31, 4, 4, 4, 31};
int I[] = {0, 17, 31, 17, 0};
int J[] = {0, 17, 30, 16, 0};
int K[] = {31, 4, 10, 17, 0};
int L[] = {31, 1, 1, 1, 0};
int M[] = {31, 12, 3, 12, 31};
int N[] = {31, 12, 3, 31, 0};
int O[] = {14, 17, 17, 14, 0};
int P[] = {31, 20, 20, 8, 0};
int Q[] = {31, 17, 17, 19, 31};
int R[] = {31, 20, 22, 9, 0};
int S[] = {8, 21, 21, 2, 0};
int T[] = {16, 16, 31, 16, 16};
int U[] = {30, 1, 1, 30, 0};
int V[] = {24, 6, 1, 6, 24};
int W[] = {28, 3, 12, 3, 28};
int X[] = {17, 10, 4, 10, 17};
int Y[] = {17, 10, 4, 8, 16};
int Z[] = {19, 21, 21, 25, 0};
int eos[] = {0, 1, 0, 0, 0};
int excl[] = {0, 29, 0, 0, 0};
int ques[] = {8, 19, 20, 8, 0};
int spc[] = {0, 0, 0, 0};

void displayLine(int line)
{
int myline;
myline = line;
if (myline>=16) {digitalWrite(LED1, HIGH); myline-=16;} else {digitalWrite(LED1, LOW);}
if (myline>=8) {digitalWrite(LED2, HIGH); myline-=8;} else {digitalWrite(LED2, LOW);}
if (myline>=4) {digitalWrite(LED3, HIGH); myline-=4;} else {digitalWrite(LED3, LOW);}
if (myline>=2) {digitalWrite(LED4, HIGH); myline-=2;} else {digitalWrite(LED4, LOW);}
if (myline>=1) {digitalWrite(LED5, HIGH); myline-=1;} else {digitalWrite(LED5, LOW);}
}

void displayChar(char c)
{
if (c == 'A'){for (int i = 0; i <5; i++){displayLine(A[i]);delay(delayTime);}displayLine(0);}
if (c == 'B'){for (int i = 0; i <5; i++){displayLine(B[i]);delay(delayTime);}displayLine(0);}
if (c == 'C'){for (int i = 0; i <5; i++){displayLine(C[i]);delay(delayTime);}displayLine(0);}
if (c == 'D'){for (int i = 0; i <5; i++){displayLine(D[i]);delay(delayTime);}displayLine(0);}
if (c == 'E'){for (int i = 0; i <5; i++){displayLine(E[i]);delay(delayTime);}displayLine(0);}
if (c == 'F'){for (int i = 0; i <5; i++){displayLine(F[i]);delay(delayTime);}displayLine(0);}
if (c == 'G'){for (int i = 0; i <5; i++){displayLine(G[i]);delay(delayTime);}displayLine(0);}
if (c == 'H'){for (int i = 0; i <5; i++){displayLine(H[i]);delay(delayTime);}displayLine(0);}
if (c == 'I'){for (int it = 0; it <5; it++){displayLine(I[it]);delay(delayTime);}displayLine(0);}
if (c == 'J'){for (int i = 0; i <5; i++){displayLine(J[i]);delay(delayTime);}displayLine(0);}
if (c == 'K'){for (int i = 0; i <5; i++){displayLine(K[i]);delay(delayTime);}displayLine(0);}
if (c == 'L'){for (int i = 0; i <5; i++){displayLine(L[i]);delay(delayTime);}displayLine(0);}
if (c == 'M'){for (int i = 0; i <5; i++){displayLine(M[i]);delay(delayTime);}displayLine(0);}
if (c == 'N'){for (int i = 0; i <5; i++){displayLine(N[i]);delay(delayTime);}displayLine(0);}
if (c == 'O'){for (int i = 0; i <5; i++){displayLine(O[i]);delay(delayTime);}displayLine(0);}
if (c == 'P'){for (int i = 0; i <5; i++){displayLine(P[i]);delay(delayTime);}displayLine(0);}
if (c == 'Q'){for (int i = 0; i <5; i++){displayLine(Q[i]);delay(delayTime);}displayLine(0);}
if (c == 'R'){for (int i = 0; i <5; i++){displayLine(R[i]);delay(delayTime);}displayLine(0);}
if (c == 'S'){for (int i = 0; i <5; i++){displayLine(S[i]);delay(delayTime);}displayLine(0);}
if (c == 'T'){for (int i = 0; i <5; i++){displayLine(T[i]);delay(delayTime);}displayLine(0);}
if (c == 'U'){for (int i = 0; i <5; i++){displayLine(U[i]);delay(delayTime);}displayLine(0);}
if (c == 'V'){for (int i = 0; i <5; i++){displayLine(V[i]);delay(delayTime);}displayLine(0);}
if (c == 'W'){for (int i = 0; i <5; i++){displayLine(W[i]);delay(delayTime);}displayLine(0);}
if (c == 'X'){for (int i = 0; i <5; i++){displayLine(X[i]);delay(delayTime);}displayLine(0);}
if (c == 'Y'){for (int i = 0; i <5; i++){displayLine(Y[i]);delay(delayTime);}displayLine(0);}
if (c == 'Z'){for (int i = 0; i <5; i++){displayLine(Z[i]);delay(delayTime);}displayLine(0);}
if (c == '!'){for (int i = 0; i <5; i++){displayLine(excl[i]);delay(delayTime);}displayLine(0);}
if (c == '?'){for (int i = 0; i <5; i++){displayLine(ques[i]);delay(delayTime);}displayLine(0);}
if (c == '.'){for (int i = 0; i <5; i++){displayLine(eos[i]);delay(delayTime);}displayLine(0);}
if (c == ' '){for (int i = 0; i <5; i++){displayLine(spc[i]);delay(delayTime);}displayLine(0);}

delay(charBreak);

}

void displayString(char* s)
{
for (int i = 0; i<=strlen(s); i++)
{
displayChar(s[i]);
}

}

void loop()

{

displayString("GOD BLESS AMERICA!!!.... ");

// displayString("JULIUS! ");

}

Popsicle stick POV

http://youtu.be/ono6w5bb4YU

Hey, great project!


...But I can't read the obviously "modulated" blinking "WOW!!".
1. I only had common anode LEDs.... So I switched the HIGH for LOW, and vice versa.
2. It runs different speeds depending on whether I program using attiny85@1MHZ or 8MHz... Not sure if that is the problem....persistence?

Should I have changed the delay times as well?


Thanks beforehand for your speedy response.

Chas

Common anode LEDs? You use 5 separate LEDs. You should have 5 cathodes and 5 anodes, so i don't see what you're getting at.

Since 8MHz is a faster clock speed than 1MHz, the code will run faster on 8MHz, therefore you will probably have to wave the device faster to see them message.

...And yes, I am using 5 Rgb-LEDs.

C