#include "segment.pio.h"
uint8_t d[10] = {192, 249, 164, 176, 153, 146, 130, 248, 128, 152};
int r[4] = {14, 15, 16, 17};
int c[4] = {18, 19, 20, 21};
char k[4][4] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
void show(int n) {
pio_sm_put(pio0, 0, d[n] << 24 | d[n] << 16 | d[n] << 8 | d[n]);
}
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(r[i], OUTPUT);
digitalWrite(r[i], HIGH);
pinMode(c[i], INPUT_PULLUP);
}
auto o = pio_add_program(pio0, &segment_program);
segment_program_init(pio0, 0, o, 2, 10);
}
void loop() {
for (int i = 0; i < 4; i++) {
digitalWrite(r[i], LOW);
for (int j = 0; j < 4; j++) {
if (digitalRead(c[j]) == LOW) {
char x = k[i][j];
if (x >= '0' && x <= '9')
show(x - '0');
delay(200);
}
}
digitalWrite(r[i], HIGH);
}
}