started on menu display
This commit is contained in:
parent
a4d71b9e1a
commit
4f36c0c932
2
Makefile
2
Makefile
|
@ -2,7 +2,7 @@ slangin.hex: build
|
||||||
cp ./build/arduino.avr.leonardo/slangin.ino.hex ./slangin.hex
|
cp ./build/arduino.avr.leonardo/slangin.ino.hex ./slangin.hex
|
||||||
|
|
||||||
build:
|
build:
|
||||||
arduino-cli compile -b arduino:avr:leonardo -e ./slangin.ino
|
arduino-cli compile -b arduino:avr:leonardo -e .
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf ./build ./slangin.hex
|
rm -rf ./build ./slangin.hex
|
||||||
|
|
|
@ -20,3 +20,9 @@ arduino-cli upload -b arduino:avr:leonardo -p /dev/ttyACM1 slangin.hex
|
||||||
```
|
```
|
||||||
|
|
||||||
Your port path (`-p` argument) may differ depending on your system.
|
Your port path (`-p` argument) may differ depending on your system.
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
Font libraries used:
|
||||||
|
- [Font3x5](https://github.com/filmote/Font3x5)
|
||||||
|
- [Font4x6](https://github.com/filmote/Font4x6)
|
||||||
|
|
105
slangin.ino
105
slangin.ino
|
@ -5,8 +5,10 @@ License: WTFPL
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <Arduboy2.h>
|
#include <Arduboy2.h>
|
||||||
|
#include "src/Font4x6.h";
|
||||||
|
|
||||||
Arduboy2 arduboy;
|
Arduboy2 arduboy;
|
||||||
|
Font4x6 font4x6 = Font4x6();
|
||||||
|
|
||||||
enum GameState {
|
enum GameState {
|
||||||
STATE_TITLE = 0,
|
STATE_TITLE = 0,
|
||||||
|
@ -43,24 +45,22 @@ enum Drug {
|
||||||
DRUG_LUDES
|
DRUG_LUDES
|
||||||
};
|
};
|
||||||
|
|
||||||
enum StatusType {
|
|
||||||
STATUS_NONE = 0,
|
|
||||||
STATUS_TURN,
|
|
||||||
STATUS_FIGHT
|
|
||||||
};
|
|
||||||
|
|
||||||
enum DialogType {
|
enum DialogType {
|
||||||
DIALOG_INFO = 0,
|
DIALOG_INFO = 0,
|
||||||
DIALOG_YESNO,
|
DIALOG_YESNO,
|
||||||
DIALOG_AMOUNT
|
DIALOG_AMOUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**************/
|
||||||
|
/* game state */
|
||||||
|
/**************/
|
||||||
bool screenInitialized;
|
bool screenInitialized;
|
||||||
StatusType showStatus;
|
GameState sGameState;
|
||||||
GameState gameState;
|
|
||||||
int sCurrentDay;
|
int sCurrentDay;
|
||||||
char sTitle[21] = {0};
|
|
||||||
char sMenuItems[8][9] = {0};
|
/****************/
|
||||||
|
/* player state */
|
||||||
|
/****************/
|
||||||
int pMoney;
|
int pMoney;
|
||||||
int pLoanAmount;
|
int pLoanAmount;
|
||||||
int pSavingsAmount;
|
int pSavingsAmount;
|
||||||
|
@ -70,8 +70,11 @@ int pCapacity;
|
||||||
int pHealth;
|
int pHealth;
|
||||||
int pInventory[6] = {0};
|
int pInventory[6] = {0};
|
||||||
|
|
||||||
|
/***********************/
|
||||||
|
/* game setup and loop */
|
||||||
|
/***********************/
|
||||||
void setup() {
|
void setup() {
|
||||||
gameState = STATE_TITLE;
|
sGameState = STATE_TITLE;
|
||||||
screenInitialized = false;
|
screenInitialized = false;
|
||||||
arduboy.begin();
|
arduboy.begin();
|
||||||
arduboy.setFrameRate(15);
|
arduboy.setFrameRate(15);
|
||||||
|
@ -82,23 +85,77 @@ void loop() {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!screenInitialized) {
|
if (!screenInitialized) {
|
||||||
switch (gameState) {
|
arduboy.clear();
|
||||||
|
switch (sGameState) {
|
||||||
case STATE_TITLE:
|
case STATE_TITLE:
|
||||||
showStatus = STATUS_NONE;
|
drawTitle(" Slangin' v0.9");
|
||||||
strcpy(sTitle, " Slangin' v0.9");
|
//char menu[3][19] = {{"New Game"}};
|
||||||
break;
|
//draw1ColMenu(1, menu);
|
||||||
default:
|
char menu[5][19] = {{"Coney Island"},{"Central Park"},{"Manhatten"},{"Ghetto"},{"Brooklyn"}};
|
||||||
showStatus = STATUS_NONE;
|
draw2ColMenu(true, 5, menu);
|
||||||
strcpy(sTitle, "[UNIMPLEMENTED]");
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
drawScreen();
|
arduboy.display();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawScreen() {
|
/***********************/
|
||||||
arduboy.clear();
|
/* screen draw heplers */
|
||||||
arduboy.setCursor(6, 12);
|
/***********************/
|
||||||
arduboy.print(sTitle);
|
void drawTitle(const char title[]) {
|
||||||
arduboy.display();
|
arduboy.setCursor(6, 8);
|
||||||
|
arduboy.print(title);
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw1ColMenu(const bool small,
|
||||||
|
const int itemCount,
|
||||||
|
const char items[][19]) {
|
||||||
|
int colWidth = 0;
|
||||||
|
for (int i = 0; i < itemCount; i++) {
|
||||||
|
if (strlen(items[i]) > colWidth) colWidth = strlen(items[i]);
|
||||||
|
}
|
||||||
|
const int charWidth = small ? 5 : 6;
|
||||||
|
const int charHeight = small ? 7 : 10;
|
||||||
|
int x = 64 - round(colWidth * (charWidth / 2.0));
|
||||||
|
int y = 18 - round(itemCount * (charHeight / 2.0));
|
||||||
|
for (int i = 0; i < itemCount; i++) {
|
||||||
|
arduboy.setCursor(x, i * charHeight + 22 + y);
|
||||||
|
arduboy.print(items[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw2ColMenu(const bool small,
|
||||||
|
const int itemCount,
|
||||||
|
const char items[][19]) {
|
||||||
|
const int col1Count = round(itemCount / 2.0);
|
||||||
|
const int col2Count = itemCount - col1Count;
|
||||||
|
int col1Width = 0;
|
||||||
|
int col2Width = 0;
|
||||||
|
for (int i = 0; i < col1Count; i++) {
|
||||||
|
const int newLen = strlen(items[i]);
|
||||||
|
if (newLen > col1Width) col1Width = newLen;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < col2Count; i++) {
|
||||||
|
const int newLen = strlen(items[col1Count + i]);
|
||||||
|
if (newLen > col2Width) col2Width = newLen;
|
||||||
|
}
|
||||||
|
const int charWidth = small ? 5 : 6;
|
||||||
|
const int charHeight = small ? 7 : 10;
|
||||||
|
int x = 64 - round((col1Width + col2Width + 2) * (charWidth / 2.0));
|
||||||
|
int y = 18 - round(col1Count * (charHeight / 2.0));
|
||||||
|
for (int i = 0; i < itemCount; i++) {
|
||||||
|
const int cx = (i < col1Count)
|
||||||
|
? x
|
||||||
|
: x + (col1Width + 2) * charWidth;
|
||||||
|
const int cy = (i < col1Count)
|
||||||
|
? i * charHeight + 22 + y
|
||||||
|
: (i - col1Count) * charHeight + 22 + y;
|
||||||
|
if (small) {
|
||||||
|
font4x6.setCursor(cx, cy);
|
||||||
|
font4x6.print(items[i]);
|
||||||
|
} else {
|
||||||
|
arduboy.setCursor(cx, cy);
|
||||||
|
arduboy.print(items[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,440 @@
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <Sprites.h>
|
||||||
|
#include <Print.h>
|
||||||
|
#include "Font3x5.h"
|
||||||
|
|
||||||
|
#define USE_LOWER_CASE
|
||||||
|
|
||||||
|
#define FONT3X5_WIDTH 3
|
||||||
|
#define FONT3X5_HEIGHT 6
|
||||||
|
|
||||||
|
#define CHAR_EXCLAMATION 33
|
||||||
|
#define CHAR_PERIOD 46
|
||||||
|
#define CHAR_LETTER_A 65
|
||||||
|
#define CHAR_LETTER_Z 90
|
||||||
|
#define CHAR_LETTER_A_LOWER 97
|
||||||
|
#define CHAR_LETTER_Z_LOWER 122
|
||||||
|
#define CHAR_NUMBER_0 48
|
||||||
|
#define CHAR_NUMBER_9 57
|
||||||
|
|
||||||
|
#ifdef USE_LOWER_CASE
|
||||||
|
#define FONT_EXCLAMATION_INDEX 62
|
||||||
|
#define FONT_PERIOD_INDEX 63
|
||||||
|
#define FONT_NUMBER_INDEX 52
|
||||||
|
#else
|
||||||
|
#define FONT_EXCLAMATION_INDEX 36
|
||||||
|
#define FONT_PERIOD_INDEX 37
|
||||||
|
#define FONT_NUMBER_INDEX 26
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const uint8_t PROGMEM font_images[] = {
|
||||||
|
3, 8,
|
||||||
|
|
||||||
|
// #65 Letter 'A'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x05, // ░░░░░▓░▓
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #66 Letter 'B'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x15, // ░░░▓░▓░▓
|
||||||
|
0x1B, // ░░░▓▓░▓▓
|
||||||
|
|
||||||
|
// #67 Letter 'C'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x11, // ░░░▓░░░▓
|
||||||
|
0x11, // ░░░▓░░░▓
|
||||||
|
|
||||||
|
// #68 Letter 'D'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x11, // ░░░▓░░░▓
|
||||||
|
0x0E, // ░░░░▓▓▓░
|
||||||
|
|
||||||
|
// #69 Letter 'E'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x15, // ░░░▓░▓░▓
|
||||||
|
0x11, // ░░░▓░░░▓
|
||||||
|
|
||||||
|
// #70 Letter 'F'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x05, // ░░░░░▓░▓
|
||||||
|
0x01, // ░░░░░░░▓
|
||||||
|
|
||||||
|
// #71 Letter 'G'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x11, // ░░░▓░░░▓
|
||||||
|
0x1D, // ░░░▓▓▓░▓
|
||||||
|
|
||||||
|
// #72 Letter 'H'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #73 Letter 'I'.
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
|
||||||
|
// #74 Letter 'J'.
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #75 Letter 'K'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x1B, // ░░░▓▓░▓▓
|
||||||
|
|
||||||
|
// #76 Letter 'L'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
|
||||||
|
// #77 Letter 'M'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x06, // ░░░░░▓▓░
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #78 Letter 'N'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x01, // ░░░░░░░▓
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #79 Letter 'O'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x11, // ░░░▓░░░▓
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #80 Letter 'P'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x05, // ░░░░░▓░▓
|
||||||
|
0x07, // ░░░░░▓▓▓
|
||||||
|
|
||||||
|
// #81 Letter 'Q'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x31, // ░░▓▓░░░▓
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #82 Letter 'R'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x05, // ░░░░░▓░▓
|
||||||
|
0x1B, // ░░░▓▓░▓▓
|
||||||
|
|
||||||
|
// #83 Letter 'S'.
|
||||||
|
0x17, // ░░░▓░▓▓▓
|
||||||
|
0x15, // ░░░▓░▓░▓
|
||||||
|
0x1D, // ░░░▓▓▓░▓
|
||||||
|
|
||||||
|
// #84 Letter 'T'.
|
||||||
|
0x01, // ░░░░░░░▓
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x01, // ░░░░░░░▓
|
||||||
|
|
||||||
|
// #85 Letter 'U'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #86 Letter 'V'.
|
||||||
|
0x0F, // ░░░░▓▓▓▓
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
0x0F, // ░░░░▓▓▓▓
|
||||||
|
|
||||||
|
// #87 Letter 'W'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x0C, // ░░░░▓▓░░
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #88 Letter 'X'.
|
||||||
|
0x1B, // ░░░▓▓░▓▓
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x1B, // ░░░▓▓░▓▓
|
||||||
|
|
||||||
|
// #89 Letter 'Y'.
|
||||||
|
0x07, // ░░░░░▓▓▓
|
||||||
|
0x1C, // ░░░▓▓▓░░
|
||||||
|
0x07, // ░░░░░▓▓▓
|
||||||
|
|
||||||
|
// #90 Letter 'Z'.
|
||||||
|
0x19, // ░░░▓▓░░▓
|
||||||
|
0x15, // ░░░▓░▓░▓
|
||||||
|
0x13, // ░░░▓░░▓▓
|
||||||
|
|
||||||
|
#ifdef USE_LOWER_CASE
|
||||||
|
|
||||||
|
// #97 Letter 'a'.
|
||||||
|
0x0C, // ░░░░▓▓░░
|
||||||
|
0x12, // ░░░▓░░▓░
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
|
||||||
|
// #98 Letter 'b'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x12, // ░░░▓░░▓░
|
||||||
|
0x0C, // ░░░░▓▓░░
|
||||||
|
|
||||||
|
// #99 Letter 'c'.
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
0x12, // ░░░▓░░▓░
|
||||||
|
0x12, // ░░░▓░░▓░
|
||||||
|
|
||||||
|
// #100 Letter 'd'.
|
||||||
|
0x0C, // ░░░░▓▓░░
|
||||||
|
0x12, // ░░░▓░░▓░
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #101 Letter 'e'.
|
||||||
|
0x0C, // ░░░░▓▓░░
|
||||||
|
0x1A, // ░░░▓▓░▓░
|
||||||
|
0x14, // ░░░▓░▓░░
|
||||||
|
|
||||||
|
// #102 Letter 'f'.
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x05, // ░░░░░▓░▓
|
||||||
|
|
||||||
|
// #103 Letter 'g'.
|
||||||
|
0x2E, // ░░▓░▓▓▓░
|
||||||
|
0x2A, // ░░▓░▓░▓░
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
|
||||||
|
// #104 Letter 'h'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x02, // ░░░░░░▓░
|
||||||
|
0x1C, // ░░░▓▓▓░░
|
||||||
|
|
||||||
|
// #105 Letter 'i'.
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
0x1D, // ░░░▓▓▓░▓
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
|
||||||
|
// #106 Letter 'j'.
|
||||||
|
0x20, // ░░▓░░░░░
|
||||||
|
0x1D, // ░░░▓▓▓░▓
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
|
||||||
|
// #107 Letter 'k'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x1A, // ░░░▓▓░▓░
|
||||||
|
|
||||||
|
// #108 Letter 'l'.
|
||||||
|
0x01, // ░░░░░░░▓
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
|
||||||
|
// #109 Letter 'm'.
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
|
||||||
|
// #110 Letter 'n'.
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
0x02, // ░░░░░░▓░
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
|
||||||
|
// #111 Letter 'o'.
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
0x12, // ░░░▓░░▓░
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
|
||||||
|
// #112 Letter 'p'.
|
||||||
|
0x3E, // ░░▓▓▓▓▓░
|
||||||
|
0x12, // ░░░▓░░▓░
|
||||||
|
0x0C, // ░░░░▓▓░░
|
||||||
|
|
||||||
|
// #113 Letter 'q'.
|
||||||
|
0x0C, // ░░░░▓▓░░
|
||||||
|
0x12, // ░░░▓░░▓░
|
||||||
|
0x3E, // ░░▓▓▓▓▓░
|
||||||
|
|
||||||
|
// #114 Letter 'r'.
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
0x02, // ░░░░░░▓░
|
||||||
|
0x06, // ░░░░░▓▓░
|
||||||
|
|
||||||
|
// #115 Letter 's'.
|
||||||
|
0x14, // ░░░▓░▓░░
|
||||||
|
0x12, // ░░░▓░░▓░
|
||||||
|
0x0A, // ░░░░▓░▓░
|
||||||
|
|
||||||
|
// #116 Letter 't'.
|
||||||
|
0x02, // ░░░░░░▓░
|
||||||
|
0x0F, // ░░░░▓▓▓▓
|
||||||
|
0x12, // ░░░▓░░▓░
|
||||||
|
|
||||||
|
// #117 Letter 'u'.
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
|
||||||
|
// #118 Letter 'v'.
|
||||||
|
0x0E, // ░░░░▓▓▓░
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
0x0E, // ░░░░▓▓▓░
|
||||||
|
|
||||||
|
// #119 Letter 'w'.
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
0x08, // ░░░░▓░░░
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
|
||||||
|
// #120 Letter 'x'.
|
||||||
|
0x1A, // ░░░▓▓░▓░
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x1A, // ░░░▓▓░▓░
|
||||||
|
|
||||||
|
// #121 Letter 'y'.
|
||||||
|
0x2E, // ░░▓░▓▓▓░
|
||||||
|
0x28, // ░░▓░▓░░░
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
|
||||||
|
// #122 Letter 'z'.
|
||||||
|
0x1A, // ░░░▓▓░▓░
|
||||||
|
0x12, // ░░░▓░░▓░
|
||||||
|
0x16, // ░░░▓░▓▓░
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// #48 Number '0'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x11, // ░░░▓░░░▓
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #49 Number '1'.
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
|
||||||
|
// #50 Number '2'.
|
||||||
|
0x1D, // ░░░▓▓▓░▓
|
||||||
|
0x15, // ░░░▓░▓░▓
|
||||||
|
0x17, // ░░░▓░▓▓▓
|
||||||
|
|
||||||
|
// #51 Number '3'.
|
||||||
|
0x11, // ░░░▓░░░▓
|
||||||
|
0x15, // ░░░▓░▓░▓
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #52 Number '4'.
|
||||||
|
0x07, // ░░░░░▓▓▓
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #53 Number '5'.
|
||||||
|
0x17, // ░░░▓░▓▓▓
|
||||||
|
0x15, // ░░░▓░▓░▓
|
||||||
|
0x1D, // ░░░▓▓▓░▓
|
||||||
|
|
||||||
|
// #54 Number '6'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x15, // ░░░▓░▓░▓
|
||||||
|
0x1D, // ░░░▓▓▓░▓
|
||||||
|
|
||||||
|
// #55 Number '7'.
|
||||||
|
0x01, // ░░░░░░░▓
|
||||||
|
0x01, // ░░░░░░░▓
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #56 Number '8'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x15, // ░░░▓░▓░▓
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #57 Number '9'.
|
||||||
|
0x17, // ░░░▓░▓▓▓
|
||||||
|
0x15, // ░░░▓░▓░▓
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #33 Symbol '!'.
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
0x17, // ░░░▓░▓▓▓
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
|
||||||
|
// #46 Symbol '.'.
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
0x00 // ░░░░░░░░
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Font3x5::Font3x5(uint8_t lineSpacing) {
|
||||||
|
|
||||||
|
_lineHeight = lineSpacing;
|
||||||
|
_letterSpacing = 1;
|
||||||
|
|
||||||
|
_cursorX = _cursorY = _baseX = 0;
|
||||||
|
_textColor = 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t Font3x5::write(uint8_t c) {
|
||||||
|
|
||||||
|
if (c == '\n') { _cursorX = _baseX; _cursorY += _lineHeight; }
|
||||||
|
else {
|
||||||
|
|
||||||
|
printChar(c, _cursorX, _cursorY);
|
||||||
|
_cursorX += FONT3X5_WIDTH + _letterSpacing;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Font3x5::printChar(const char c, const int8_t x, int8_t y) {
|
||||||
|
|
||||||
|
int8_t idx = -1;
|
||||||
|
|
||||||
|
++y;
|
||||||
|
|
||||||
|
switch (c) {
|
||||||
|
|
||||||
|
case CHAR_LETTER_A ... CHAR_LETTER_Z:
|
||||||
|
idx = c - CHAR_LETTER_A;
|
||||||
|
break;
|
||||||
|
|
||||||
|
#ifdef USE_LOWER_CASE
|
||||||
|
case CHAR_LETTER_A_LOWER ... CHAR_LETTER_Z_LOWER:
|
||||||
|
idx = c - CHAR_LETTER_A_LOWER + 26;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
case CHAR_NUMBER_0 ... CHAR_NUMBER_9:
|
||||||
|
idx = c - CHAR_NUMBER_0 + FONT_NUMBER_INDEX;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CHAR_EXCLAMATION:
|
||||||
|
idx = FONT_EXCLAMATION_INDEX;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CHAR_PERIOD:
|
||||||
|
idx = FONT_PERIOD_INDEX;
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (idx > -1) {
|
||||||
|
|
||||||
|
if (_textColor == WHITE) {
|
||||||
|
Sprites::drawSelfMasked(x, y, font_images, idx);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Sprites::drawErase(x, y, font_images, idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Font3x5::setCursor(const int8_t x, const int8_t y) {
|
||||||
|
_cursorX = _baseX = x;
|
||||||
|
_cursorY = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Font3x5::setTextColor(const uint8_t color){
|
||||||
|
_textColor = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Font3x5::setHeight(const uint8_t color){
|
||||||
|
_lineHeight = color;
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <Print.h>
|
||||||
|
|
||||||
|
class Font3x5 : public Print {
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Font3x5(uint8_t lineSpacing = 8);
|
||||||
|
|
||||||
|
virtual size_t write(uint8_t); // used by the Arduino Print class
|
||||||
|
void printChar(const char c, const int8_t x, int8_t y);
|
||||||
|
void setCursor(const int8_t x, const int8_t y);
|
||||||
|
|
||||||
|
void setTextColor(const uint8_t color);
|
||||||
|
void setHeight(const uint8_t color);
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
int8_t _cursorX; // Default is 0.
|
||||||
|
int8_t _baseX; // needed for linebreak.
|
||||||
|
int8_t _cursorY; // Default is 0.
|
||||||
|
|
||||||
|
int8_t _textColor; // BLACK == 0, everything else is WHITE. Default is WHITE.
|
||||||
|
|
||||||
|
uint8_t _letterSpacing; // letterSpacing controls the distance between letters. Default is 1.
|
||||||
|
uint8_t _lineHeight; // lineHeight controls the height between lines breakend by \n. Default is 8.
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,504 @@
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <Sprites.h>
|
||||||
|
#include <Print.h>
|
||||||
|
#include "Font4x6.h"
|
||||||
|
|
||||||
|
#define USE_LOWER_CASE
|
||||||
|
|
||||||
|
#define FONT4x6_WIDTH 4
|
||||||
|
#define FONT4x6_HEIGHT 7
|
||||||
|
|
||||||
|
#define CHAR_EXCLAMATION 33
|
||||||
|
#define CHAR_PERIOD 46
|
||||||
|
#define CHAR_LETTER_A 65
|
||||||
|
#define CHAR_LETTER_Z 90
|
||||||
|
#define CHAR_LETTER_A_LOWER 97
|
||||||
|
#define CHAR_LETTER_Z_LOWER 122
|
||||||
|
#define CHAR_NUMBER_0 48
|
||||||
|
#define CHAR_NUMBER_9 57
|
||||||
|
|
||||||
|
#ifdef USE_LOWER_CASE
|
||||||
|
#define FONT_EXCLAMATION_INDEX 62
|
||||||
|
#define FONT_PERIOD_INDEX 63
|
||||||
|
#define FONT_NUMBER_INDEX 52
|
||||||
|
#else
|
||||||
|
#define FONT_EXCLAMATION_INDEX 36
|
||||||
|
#define FONT_PERIOD_INDEX 37
|
||||||
|
#define FONT_NUMBER_INDEX 26
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const uint8_t PROGMEM font_images[] = {
|
||||||
|
4, 8,
|
||||||
|
|
||||||
|
// #65 Letter 'A'.
|
||||||
|
0x3E, // ░░▓▓▓▓▓░
|
||||||
|
0x09, // ░░░░▓░░▓
|
||||||
|
0x09, // ░░░░▓░░▓
|
||||||
|
0x3E, // ░░▓▓▓▓▓░
|
||||||
|
|
||||||
|
// #66 Letter 'B'.
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x25, // ░░▓░░▓░▓
|
||||||
|
0x25, // ░░▓░░▓░▓
|
||||||
|
0x1A, // ░░░▓▓░▓░
|
||||||
|
|
||||||
|
// #67 Letter 'C'.
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
0x21, // ░░▓░░░░▓
|
||||||
|
0x21, // ░░▓░░░░▓
|
||||||
|
0x12, // ░░░▓░░▓░
|
||||||
|
|
||||||
|
// #68 Letter 'D'.
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x21, // ░░▓░░░░▓
|
||||||
|
0x21, // ░░▓░░░░▓
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
|
||||||
|
// #69 Letter 'E'.
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x25, // ░░▓░░▓░▓
|
||||||
|
0x25, // ░░▓░░▓░▓
|
||||||
|
0x21, // ░░▓░░░░▓
|
||||||
|
|
||||||
|
// #70 Letter 'F'.
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x05, // ░░░░░▓░▓
|
||||||
|
0x05, // ░░░░░▓░▓
|
||||||
|
0x01, // ░░░░░░░▓
|
||||||
|
|
||||||
|
// #71 Letter 'G'.
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
0x21, // ░░▓░░░░▓
|
||||||
|
0x29, // ░░▓░▓░░▓
|
||||||
|
0x3A, // ░░▓▓▓░▓░
|
||||||
|
|
||||||
|
// #72 Letter 'H'.
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
|
||||||
|
// #73 Letter 'I'.
|
||||||
|
0x21, // ░░▓░░░░▓
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x21, // ░░▓░░░░▓
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
|
||||||
|
// #74 Letter 'J'.
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
0x21, // ░░▓░░░░▓
|
||||||
|
0x21, // ░░▓░░░░▓
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #75 Letter 'K'.
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x0A, // ░░░░▓░▓░
|
||||||
|
0x31, // ░░▓▓░░░▓
|
||||||
|
|
||||||
|
// #76 Letter 'L'.
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x20, // ░░▓░░░░░
|
||||||
|
0x20, // ░░▓░░░░░
|
||||||
|
0x20, // ░░▓░░░░░
|
||||||
|
|
||||||
|
// #77 Letter 'M'.
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x02, // ░░░░░░▓░
|
||||||
|
0x02, // ░░░░░░▓░
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
|
||||||
|
// #78 Letter 'N'.
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x02, // ░░░░░░▓░
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
|
||||||
|
// #79 Letter 'O'.
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
0x21, // ░░▓░░░░▓
|
||||||
|
0x21, // ░░▓░░░░▓
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
|
||||||
|
// #80 Letter 'P'.
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x09, // ░░░░▓░░▓
|
||||||
|
0x09, // ░░░░▓░░▓
|
||||||
|
0x06, // ░░░░░▓▓░
|
||||||
|
|
||||||
|
// #81 Letter 'Q'.
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
0x21, // ░░▓░░░░▓
|
||||||
|
0x11, // ░░░▓░░░▓
|
||||||
|
0x2E, // ░░▓░▓▓▓░
|
||||||
|
|
||||||
|
// #82 Letter 'R'.
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x09, // ░░░░▓░░▓
|
||||||
|
0x09, // ░░░░▓░░▓
|
||||||
|
0x36, // ░░▓▓░▓▓░
|
||||||
|
|
||||||
|
// #83 Letter 'S'.
|
||||||
|
0x22, // ░░▓░░░▓░
|
||||||
|
0x25, // ░░▓░░▓░▓
|
||||||
|
0x25, // ░░▓░░▓░▓
|
||||||
|
0x19, // ░░░▓▓░░▓
|
||||||
|
|
||||||
|
// #84 Letter 'T'.
|
||||||
|
0x01, // ░░░░░░░▓
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x01, // ░░░░░░░▓
|
||||||
|
0x01, // ░░░░░░░▓
|
||||||
|
|
||||||
|
// #85 Letter 'U'.
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x20, // ░░▓░░░░░
|
||||||
|
0x20, // ░░▓░░░░░
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #86 Letter 'V'.
|
||||||
|
0x0F, // ░░░░▓▓▓▓
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
0x20, // ░░▓░░░░░
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
|
||||||
|
// #87 Letter 'W'.
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
|
||||||
|
// #88 Letter 'X'.
|
||||||
|
0x3B, // ░░▓▓▓░▓▓
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x3B, // ░░▓▓▓░▓▓
|
||||||
|
|
||||||
|
// #89 Letter 'Y'.
|
||||||
|
0x03, // ░░░░░░▓▓
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x38, // ░░▓▓▓░░░
|
||||||
|
0x07, // ░░░░░▓▓▓
|
||||||
|
|
||||||
|
// #90 Letter 'Z'.
|
||||||
|
0x31, // ░░▓▓░░░▓
|
||||||
|
0x2D, // ░░▓░▓▓░▓
|
||||||
|
0x23, // ░░▓░░░▓▓
|
||||||
|
0x21, // ░░▓░░░░▓
|
||||||
|
|
||||||
|
#ifdef USE_LOWER_CASE
|
||||||
|
|
||||||
|
// #97 Letter 'a'.
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
0x2A, // ░░▓░▓░▓░
|
||||||
|
0x2A, // ░░▓░▓░▓░
|
||||||
|
0x3C, // ░░▓▓▓▓░░
|
||||||
|
|
||||||
|
// #98 Letter 'b'.
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x24, // ░░▓░░▓░░
|
||||||
|
0x24, // ░░▓░░▓░░
|
||||||
|
0x18, // ░░░▓▓░░░
|
||||||
|
|
||||||
|
// #99 Letter 'c'.
|
||||||
|
0x1C, // ░░░▓▓▓░░
|
||||||
|
0x22, // ░░▓░░░▓░
|
||||||
|
0x22, // ░░▓░░░▓░
|
||||||
|
0x14, // ░░░▓░▓░░
|
||||||
|
|
||||||
|
// #100 Letter 'd'.
|
||||||
|
0x18, // ░░░▓▓░░░
|
||||||
|
0x24, // ░░▓░░▓░░
|
||||||
|
0x24, // ░░▓░░▓░░
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
|
||||||
|
// #101 Letter 'e'.
|
||||||
|
0x1C, // ░░░▓▓▓░░
|
||||||
|
0x2A, // ░░▓░▓░▓░
|
||||||
|
0x2A, // ░░▓░▓░▓░
|
||||||
|
0x2C, // ░░▓░▓▓░░
|
||||||
|
|
||||||
|
// #102 Letter 'f'.
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x7E, // ░▓▓▓▓▓▓░
|
||||||
|
0x05, // ░░░░░▓░▓
|
||||||
|
0x01, // ░░░░░░░▓
|
||||||
|
|
||||||
|
// #103 Letter 'g'.
|
||||||
|
0x4C, // ░▓░░▓▓░░
|
||||||
|
0x52, // ░▓░▓░░▓░
|
||||||
|
0x52, // ░▓░▓░░▓░
|
||||||
|
0x3E, // ░░▓▓▓▓▓░
|
||||||
|
|
||||||
|
// #104 Letter 'h'.
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x38, // ░░▓▓▓░░░
|
||||||
|
|
||||||
|
// #105 Letter 'i'.
|
||||||
|
0x24, // ░░▓░░▓░░
|
||||||
|
0x3D, // ░░▓▓▓▓░▓
|
||||||
|
0x20, // ░░▓░░░░░
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
|
||||||
|
// #106 Letter 'j'.
|
||||||
|
0x40, // ░▓░░░░░░
|
||||||
|
0x40, // ░▓░░░░░░
|
||||||
|
0x44, // ░▓░░░▓░░
|
||||||
|
0x3D, // ░░▓▓▓▓░▓
|
||||||
|
|
||||||
|
// #107 Letter 'k'.
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x08, // ░░░░▓░░░
|
||||||
|
0x14, // ░░░▓░▓░░
|
||||||
|
0x22, // ░░▓░░░▓░
|
||||||
|
|
||||||
|
// #108 Letter 'l'.
|
||||||
|
0x21, // ░░▓░░░░▓
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x20, // ░░▓░░░░░
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
|
||||||
|
// #109 Letter 'm'.
|
||||||
|
0x3E, // ░░▓▓▓▓▓░
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x3E, // ░░▓▓▓▓▓░
|
||||||
|
|
||||||
|
// #110 Letter 'n'.
|
||||||
|
0x3E, // ░░▓▓▓▓▓░
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x02, // ░░░░░░▓░
|
||||||
|
0x3C, // ░░▓▓▓▓░░
|
||||||
|
|
||||||
|
// #111 Letter 'o'.
|
||||||
|
0x1C, // ░░░▓▓▓░░
|
||||||
|
0x22, // ░░▓░░░▓░
|
||||||
|
0x22, // ░░▓░░░▓░
|
||||||
|
0x1C, // ░░░▓▓▓░░
|
||||||
|
|
||||||
|
// #112 Letter 'p'.
|
||||||
|
0x7E, // ░▓▓▓▓▓▓░
|
||||||
|
0x22, // ░░▓░░░▓░
|
||||||
|
0x22, // ░░▓░░░▓░
|
||||||
|
0x1C, // ░░░▓▓▓░░
|
||||||
|
|
||||||
|
// #113 Letter 'q'.
|
||||||
|
0x1C, // ░░░▓▓▓░░
|
||||||
|
0x22, // ░░▓░░░▓░
|
||||||
|
0x22, // ░░▓░░░▓░
|
||||||
|
0x7E, // ░▓▓▓▓▓▓░
|
||||||
|
|
||||||
|
// #114 Letter 'r'.
|
||||||
|
0x3E, // ░░▓▓▓▓▓░
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
0x02, // ░░░░░░▓░
|
||||||
|
0x04, // ░░░░░▓░░
|
||||||
|
|
||||||
|
// #115 Letter 's'.
|
||||||
|
0x24, // ░░▓░░▓░░
|
||||||
|
0x2A, // ░░▓░▓░▓░
|
||||||
|
0x2A, // ░░▓░▓░▓░
|
||||||
|
0x12, // ░░░▓░░▓░
|
||||||
|
|
||||||
|
// #116 Letter 't'.
|
||||||
|
0x02, // ░░░░░░▓░
|
||||||
|
0x1F, // ░░░▓▓▓▓▓
|
||||||
|
0x22, // ░░▓░░░▓░
|
||||||
|
0x20, // ░░▓░░░░░
|
||||||
|
|
||||||
|
// #117 Letter 'u'.
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
0x20, // ░░▓░░░░░
|
||||||
|
0x20, // ░░▓░░░░░
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
|
||||||
|
// #118 Letter 'v'.
|
||||||
|
0x0E, // ░░░░▓▓▓░
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
0x20, // ░░▓░░░░░
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
|
||||||
|
// #119 Letter 'w'.
|
||||||
|
0x3E, // ░░▓▓▓▓▓░
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
0x10, // ░░░▓░░░░
|
||||||
|
0x3E, // ░░▓▓▓▓▓░
|
||||||
|
|
||||||
|
// #120 Letter 'x'.
|
||||||
|
0x36, // ░░▓▓░▓▓░
|
||||||
|
0x08, // ░░░░▓░░░
|
||||||
|
0x08, // ░░░░▓░░░
|
||||||
|
0x36, // ░░▓▓░▓▓░
|
||||||
|
|
||||||
|
// #121 Letter 'y'.
|
||||||
|
0x4E, // ░▓░░▓▓▓░
|
||||||
|
0x50, // ░▓░▓░░░░
|
||||||
|
0x50, // ░▓░▓░░░░
|
||||||
|
0x3E, // ░░▓▓▓▓▓░
|
||||||
|
|
||||||
|
// #122 Letter 'z'.
|
||||||
|
0x32, // ░░▓▓░░▓░
|
||||||
|
0x2A, // ░░▓░▓░▓░
|
||||||
|
0x26, // ░░▓░░▓▓░
|
||||||
|
0x22, // ░░▓░░░▓░
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// #48 Number '0'.
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
0x29, // ░░▓░▓░░▓
|
||||||
|
0x25, // ░░▓░░▓░▓
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
|
||||||
|
// #49 Number '1'.
|
||||||
|
0x22, // ░░▓░░░▓░
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x20, // ░░▓░░░░░
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
|
||||||
|
// #50 Number '2'.
|
||||||
|
0x32, // ░░▓▓░░▓░
|
||||||
|
0x29, // ░░▓░▓░░▓
|
||||||
|
0x29, // ░░▓░▓░░▓
|
||||||
|
0x26, // ░░▓░░▓▓░
|
||||||
|
|
||||||
|
// #51 Number '3'.
|
||||||
|
0x12, // ░░░▓░░▓░
|
||||||
|
0x21, // ░░▓░░░░▓
|
||||||
|
0x25, // ░░▓░░▓░▓
|
||||||
|
0x1A, // ░░░▓▓░▓░
|
||||||
|
|
||||||
|
// #52 Number '4'.
|
||||||
|
0x0C, // ░░░░▓▓░░
|
||||||
|
0x0A, // ░░░░▓░▓░
|
||||||
|
0x3F, // ░░▓▓▓▓▓▓
|
||||||
|
0x08, // ░░░░▓░░░
|
||||||
|
|
||||||
|
// #53 Number '5'.
|
||||||
|
0x17, // ░░░▓░▓▓▓
|
||||||
|
0x25, // ░░▓░░▓░▓
|
||||||
|
0x25, // ░░▓░░▓░▓
|
||||||
|
0x19, // ░░░▓▓░░▓
|
||||||
|
|
||||||
|
// #54 Number '6'.
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
0x25, // ░░▓░░▓░▓
|
||||||
|
0x25, // ░░▓░░▓░▓
|
||||||
|
0x18, // ░░░▓▓░░░
|
||||||
|
|
||||||
|
// #55 Number '7'.
|
||||||
|
0x01, // ░░░░░░░▓
|
||||||
|
0x39, // ░░▓▓▓░░▓
|
||||||
|
0x05, // ░░░░░▓░▓
|
||||||
|
0x03, // ░░░░░░▓▓
|
||||||
|
|
||||||
|
// #56 Number '8'.
|
||||||
|
0x1A, // ░░░▓▓░▓░
|
||||||
|
0x25, // ░░▓░░▓░▓
|
||||||
|
0x25, // ░░▓░░▓░▓
|
||||||
|
0x1A, // ░░░▓▓░▓░
|
||||||
|
|
||||||
|
// #57 Number '9'.
|
||||||
|
0x06, // ░░░░░▓▓░
|
||||||
|
0x29, // ░░▓░▓░░▓
|
||||||
|
0x29, // ░░▓░▓░░▓
|
||||||
|
0x1E, // ░░░▓▓▓▓░
|
||||||
|
|
||||||
|
// #33 Symbol '!'.
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
0x2F, // ░░▓░▓▓▓▓
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
|
||||||
|
// #46 Symbol '.'.
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
0x20, // ░░▓░░░░░
|
||||||
|
0x00, // ░░░░░░░░
|
||||||
|
0x00 // ░░░░░░░░
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Font4x6::Font4x6(uint8_t lineSpacing) {
|
||||||
|
|
||||||
|
_lineHeight = lineSpacing;
|
||||||
|
_letterSpacing = 1;
|
||||||
|
|
||||||
|
_cursorX = _cursorY = _baseX = 0;
|
||||||
|
_textColor = 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t Font4x6::write(uint8_t c) {
|
||||||
|
|
||||||
|
if (c == '\n') { _cursorX = _baseX; _cursorY += _lineHeight; }
|
||||||
|
else {
|
||||||
|
|
||||||
|
printChar(c, _cursorX, _cursorY);
|
||||||
|
_cursorX += FONT4x6_WIDTH + _letterSpacing;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Font4x6::printChar(const char c, const int8_t x, int8_t y) {
|
||||||
|
|
||||||
|
int8_t idx = -1;
|
||||||
|
|
||||||
|
++y;
|
||||||
|
|
||||||
|
switch (c) {
|
||||||
|
|
||||||
|
case CHAR_LETTER_A ... CHAR_LETTER_Z:
|
||||||
|
idx = c - CHAR_LETTER_A;
|
||||||
|
break;
|
||||||
|
|
||||||
|
#ifdef USE_LOWER_CASE
|
||||||
|
case CHAR_LETTER_A_LOWER ... CHAR_LETTER_Z_LOWER:
|
||||||
|
idx = c - CHAR_LETTER_A_LOWER + 26;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
case CHAR_NUMBER_0 ... CHAR_NUMBER_9:
|
||||||
|
idx = c - CHAR_NUMBER_0 + FONT_NUMBER_INDEX;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CHAR_EXCLAMATION:
|
||||||
|
idx = FONT_EXCLAMATION_INDEX;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CHAR_PERIOD:
|
||||||
|
idx = FONT_PERIOD_INDEX;
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (idx > -1) {
|
||||||
|
|
||||||
|
if (_textColor == WHITE) {
|
||||||
|
Sprites::drawSelfMasked(x, y, font_images, idx);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Sprites::drawErase(x, y, font_images, idx);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Font4x6::setCursor(const int8_t x, const int8_t y) {
|
||||||
|
_cursorX = _baseX = x;
|
||||||
|
_cursorY = y;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Font4x6::setTextColor(const uint8_t color){
|
||||||
|
_textColor = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Font4x6::setHeight(const uint8_t color){
|
||||||
|
_lineHeight = color;
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include <Print.h>
|
||||||
|
|
||||||
|
class Font4x6 : public Print {
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Font4x6(uint8_t lineSpacing = 8);
|
||||||
|
|
||||||
|
virtual size_t write(uint8_t); // used by the Arduino Print class
|
||||||
|
void printChar(const char c, const int8_t x, int8_t y);
|
||||||
|
void setCursor(const int8_t x, const int8_t y);
|
||||||
|
|
||||||
|
void setTextColor(const uint8_t color);
|
||||||
|
void setHeight(const uint8_t color);
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
int8_t _cursorX; // Default is 0.
|
||||||
|
int8_t _baseX; // needed for linebreak.
|
||||||
|
int8_t _cursorY; // Default is 0.
|
||||||
|
|
||||||
|
int8_t _textColor; // BLACK == 0, everything else is WHITE. Default is WHITE.
|
||||||
|
|
||||||
|
uint8_t _letterSpacing; // letterSpacing controls the distance between letters. Default is 1.
|
||||||
|
uint8_t _lineHeight; // lineHeight controls the height between lines breakend by \n. Default is 8.
|
||||||
|
|
||||||
|
};
|
|
@ -0,0 +1,29 @@
|
||||||
|
BSD 3-Clause License
|
||||||
|
|
||||||
|
Copyright (c) 2018, Filmote
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of the copyright holder nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
Loading…
Reference in New Issue