添加显示字体。
This commit is contained in:
195
8By8/8By8.ino
195
8By8/8By8.ino
@@ -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.");
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user