250a034165724a5598f025cec5f1f9220102e665
[Arduino] / HUB12_simple / HUB12_simple.ino
1
2 /**************************************************************
3 *
4 *  Sample sketch for driving 32x16 LED PANEL (1/4 scan) with
5 *  HUB12 protocol
6 *
7 *************************************************************/
8  
9 #include <SPI.h>
10  
11 //Pins specific for Mega .See Arduino SPI for a different board.
12 #define A 22 
13 #define B 24 
14 #define OE 26
15 #define R1 51
16 #define CLK 52
17 #define STB 53
18  
19  
20 //row to be shown (1-4 since it is 1/4 scan)
21 byte row=0; 
22  
23 //brightness: increase->more bright
24 int br=500;
25  
26 //some digits from a 8x8 font (numeric 1-8)
27 byte digits[]={
28  
29 0x04,  //1
30 0x0C,
31 0x04,
32 0x04,
33 0x04,
34 0x04,
35 0x0E,
36 0x00,
37  
38 0x0E, //2
39 0x11,
40 0x01,
41 0x02,
42 0x04,
43 0x08,
44 0x1F,
45 0x00,
46  
47  
48 0x1F, //3
49 0x02,
50 0x04,
51 0x02,
52 0x01,
53 0x11,
54 0x0E,
55 0x00,
56  
57 0x02, //4
58 0x06,
59 0x0A,
60 0x12,
61 0x1F,
62 0x02,
63 0x02,
64 0x00,
65  
66 0x1F, //5
67 0x10,
68 0x1E,
69 0x01,
70 0x01,
71 0x11,
72 0x0E,
73 0x00,
74  
75  
76 0x06, //6
77 0x08,
78 0x10,
79 0x1E,
80 0x11,
81 0x11,
82 0x0E,
83 0x00,
84  
85 0x1F,//7
86 0x01,
87 0x02,
88 0x04,
89 0x04,
90 0x04,
91 0x04,
92 0x00,
93  
94  
95 0x0E,//8
96 0x11,
97 0x11,
98 0x0E,
99 0x11,
100 0x11,
101 0x0E,
102 0x00,
103  
104  
105  
106  
107  
108 };
109  
110  
111  
112 void setup () {
113      pinMode(A, OUTPUT);
114      pinMode(B, OUTPUT);
115      pinMode(OE, OUTPUT);
116      pinMode(R1, OUTPUT);
117      pinMode(CLK, OUTPUT);
118      pinMode(STB, OUTPUT);
119      SPI.begin();
120      delay(300); 
121 }    
122  
123  
124 //display alternatively scan lines
125 void loop(){
126        showRow(0);
127        showRow(1);
128        showRow(2);
129        showRow(3);
130 }
131  
132  
133 //Load and show row (1-4) i.e. 1 and 5, 2 and 6.....
134 void showRow(int row){
135  
136       SPI.transfer(~(digits[row+36]));   //5
137       SPI.transfer(~(digits[row+32]));              
138  
139       SPI.transfer(~(digits[row+4]));    //1
140       SPI.transfer(~(digits[row]));            
141  
142       SPI.transfer(~(digits[row+44]));   //6 
143       SPI.transfer(~(digits[row+40]));              
144  
145       SPI.transfer(~(digits[row+12]));   //2
146       SPI.transfer(~(digits[row+8]));              
147  
148       SPI.transfer(~(digits[row+52]));   //7
149       SPI.transfer(~(digits[row+48]));              
150  
151       SPI.transfer(~(digits[row+20]));   //3
152       SPI.transfer(~(digits[row+16]));              
153  
154       SPI.transfer(~(digits[row+60]));   //8
155       SPI.transfer(~(digits[row+56]));              
156  
157       SPI.transfer(~(digits[row+28]));   //4
158       SPI.transfer(~(digits[row+24]));              
159  
160       digitalWrite(STB,LOW);
161       digitalWrite(STB,HIGH);
162  
163       scanrow(row);//enable encoder for the line loaded
164  
165       //PWM like. Change br to adjust brightnes
166       digitalWrite(OE,HIGH);
167       delayMicroseconds(br);
168       digitalWrite(OE,LOW);
169       delayMicroseconds(900);
170  
171  
172 }
173  
174 //enable encoder for this row in order to show it
175 void scanrow(int r){
176     if(r==0){
177       digitalWrite(A,0);
178       digitalWrite(B,0);
179     }  
180     else if(r==1){
181       digitalWrite(A,1);
182       digitalWrite(B,0);
183     }
184     else if(r==2){
185       digitalWrite(A,0);
186       digitalWrite(B,1);
187     }
188     else if(r==3){
189       digitalWrite(A,1);
190       digitalWrite(B,1);
191     }
192 }
193  
194