添加显示字体。
This commit is contained in:
195
8By8/8By8.ino
195
8By8/8By8.ino
@@ -23,6 +23,43 @@
|
|||||||
#define DEBUG true
|
#define DEBUG true
|
||||||
#define TRACE false
|
#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 {
|
struct Triple {
|
||||||
float x;
|
float x;
|
||||||
float y;
|
float y;
|
||||||
@@ -312,6 +349,136 @@ public:
|
|||||||
break;
|
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 {
|
enum Operators {
|
||||||
@@ -767,10 +934,25 @@ void setup() {
|
|||||||
attachInterrupt(digitalPinToInterrupt(JOYSTICK_SWITCH), on_joystick_button,
|
attachInterrupt(digitalPinToInterrupt(JOYSTICK_SWITCH), on_joystick_button,
|
||||||
FALLING);
|
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;
|
// Wait for z_ref to have value;
|
||||||
while (SensorReader::angle.z == 0.0 || SensorReader::angle.y == 0.0 ||
|
while (SensorReader::angle.z == 0.0 || SensorReader::angle.y == 0.0 ||
|
||||||
SensorReader::angle.x == 0.0) {
|
SensorReader::angle.x == 0.0) {
|
||||||
Serial.println("");
|
Serial.print("");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -787,17 +969,6 @@ void setup() {
|
|||||||
Serial.println(z_ref);
|
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.");
|
Serial.println("Setup complete.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,50 +1,14 @@
|
|||||||
byte status = 0;
|
|
||||||
byte layer = 0;
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Serial.begin(115200);
|
pinMode(A7, INPUT_PULLUP);
|
||||||
|
pinMode(2, INPUT_PULLUP);
|
||||||
for (int i = 0; i < 8; i++) {
|
for (int i = 0; i < 8; i++) {
|
||||||
pinMode(22 + i, OUTPUT);
|
pinMode(22 + i, OUTPUT);
|
||||||
|
digitalWrite(22 + i, HIGH);
|
||||||
}
|
}
|
||||||
// pinMode(30, OUTPUT);
|
Serial.begin(115200);
|
||||||
// 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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int column = 0;
|
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
if (Serial.available()) {
|
Serial.println(digitalRead(2));
|
||||||
int num = Serial.read();
|
delay(100);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user