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