添加显示字体。

This commit is contained in:
unlockable
2023-09-09 18:02:57 +08:00
parent 37e7d89ed7
commit 000cc7b28e
2 changed files with 189 additions and 54 deletions

View File

@@ -23,6 +23,43 @@
#define DEBUG true
#define TRACE false
// 3 width, 4 height
const uint16_t numbers[10] = {
0xF6F, 0x592, 0xE57, 0xE8F, 0x979, 0xF8F, 0xF3F, 0xE54, 0xFEF, 0xFCF,
};
// 8 width, 7 height
const uint64_t letters[26]{
0x3C66667E666666, // A
0x7C66667C66667C, // B
0x3C66606060663C, // C
0x7C66666666667C, // D
0x7E60607C60607E, // E
0x7E60607C606060, // F
0x3C6660606E663C, // G
0x6666667E666666, // H
0x3C18181818183C, // I
0x1E0C0C0C6C6C38, // J
0x666C7870786C66, // K
0x6060606060607E, // L
0x63777F6B636363, // M
0x63737B6F676363, // N
0x3C66666666663C, // O
0x7C6666667C6060, // P
0x3C6666666E3C06, // Q
0x7C66667C786C66, // R
0x3C66603C06663C, // S
0x7E5A1818181818, // T
0x6666666666663C, // U
0x66666666663C18, // V
0x6363636B7F7763, // W
0x6363361C366363, // X
0x6666663C181818, // Y
0x7E060C1830607E, // Z
};
struct Triple {
float x;
float y;
@@ -312,6 +349,136 @@ public:
break;
}
}
static void draw_num(int x, int y, int z, int num, int direction,
int brightness) {
// 0 = look along x
// 1 = look reverse x
// 2 = look along y
// 3 = look reverse y
if (num > 9 || num < 0) {
return;
}
switch (direction) {
case 0: {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
if ((numbers[num] >> (11 - (i + j * 3))) & 1) {
Cube::set_status(x, y - i, z - j, brightness);
}
else {
Cube::set_status(x, y - i, z - j, 0);
}
}
}
break;
}
case 1: {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
if ((numbers[num] >> (11 - (i + j * 3))) & 1) {
Cube::set_status(x, y + i, z - j, brightness);
}
else {
Cube::set_status(x, y + i, z - j, 0);
}
}
}
break;
}
case 2: {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
if ((numbers[num] >> (11 - (i + j * 3))) & 1) {
Cube::set_status(x + i, y, z - j, brightness);
}
else {
Cube::set_status(x + i, y, z - j, 0);
}
}
}
break;
}
case 3: {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
if ((numbers[num] >> (11 - (i + j * 3))) & 1) {
Cube::set_status(x - i, y, z - j, brightness);
}
else {
Cube::set_status(x - i, y, z - j, 0);
}
}
}
break;
}
}
}
static void draw_letter(int x, int y, int z, int num, int direction,
int brightness) {
// 0 = look along x
// 1 = look reverse x
// 2 = look along y
// 3 = look reverse y
if (num > 25 || num < 0) {
return;
}
switch (direction) {
case 0: {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 7; j++) {
if ((numbers[num] >> (55 - (i + j * 8))) & 1) {
Cube::set_status(x, y - i, z - j, brightness);
}
else {
Cube::set_status(x, y - i, z - j, 0);
}
}
}
break;
}
case 1: {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 7; j++) {
if ((numbers[num] >> (55 - (i + j * 8))) & 1) {
Cube::set_status(x, y + i, z - j, brightness);
}
else {
Cube::set_status(x, y + i, z - j, 0);
}
}
}
break;
}
case 2: {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 7; j++) {
if ((numbers[num] >> (55 - (i + j * 8))) & 1) {
Cube::set_status(x + i, y, z - j, brightness);
}
else {
Cube::set_status(x + i, y, z - j, 0);
}
}
}
break;
}
case 3: {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 7; j++) {
if ((numbers[num] >> (55 - (i + j * 8))) & 1) {
Cube::set_status(x - i, y, z - j, brightness);
}
else {
Cube::set_status(x - i, y, z - j, 0);
}
}
}
break;
}
}
}
};
enum Operators {
@@ -767,10 +934,25 @@ void setup() {
attachInterrupt(digitalPinToInterrupt(JOYSTICK_SWITCH), on_joystick_button,
FALLING);
if (DEBUG) {
Serial.println("ALL ON");
}
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
for (int k = 0; k < 8; k++) {
Cube::set_status(i, j, k, 3);
}
}
}
delay(5000);
Cube::clear();
// Wait for z_ref to have value;
while (SensorReader::angle.z == 0.0 || SensorReader::angle.y == 0.0 ||
SensorReader::angle.x == 0.0) {
Serial.println("");
Serial.print("");
continue;
}
@@ -787,17 +969,6 @@ void setup() {
Serial.println(z_ref);
}
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
for (int k = 0; k < 8; k++) {
Cube::set_status(i, j, k, 3);
}
}
}
delay(5000);
Cube::clear();
Serial.println("Setup complete.");
}

View File

@@ -1,50 +1,14 @@
byte status = 0;
byte layer = 0;
void setup() {
Serial.begin(115200);
pinMode(A7, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
for (int i = 0; i < 8; i++) {
pinMode(22 + i, OUTPUT);
digitalWrite(22 + i, HIGH);
}
// pinMode(30, OUTPUT);
// pinMode(31, OUTPUT);
for (int i = 0; i < 8; i++) {
pinMode(30 + i, OUTPUT);
}
for (int i = 0; i < 8; i++) {
pinMode(38 + i, OUTPUT);
}
Serial.begin(115200);
}
int column = 0;
void loop() {
if (Serial.available()) {
int num = Serial.read();
if (num >= '0' && num <= '7') {
num = num - '0';
status ^= 1 << num;
for (int i = 0; i < 8; i++) {
digitalWrite(22 + i, status >> i & 1);
}
Serial.println(status, BIN);
} else if (num >= 'a' && num <= 'h') {
num = num - 'a';
column = num;
Serial.print("LOAD");
Serial.print(num);
Serial.println(status, BIN);
digitalWrite(30 + column, HIGH);
digitalWrite(30 + column, LOW);
}
else if (num == 'z') {
digitalWrite(38 + layer, LOW);
layer = (layer + 1) % 8;
digitalWrite(38 + layer, HIGH);
}
}
Serial.println(digitalRead(2));
delay(100);
}