summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Matrix-5x6/Blink5x6_05_font.pde174
1 files changed, 174 insertions, 0 deletions
diff --git a/Matrix-5x6/Blink5x6_05_font.pde b/Matrix-5x6/Blink5x6_05_font.pde
new file mode 100644
index 0000000..8f95209
--- /dev/null
+++ b/Matrix-5x6/Blink5x6_05_font.pde
@@ -0,0 +1,174 @@
+/*
+5x6 LEDs Text scroller
+Frank Bartels 2010
+ */
+
+#define leaner 1 // 0:std 1:normal 2:lean
+//char myoutstring[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
+//char myoutstring[]="0123456789 ";
+//char myoutstring[]="789";
+char myoutstring[]="TOPPOINT KIEL FRICKL 27C3 ";
+int myoutstringpos=0;
+
+#define NledPins 6
+int ledPins[NledPins] = { 7,6,5,4,3,2 };
+
+int i, j, k, x,y,xx,yy, lum=0,newscr=0,tmp;
+int scrollx,scrolly;
+#define SCRdx 5
+#define SCRdy 6
+#define OSf 4 // oversampling factor <=5, sonst Speicher voll!
+
+// int=2 ByteFRICKL FRICKL
+int scr[SCRdx][SCRdy]; // (real) screen
+int vscr[SCRdx*OSf][SCRdy*OSf]; // virtual (high res) screen
+
+#define CFONTwidth 0x5 // (font constant)
+#define CFONTwidth2 0x7 // with std space between chars std=7
+#define CFONTstart 0x20
+#define CFONTend 0x5b
+char cfont[]=
+{ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x20
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x21
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x22
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x23
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x24
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x25
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x26
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x27
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x28
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x29
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x2a
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x2b
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x2c
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x2d
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x2e
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x2f
+ //0x1e, 0x31, 0x29, 0x25, 0x1e, // 0x30 0
+ 0x1e, 0x21, 0x2d, 0x21, 0x1e, // 0x30 0
+ 0x00, 0x22, 0x3f, 0x20, 0x00, // 0x31 1
+ 0x22, 0x31, 0x29, 0x29, 0x26, // 0x32 2
+ 0x12, 0x21, 0x25, 0x25, 0x1a, // 0x33 3
+ 0x18, 0x14, 0x12, 0x3f, 0x10, // 0x34 4
+ 0x22, 0x25, 0x25, 0x25, 0x18, // 0x35 5
+ //0x1e, 0x29, 0x29, 0x29, 0x1a, // 0x36 6
+ 0x1e, 0x25, 0x25, 0x25, 0x18, // 0x36 6
+ 0x01, 0x01, 0x31, 0x0d, 0x03, // 0x37 7
+ 0x1a, 0x25, 0x25, 0x25, 0x1a, // 0x38 8
+ 0x06, 0x29, 0x29, 0x29, 0x1e, // 0x39 9
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x3a
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x3b
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x3c
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x3d
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x3e
+ 0x00, 0x00, 0x00, 0x00, 0x00, // 0x3f
+
+ 0x00, 0x00, 0x00, 0x00, 0x00, // SPACE (0x40 or 0x20)
+ 0x38, 0x16, 0x11, 0x16, 0x38, // A (0x41)
+ 0x3f, 0x25, 0x25, 0x26, 0x18, // B (0x42)
+ 0x1e, 0x21, 0x21, 0x21, 0x12, // C
+ 0x3f, 0x21, 0x21, 0x21, 0x1e, // D
+ 0x3f, 0x25, 0x25, 0x25, 0x21, // E
+ 0x3f, 0x05, 0x05, 0x05, 0x01, // F
+ 0x1e, 0x21, 0x21, 0x29, 0x1a, // G
+ 0x3f, 0x08, 0x08, 0x08, 0x3f, // H
+ 0x00, 0x21, 0x3f, 0x21, 0x00, // I
+ 0x00, 0x11, 0x21, 0x1f, 0x00, // J
+ 0x3f, 0x08, 0x14, 0x14, 0x22, // K
+ 0x3f, 0x20, 0x20, 0x20, 0x20, // L
+ 0x3f, 0x02, 0x0c, 0x02, 0x3f, // M
+ 0x3f, 0x02, 0x04, 0x08, 0x3f, // N
+ 0x1e, 0x21, 0x21, 0x21, 0x1e, // O
+ 0x3f, 0x09, 0x09, 0x09, 0x06, // P
+ 0x1e, 0x21, 0x29, 0x11, 0x2e, // Q
+ 0x3f, 0x09, 0x09, 0x19, 0x26, // R
+ 0x22, 0x25, 0x25, 0x25, 0x18, // S
+ 0x01, 0x01, 0x3f, 0x01, 0x01, // T
+ 0x1f, 0x20, 0x20, 0x20, 0x1f, // U
+ 0x03, 0x0c, 0x30, 0x0c, 0x03, // V
+ 0x3f, 0x10, 0x0c, 0x10, 0x3f, // W
+ 0x31, 0x0a, 0x04, 0x0a, 0x31, // X
+ 0x01, 0x02, 0x3c, 0x02, 0x01, // Y
+ 0x31, 0x29, 0x25, 0x23, 0x21, // Z
+};
+
+volatile int dummy;
+
+void setup()
+{ for (int i=0; i<NledPins; i++)
+ pinMode(ledPins[i], INPUT);
+}
+
+void vscr2scr()
+{ int x,y,xx,yy,xxx,yyy,sum;
+ for(x=0; x<SCRdx; x++)
+ { xxx=x*OSf;
+ for(y=0; y<SCRdy; y++)
+ { yyy=y*OSf;
+ sum=0;
+ for(xx=0; xx<OSf; xx++) for(yy=0; yy<OSf; yy++) sum+=vscr[xxx+xx][yyy+yy];
+ scr[x][y]=sum/OSf/OSf;
+ }
+ }
+}
+
+#define ANIMm (20)
+int lum2=0;
+void loop()
+{ newscr++;
+ if (newscr%(ANIMm)==0)
+ { //int p0=myoutstringpos/OSf;
+
+ //int p0=myoutstringpos/(OSf-1); // Zeichen nur (OSf-1)/OSf breit ausgeben
+ //int p0=myoutstringpos/(OSf-leaner); // Zeichen nur (OSf-1)/OSf breit ausgeben
+ int p0=myoutstringpos*42/100; // Zeichen nur (OSf-1)/OSf breit ausgeben
+
+ int p2=p0/CFONTwidth2;
+ char c=myoutstring[p2];
+ if (c==0) { myoutstringpos=0; p0=0; p2=p0/CFONTwidth2; c=myoutstring[p2]; }
+ int p1=p0%CFONTwidth2;
+ int bits=0;
+ if (c==0x20) c=0x40; // 0x40 is SPACE !
+ if (p1<CFONTwidth && c<CFONTend) bits=cfont[(c-CFONTstart)*CFONTwidth+p1];
+ for (int b=1, p=0; b<0x40 && p<OSf*6; b*=2, p+=OSf) if (bits&b)
+ for(y=0; y<OSf; y++) vscr[OSf*SCRdx-1][p+y]=256;
+ myoutstringpos++;
+
+ for(y=0; y<SCRdy*OSf; y++)
+ { for(x=0; x<SCRdx*OSf-1; x++) vscr[x][y]=vscr[x+1][y];
+ vscr[SCRdx*OSf-1][y]=0; // clear
+ }
+ vscr2scr();
+ }
+
+ lum+=16; if (lum>254) lum=0;
+
+ int xx=-1;
+ int yy=-1;
+ for (int y=0; y<NledPins; y++)
+ { digitalWrite(ledPins[y], HIGH);
+ pinMode(ledPins[y], OUTPUT);
+ for (int x=0; x<NledPins; x++)
+ if (x==y)
+ { xx=(xx+1)%NledPins;
+ yy++;
+ }
+ else
+ { xx=(xx+1)%NledPins;
+ lum2= (lum2+23) & 0xFF;
+ //if (xx==0 && yy==0)
+ //if (xx==yy)
+ //if (scr[yy][xx]>lum2) // (real) screen
+ //if (scr[yy][xx]+48<lum2) // inverted
+ if (scr[yy][xx]-48 > lum2*13/16) // good for font scroll
+ { //digitalWrite(ledPins[x], LOW); // digitalWrite(ledPins[y], LOW); (ganz unten)
+ pinMode(ledPins[x], OUTPUT);
+ //for (int ll=0; ll!=10; ll++) for (int l=0; l!=0x7fff; l++) dummy=l;
+ for (int l=0; l!=0x80; l++) dummy=l;
+ pinMode(ledPins[x], INPUT);
+ }
+ }
+ pinMode(ledPins[y], INPUT);
+ digitalWrite(ledPins[y], LOW);
+ }
+}