forked from hzeller/rpi-rgb-led-matrix
-
Notifications
You must be signed in to change notification settings - Fork 2
/
test.c
218 lines (209 loc) · 7.5 KB
/
test.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
#include <stdio.h>
// #include <stdlib.h>
#include <unistd.h>
#include "mraa/gpio.h"
// Pin numbers for hub75E panel
#define PIN_A 15
#define PIN_B 16
#define PIN_C 18
#define PIN_D 22
#define PIN_E 10
#define PIN_OE 12
#define PIN_LAT 7
#define PIN_CLK 11
#define PIN_R1 23
#define PIN_G1 13
#define PIN_B1 26
#define PIN_R2 24
#define PIN_G2 21
#define PIN_B2 19
// Set all pins to output mode
void setup_pins() {
mraa_init();
mraa_gpio_context gpio_a = mraa_gpio_init(PIN_A);
mraa_gpio_context gpio_b = mraa_gpio_init(PIN_B);
mraa_gpio_context gpio_c = mraa_gpio_init(PIN_C);
mraa_gpio_context gpio_d = mraa_gpio_init(PIN_D);
mraa_gpio_context gpio_e = mraa_gpio_init(PIN_E);
mraa_gpio_context gpio_oe = mraa_gpio_init(PIN_OE);
mraa_gpio_context gpio_lat = mraa_gpio_init(PIN_LAT);
mraa_gpio_context gpio_clk = mraa_gpio_init(PIN_CLK);
mraa_gpio_context gpio_r1 = mraa_gpio_init(PIN_R1);
mraa_gpio_context gpio_g1 = mraa_gpio_init(PIN_G1);
mraa_gpio_context gpio_b1 = mraa_gpio_init(PIN_B1);
mraa_gpio_context gpio_r2 = mraa_gpio_init(PIN_R2);
mraa_gpio_context gpio_g2 = mraa_gpio_init(PIN_G2);
mraa_gpio_context gpio_b2 = mraa_gpio_init(PIN_B2);
mraa_gpio_dir(gpio_a, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_b, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_c, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_d, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_e, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_oe, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_lat, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_clk, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_r1, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_g1, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_b1, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_r2, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_g2, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_b2, MRAA_GPIO_OUT);
printf("output mode set on pins done",'\n');
}
void send_data() {
// Set all pins to output mode
// setup_pins();
mraa_init();
mraa_gpio_context gpio_a = mraa_gpio_init(PIN_A);
mraa_gpio_context gpio_b = mraa_gpio_init(PIN_B);
mraa_gpio_context gpio_c = mraa_gpio_init(PIN_C);
mraa_gpio_context gpio_d = mraa_gpio_init(PIN_D);
mraa_gpio_context gpio_e = mraa_gpio_init(PIN_E);
mraa_gpio_context gpio_oe = mraa_gpio_init(PIN_OE);
mraa_gpio_context gpio_lat = mraa_gpio_init(PIN_LAT);
mraa_gpio_context gpio_clk = mraa_gpio_init(PIN_CLK);
mraa_gpio_context gpio_r1 = mraa_gpio_init(PIN_R1);
mraa_gpio_context gpio_g1 = mraa_gpio_init(PIN_G1);
mraa_gpio_context gpio_b1 = mraa_gpio_init(PIN_B1);
mraa_gpio_context gpio_r2 = mraa_gpio_init(PIN_R2);
mraa_gpio_context gpio_g2 = mraa_gpio_init(PIN_G2);
mraa_gpio_context gpio_b2 = mraa_gpio_init(PIN_B2);
mraa_gpio_dir(gpio_a, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_b, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_c, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_d, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_e, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_oe, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_lat, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_clk, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_r1, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_g1, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_b1, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_r2, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_g2, MRAA_GPIO_OUT);
mraa_gpio_dir(gpio_b2, MRAA_GPIO_OUT);
printf("output mode set on pins done",'\n');
// Set data lines to red (HIGH)
// mraa_gpio_context gpio_r1 = mraa_gpio_init(PIN_R1);
mraa_gpio_write(gpio_r1, 1);
// mraa_gpio_context gpio_g1 = mraa_gpio_init(PIN_G1);
mraa_gpio_write(gpio_g1, 0);
// mraa_gpio_context gpio_b1 = mraa_gpio_init(PIN_B1);
mraa_gpio_write(gpio_b1, 0);
// mraa_gpio_context gpio_r2 = mraa_gpio_init(PIN_R2);
mraa_gpio_write(gpio_r2, 1);
// mraa_gpio_context gpio_g2 = mraa_gpio_init(PIN_G2);
mraa_gpio_write(gpio_g2, 0);
// mraa_gpio_context gpio_b2 = mraa_gpio_init(PIN_B2);
mraa_gpio_write(gpio_b2, 0);
printf("rbg pins done",'\n');
// Set control lines to appropriate state
// mraa_gpio_context gpio_a = mraa_gpio_init(PIN_A);
// mraa_gpio_context gpio_b = mraa_gpio_init(PIN_B);
// mraa_gpio_context gpio_c = mraa_gpio_init(PIN_C);
// mraa_gpio_context gpio_d = mraa_gpio_init(PIN_D);
// mraa_gpio_context gpio_e = mraa_gpio_init(PIN_E);
// mraa_gpio_context gpio_oe = mraa_gpio_init(PIN_OE);
mraa_gpio_write(gpio_oe, 0);
// mraa_gpio_context gpio_lat = mraa_gpio_init(PIN_LAT);
mraa_gpio_write(gpio_lat, 0);
// mraa_gpio_context gpio_clk = mraa_gpio_init(PIN_CLK);
mraa_gpio_write(gpio_clk, 0);
mraa_gpio_write(gpio_a, 1);
mraa_gpio_write(gpio_b, 0);
mraa_gpio_write(gpio_c, 0);
mraa_gpio_write(gpio_d, 0);
mraa_gpio_write(gpio_e, 0);
printf("row col pins done",'\n');
// Shift in data and latch to display
for (int i = 0; i < 4096; i++) {
if(0< i < 64*2|| 64*10 < i < 64*12){
mraa_gpio_write(gpio_a, 1);
mraa_gpio_write(gpio_b, 0);
mraa_gpio_write(gpio_c, 0);
mraa_gpio_write(gpio_d, 0);
mraa_gpio_write(gpio_e, 0);
if(i == 63*2+1){
printf("row a");
}
}
if(64*2< i < 64*4 || 64*12 < i < 64*14){
mraa_gpio_write(gpio_b,1);
mraa_gpio_write(gpio_a, 0);
mraa_gpio_write(gpio_c, 0);
mraa_gpio_write(gpio_d, 0);
mraa_gpio_write(gpio_e, 0);
if(i == 64*2-1){
printf("row b");
}
}
if(64*4< i < 64*6){
mraa_gpio_write(gpio_c,1);
mraa_gpio_write(gpio_a, 0);
mraa_gpio_write(gpio_b, 0);
mraa_gpio_write(gpio_d, 0);
mraa_gpio_write(gpio_e, 0);
if(i == 64*3-1){
printf("row c");
}
}
if(64*6< i < 64*8){
mraa_gpio_write(gpio_d,1);
mraa_gpio_write(gpio_a, 0);
mraa_gpio_write(gpio_b, 0);
mraa_gpio_write(gpio_c, 0);
mraa_gpio_write(gpio_e, 0);
if(i == 63*4-1){
printf("row d");
}
}
if(64*8< i < 64*10){
mraa_gpio_write(gpio_e,1);
mraa_gpio_write(gpio_a, 0);
mraa_gpio_write(gpio_b, 0);
mraa_gpio_write(gpio_d, 0);
mraa_gpio_write(gpio_c, 0);
if(i == 63*5-1){
printf("row d");
}
}
// mraa_gpio_write(gpio_a, 0);
// mraa_gpio_write(gpio_b, 0);
// mraa_gpio_write(gpio_c, 0);
// mraa_gpio_write(gpio_d, 0);
// mraa_gpio_write(gpio_e, 1);
// Set data lines to red (HIGH)
mraa_gpio_write(gpio_r1, 1);
mraa_gpio_write(gpio_g1, 1);
mraa_gpio_write(gpio_b1, 0);
mraa_gpio_write(gpio_r2, 1);
mraa_gpio_write(gpio_g2, 0);
mraa_gpio_write(gpio_b2, 0);
// Pulse clock
mraa_gpio_write(gpio_clk, 0);
usleep(10);
mraa_gpio_write(gpio_clk, 1);
}
// Latch data to display
mraa_gpio_write(gpio_lat, 1);
usleep(10);
mraa_gpio_write(gpio_lat, 0);
printf("latching done",'\n');
// Set OE to disable output
mraa_gpio_write(gpio_oe, 1);
int ar= mraa_gpio_read(gpio_a);
printf("keeping stable");
// sleep(100);
// printf(ar);
// mraa_gpio_read(gpio_a);
// mraa_gpio_read(gpio_b);
// mraa_gpio_read(gpio_c);
// mraa_gpio_read(gpio_c);
// mraa_gpio_read(gpio_d);
// mraa_gpio_read(gpio_e);
}
int main(){
printf("calling main",'\n');
send_data();
return 0;
}