-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathledMatrix.c
83 lines (61 loc) · 1.58 KB
/
ledMatrix.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
#include <stdio.h>
#include <wiringPi.h>
#include "ledMatrix.h"
const int ledPins[N_OF_ROWS + N_OF_COLS] = {1, 2, 3, 0, 4};
const int turnOnTime = 1;
void turn_one_on_off(int row, int column) {
for (int i = 0; i < N_OF_ROWS; i++) {
digitalWrite(ledPins[i], i == row ? LOW : HIGH);
}
for (int i = 0; i < N_OF_COLS; i++) {
digitalWrite(ledPins[i + N_OF_ROWS], i == column ? HIGH : LOW);
}
delay(turnOnTime);
digitalWrite(ledPins[row], HIGH);
digitalWrite(ledPins[column + N_OF_ROWS], LOW);
}
void turn_on(bool matrix[N_OF_ROWS][N_OF_COLS], int time) {
while (time > 0) {
int nTurnedOn = 0;
for (int i = 0; i < N_OF_ROWS; i++) {
for (int j = 0; j < N_OF_COLS; j++) {
if (matrix[i][j]) {
turn_one_on_off(i, j);
nTurnedOn++;
}
}
}
time -= nTurnedOn * turnOnTime;
if (nTurnedOn == 0) {
delay(time);
time = 0;
}
}
}
void init_led() {
for (int i = 0; i < N_OF_ROWS + N_OF_COLS; i++) {
pinMode(ledPins[i], OUTPUT);
}
}
void setAll(bool matrix[N_OF_ROWS][N_OF_COLS], bool value) {
for (int i = 0; i < N_OF_ROWS; i++) {
for (int j = 0; j < N_OF_COLS; j++) {
matrix[i][j] = value;
}
}
}
/*
int main(void) {
init();
bool matrix[N_OF_ROWS][N_OF_COLS];
setAll(matrix, false);
for(;;) {
printf("Turn on\n");
setAll(matrix, true);
turn_on(matrix, 1000);
printf("Turn off\n");
setAll(matrix, false);
turn_on(matrix, 1000);
}
}
*/