Hardware components | ||||||
| × | 1 | ||||
| × | 1 | ||||
Software apps and online services | ||||||
| ||||||
Hand tools and fabrication machines | ||||||
| ||||||
|
This is a remake of the Art Deco FM Radio with Arduino by educ8s. A PCB has been designed to hold an Arduino Pro Mini and the FM Radio Module. I also added an amplifier based on the TEA2025 IC.
Schematic & PCBThe radio is built around the TEA5767 FM radio module. It is controlled by an Arduino Pro Mini. The output of the TEA5767 is feed into a mono amplifier built around the TEA2025 amplifier IC. The radio is powered by a 3.7V Li-on battery and uses a WeMOS battery shield to boost the voltage to 5V and also provide the ability to charge the battery.
The WeMOS charging module is soldered to the copper side of the board using two pin headers. I used polarized connectors and pin headers to join the external components to the board but this is optional.
The output of the TEA5767 module is stereo and the amplifier it feeds is mono. I hacked a old audio cable and converted the stereo signal to mono via two 1K resistors. The resistors are in series with the cable and the whole lot protected with a heat shrink sleeve.
One of the many issues I had with this build was that there didn't appear to be any mechanism to hold the back of the case on. By 3D printing a couple of supports and gluing these to the inside walls of the case, it allowed me to hold the back in place using four M3 screws. The support also contains a hole to allow the 18650 battery holder to be screwed to the unit. Drill out the holes in "Back_Supports.stl" with a 2.5mm drill and create a thread with a 3mm tap.
educ8s did a terrific design for the case and I think it came out great. Unfortunately due to problems with the Main_Enclosure.stl, I couldn't modify the STL file in OpenSCAD. This was unfortunate as I want to add PCB mounts etc.
Still it was a great project and an enjoyable build. Many thanks educ8s π
/////////////////////////////////////////////////////////////////
// Arduino FM Radio Project v2.0 //
// Get the latest version of the code here: //
// http://educ8s.tv/arduino-fm-radio-2 //
/////////////////////////////////////////////////////////////////
#include <TEA5767N.h> //https://github.com/mroger/TEA5767
#include <SPI.h>
#include <Adafruit_GFX.h> //https://github.com/adafruit/Adafruit-GFX-Library
#include <Adafruit_PCD8544.h> //https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library
#include "GrenadierNF18pt7b.h"
#include "GrenadierNF15pt7b.h"
#include "splash.h"
#include <ClickEncoder.h> //https://github.com/0xPIT/encoder
#include <TimerOne.h> //https://github.com/PaulStoffregen/TimerOne
#include <EEPROM.h>
#define CONSTRAST 25
#define LCD_CLK 13
#define LCD_DIN 11
#define LCD_RST 3
#define LCD_CE 4
#define LCD_DC 5
#define LCD_LIGHT 10
//#define LCD_LIGHT 7
Adafruit_PCD8544 display = Adafruit_PCD8544(LCD_RST, LCD_CE, LCD_DC);
float stations[] = {95.3,96.9,101.7,102.5,104.1,105.7,106.5,0};
int nextStation = 0;
int SECONDS_TO_AUTOSAVE = 300;
float previous_frequency = 0;
float frequency = 95.0f;
#define ENC_CLK A0
#define ENC_DT A1
#define ENC_SW A2
ClickEncoder *encoder;
int16_t last, value;
boolean up = false;
boolean down = false;
boolean middle = false;
long seconds = 0;
long previousMillis = 0;
bool backlightON = false;
long interval = 1000;
TEA5767N radio = TEA5767N();
void setup()
{
pinMode(LCD_LIGHT, OUTPUT);
digitalWrite(LCD_LIGHT,HIGH);
initDisplay();
showSplashScreen();
radio.setMonoReception();
radio.setStereoNoiseCancellingOn();
initRotaryEncoder();
Serial.begin(9600);
frequency = readFrequencyFromEEPROM();
if(isnan(frequency) || frequency < 88)
{
Serial.println("setup(): EEPROM has no stored frequency.");
frequency = 88.0;
writeFrequencyToEEPROM(&frequency);
}
printText(String(frequency,1),String(frequency,1));
}
void loop() {
unsigned long currentMillis = millis();
checkRotaryEncoderButton();
if(currentMillis - previousMillis > interval)
{
if(frequency!=previous_frequency)
{
previous_frequency = frequency;
radio.selectFrequency(frequency);
seconds = 0;
}else
{
seconds++;
if(seconds == SECONDS_TO_AUTOSAVE)
{
float read_frequency = readFrequencyFromEEPROM();
if(read_frequency!=frequency)
{
Serial.println("loop(): Saving new frequency to EEPROM");
writeFrequencyToEEPROM(&frequency);
}
}
}
previousMillis = currentMillis;
Serial.println("loop(): "+String(seconds));
}
readRotaryEncoder();
if(up)
{
up = false;
previous_frequency = frequency;
frequency = frequency+0.1f;
printText(String(frequency,1),String(previous_frequency,1));
}
if(down)
{
down = false;
previous_frequency = frequency;
frequency = frequency-0.1f;
printText(String(frequency,1),String(previous_frequency,1));
}
}
void printText(String text, String previous_text)
{
display.clearDisplay(); // clears the screen and, WHITE buffer
if(previous_text.length() == 4)
{
display.setFont(&GrenadierNF18pt7b);
}else
{
display.setFont(&GrenadierNF15pt7b);
}
display.setTextColor(WHITE);
display.setCursor(0,37);
display.println(previous_text);
display.display();
if(text.length() == 4)
{
display.setFont(&GrenadierNF18pt7b);
}else
{
display.setFont(&GrenadierNF15pt7b);
}
display.setTextColor(BLACK);
display.setCursor(0,37);
display.println(text);
display.display();
}
void initRotaryEncoder()
{
encoder = new ClickEncoder(ENC_DT, ENC_CLK, ENC_SW);
encoder->setAccelerationEnabled(false);
Timer1.initialize(1000);
Timer1.attachInterrupt(timerIsr);
last = encoder->getValue();
}
void initDisplay()
{
display.begin();
display.setContrast(CONSTRAST);
display.clearDisplay(); // clears the screen and, WHITE buffer
display.display();
}
void timerIsr()
{
encoder->service();
}
void showSplashScreen()
{
display.clearDisplay();
display.drawBitmap(0, 0, SPLASH, 84, 48, 1);
display.display();
delay(3000);
display.clearDisplay(); // clears the screen and, WHITE buffer
}
void writeFrequencyToEEPROM(float *freq)
{
byte ByteArray[4];
memcpy(ByteArray, freq, 4);
for(int x = 0; x < 4; x++)
{
EEPROM.write(x, ByteArray[x]);
}
Serial.println("writeFrequencyFromEEPROM(): "+String(frequency));
}
float readFrequencyFromEEPROM()
{
float frequency = 86.0;
byte ByteArray[4];
for(int x = 0; x < 4; x++)
{
ByteArray[x] = EEPROM.read(x);
}
memcpy(&frequency, ByteArray, 4);
Serial.println("readFrequencyFromEEPROM(): "+String(frequency));
return frequency;
}
void checkRotaryEncoderButton()
{
ClickEncoder::Button b = encoder->getButton();
if (b != ClickEncoder::Open) {
if(b==ClickEncoder::Clicked)
{
Serial.println("Toggle BackLight");
if(backlightON == false)
{
backlightON = true;
turnOnBacklight();
}else
{
backlightON = false;
turnOffBacklight();
}
}
}
}
void setNextStation()
{
frequency = stations[nextStation++];
if (stations[nextStation] == 0) {
nextStation = 0;
}
}
void turnOnBacklight()
{
digitalWrite(LCD_LIGHT,LOW);
}
void turnOffBacklight()
{
digitalWrite(LCD_LIGHT,HIGH);
}
void readRotaryEncoder()
{
value += encoder->getValue();
if (value/2 > last) {
last = value/2;
up = true;
delay(50);
}else if (value/2 < last) {
last = value/2;
down = true;
delay(50);
}
}
const uint8_t GrenadierNF15pt7bBitmaps[] PROGMEM = {
0xF0, 0x06, 0x06, 0x06, 0x0E, 0x0E, 0x0C, 0x0C, 0x0C, 0x1C, 0x18, 0x18,
0x18, 0x38, 0x38, 0x30, 0x30, 0x30, 0x70, 0x60, 0x60, 0x60, 0xE0, 0xE0,
0xC0, 0xC0, 0x00, 0xFC, 0x00, 0x1F, 0xFC, 0x00, 0xF0, 0x3C, 0x07, 0x00,
0x38, 0x38, 0x00, 0x71, 0xC0, 0x00, 0xC6, 0x00, 0x01, 0x98, 0x00, 0x06,
0xC0, 0x00, 0x0F, 0x00, 0x00, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x03, 0xC0,
0x00, 0x0F, 0x00, 0x00, 0x36, 0x00, 0x01, 0x98, 0x00, 0x06, 0x70, 0x00,
0x38, 0xE0, 0x01, 0xC1, 0xC0, 0x0E, 0x03, 0xC0, 0xF0, 0x07, 0xFF, 0x80,
0x03, 0xF0, 0x00, 0x00, 0x46, 0x77, 0xBD, 0x63, 0x18, 0xC6, 0x31, 0x8C,
0x63, 0x18, 0xC6, 0x31, 0x8C, 0x60, 0x3C, 0x03, 0xF0, 0x07, 0x80, 0x1C,
0x00, 0x60, 0x06, 0x00, 0x30, 0x03, 0x00, 0x30, 0x03, 0x00, 0x30, 0x06,
0x00, 0xE0, 0x0C, 0x01, 0xC0, 0x38, 0x07, 0x00, 0xE0, 0x1C, 0x03, 0xC0,
0x3F, 0xE7, 0xFE, 0xE0, 0xF0, 0x38, 0x18, 0x18, 0x38, 0x70, 0x78, 0x1C,
0x0E, 0x06, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0x0E, 0x1C, 0xF8,
0xE0, 0x00, 0x00, 0x08, 0x01, 0x00, 0x60, 0x0C, 0x03, 0x80, 0x70, 0x1E,
0x03, 0xC0, 0xF8, 0x1B, 0x07, 0x61, 0xCC, 0x39, 0x8E, 0x31, 0xC6, 0x70,
0xCF, 0xFF, 0xFF, 0x80, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x3F, 0x1F, 0x8C,
0x0E, 0x06, 0x03, 0x01, 0x81, 0xF8, 0x3E, 0x03, 0x80, 0xC0, 0x70, 0x18,
0x0C, 0x06, 0x03, 0x01, 0x81, 0x81, 0xC1, 0xCF, 0xC7, 0x80, 0x01, 0xC0,
0x03, 0x80, 0x03, 0x00, 0x07, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x1F, 0xE0,
0x1F, 0xF8, 0x3C, 0x3C, 0x30, 0x0E, 0x60, 0x06, 0x60, 0x07, 0xC0, 0x03,
0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x07, 0x60, 0x06, 0x70, 0x0E,
0x3C, 0x3C, 0x1F, 0xF8, 0x07, 0xE0, 0x7F, 0xEF, 0xFC, 0x03, 0x00, 0xE0,
0x18, 0x07, 0x00, 0xC0, 0x18, 0x07, 0x00, 0xC0, 0x38, 0x06, 0x00, 0xC0,
0x38, 0x06, 0x01, 0xC0, 0x30, 0x0E, 0x01, 0x80, 0x30, 0x0E, 0x01, 0x80,
0x00, 0x03, 0xC0, 0x07, 0xE0, 0x0E, 0x70, 0x0C, 0x30, 0x0C, 0x30, 0x0E,
0x70, 0x07, 0xE0, 0x1F, 0xF8, 0x3C, 0x3C, 0x70, 0x0E, 0x60, 0x06, 0xE0,
0x07, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xE0, 0x07, 0x60,
0x06, 0x70, 0x0E, 0x3C, 0x3C, 0x1F, 0xF8, 0x07, 0xE0, 0x07, 0xE0, 0x1F,
0xF8, 0x3C, 0x3C, 0x70, 0x0E, 0x60, 0x06, 0xC0, 0x03, 0xC0, 0x03, 0xC0,
0x03, 0xC0, 0x03, 0xC0, 0x03, 0x60, 0x06, 0x70, 0x0E, 0x38, 0x3C, 0x1F,
0xFC, 0x07, 0xF8, 0x00, 0x38, 0x00, 0x70, 0x00, 0x60, 0x00, 0xE0, 0x00,
0xC0, 0x01, 0xC0, 0x03, 0x80 };
const GFXglyph GrenadierNF15pt7bGlyphs[] PROGMEM = {
{ 0, 2, 2, 4, 1, -1 }, // 0x2E '.'
{ 1, 8, 25, 9, 1, -21 }, // 0x2F '/'
{ 26, 22, 22, 24, 1, -21 }, // 0x30 '0'
{ 87, 5, 23, 7, 1, -22 }, // 0x31 '1'
{ 102, 12, 22, 14, 1, -21 }, // 0x32 '2'
{ 135, 8, 22, 10, 1, -21 }, // 0x33 '3'
{ 157, 11, 23, 13, 1, -22 }, // 0x34 '4'
{ 189, 9, 22, 11, 1, -21 }, // 0x35 '5'
{ 214, 16, 22, 18, 1, -21 }, // 0x36 '6'
{ 258, 11, 22, 13, 1, -21 }, // 0x37 '7'
{ 289, 16, 22, 18, 1, -21 }, // 0x38 '8'
{ 333, 16, 22, 18, 1, -21 } }; // 0x39 '9'
const GFXfont GrenadierNF15pt7b PROGMEM = {
(uint8_t *)GrenadierNF15pt7bBitmaps,
(GFXglyph *)GrenadierNF15pt7bGlyphs,
0x2E, 0x39, 34 };
// Approx. 468 bytes
const uint8_t GrenadierNF18pt7bBitmaps[] PROGMEM = {
0xFC, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x30, 0x38, 0x1C, 0x0E, 0x06, 0x07,
0x03, 0x81, 0xC0, 0xE0, 0x60, 0x70, 0x38, 0x1C, 0x0C, 0x0E, 0x07, 0x03,
0x81, 0x80, 0xC0, 0xE0, 0x70, 0x38, 0x18, 0x1C, 0x0E, 0x07, 0x00, 0x00,
0x3F, 0x80, 0x00, 0x7F, 0xF8, 0x00, 0x3F, 0xFF, 0x80, 0x3E, 0x01, 0xF0,
0x1E, 0x00, 0x1E, 0x07, 0x00, 0x03, 0xC3, 0x80, 0x00, 0x79, 0xC0, 0x00,
0x0E, 0x70, 0x00, 0x01, 0xD8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F, 0x80,
0x00, 0x03, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x0F,
0x80, 0x00, 0x03, 0xE0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x77, 0x00, 0x00,
0x1D, 0xC0, 0x00, 0x0E, 0x38, 0x00, 0x07, 0x8F, 0x00, 0x03, 0xC1, 0xE0,
0x01, 0xE0, 0x3E, 0x01, 0xF0, 0x07, 0xFF, 0xF8, 0x00, 0x7F, 0xF8, 0x00,
0x03, 0xF8, 0x00, 0x04, 0x31, 0xCF, 0x7F, 0xF7, 0xD7, 0x1C, 0x71, 0xC7,
0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC7, 0x1C, 0x71, 0xC0,
0x3C, 0x00, 0x7F, 0x00, 0xFF, 0x00, 0x0F, 0x80, 0x07, 0x80, 0x07, 0x00,
0x07, 0x00, 0x0E, 0x00, 0x0C, 0x00, 0x1C, 0x00, 0x38, 0x00, 0x60, 0x01,
0xC0, 0x03, 0x80, 0x07, 0x00, 0x1C, 0x00, 0x78, 0x01, 0xE0, 0x03, 0x80,
0x0E, 0x00, 0x38, 0x00, 0xE0, 0x03, 0xC0, 0x0F, 0x00, 0x3F, 0xFC, 0xFF,
0xFB, 0xFF, 0xF0, 0xF0, 0x1F, 0x83, 0xF0, 0x07, 0x00, 0xE0, 0x1C, 0x03,
0x80, 0xF0, 0x3C, 0x07, 0xC0, 0xFC, 0x03, 0xC0, 0x1C, 0x03, 0xC0, 0x38,
0x07, 0x00, 0x60, 0x0C, 0x01, 0x80, 0x30, 0x0E, 0x03, 0xC0, 0x70, 0x3C,
0xFF, 0x1F, 0xC3, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x60,
0x03, 0x00, 0x38, 0x01, 0xC0, 0x1E, 0x00, 0xF0, 0x0F, 0x80, 0xFC, 0x07,
0xE0, 0x77, 0x03, 0xB8, 0x39, 0xC1, 0xCE, 0x1C, 0x70, 0xE3, 0x8E, 0x1C,
0x70, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x0E, 0x00, 0x70, 0x03, 0x80,
0x1C, 0x1F, 0xC7, 0xF8, 0xFF, 0x1C, 0x03, 0x00, 0xE0, 0x1C, 0x03, 0x80,
0x78, 0x1F, 0xC0, 0xFC, 0x03, 0xC0, 0x3C, 0x03, 0x80, 0x38, 0x07, 0x00,
0xE0, 0x0C, 0x03, 0x80, 0x70, 0x0E, 0x03, 0x80, 0xF0, 0x3C, 0xFF, 0x1F,
0xC3, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x07, 0x00, 0x01, 0xE0,
0x00, 0x38, 0x00, 0x0E, 0x00, 0x01, 0xC0, 0x00, 0x70, 0x00, 0x0E, 0xE0,
0x03, 0xFF, 0x80, 0x7F, 0xF8, 0x1F, 0x07, 0x87, 0x80, 0x38, 0xE0, 0x03,
0xB8, 0x00, 0x77, 0x00, 0x07, 0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03,
0xF0, 0x00, 0x7E, 0x00, 0x0E, 0xC0, 0x03, 0x9C, 0x00, 0x71, 0xC0, 0x1C,
0x3E, 0x0F, 0x03, 0xFF, 0xC0, 0x1F, 0xF0, 0x00, 0x60, 0x00, 0x3F, 0xFC,
0xFF, 0xE3, 0xFF, 0x80, 0x0C, 0x00, 0x70, 0x01, 0xC0, 0x0E, 0x00, 0x38,
0x01, 0xC0, 0x07, 0x00, 0x1C, 0x00, 0xE0, 0x03, 0x80, 0x1C, 0x00, 0x70,
0x01, 0x80, 0x0E, 0x00, 0x38, 0x01, 0xC0, 0x07, 0x00, 0x18, 0x00, 0xE0,
0x03, 0x80, 0x1C, 0x00, 0x70, 0x03, 0x80, 0x0E, 0x00, 0x00, 0x01, 0xF0,
0x00, 0x7F, 0x00, 0x1F, 0xF0, 0x03, 0x8E, 0x00, 0xE0, 0xC0, 0x1C, 0x18,
0x03, 0x83, 0x00, 0x38, 0xE0, 0x07, 0xFC, 0x01, 0xFF, 0xC0, 0x7F, 0xFC,
0x1E, 0x07, 0xC7, 0x80, 0x38, 0xE0, 0x03, 0xB8, 0x00, 0x77, 0x00, 0x07,
0xE0, 0x00, 0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x1C,
0xE0, 0x03, 0x9E, 0x00, 0xE1, 0xE0, 0x3C, 0x1F, 0xFF, 0x01, 0xFF, 0x80,
0x0F, 0xC0, 0x00, 0x01, 0xF8, 0x01, 0xFF, 0xC0, 0x7F, 0xFC, 0x1E, 0x03,
0xC7, 0x80, 0x38, 0xE0, 0x03, 0xB8, 0x00, 0x77, 0x00, 0x07, 0xE0, 0x00,
0xFC, 0x00, 0x1F, 0x80, 0x03, 0xF0, 0x00, 0x7E, 0x00, 0x0C, 0xE0, 0x03,
0x9E, 0x00, 0xE1, 0xE0, 0x3C, 0x1F, 0xFF, 0x01, 0xFF, 0xE0, 0x0F, 0xF8,
0x00, 0x07, 0x00, 0x01, 0xC0, 0x00, 0x70, 0x00, 0x0E, 0x00, 0x03, 0x80,
0x00, 0x70, 0x00, 0x1C, 0x00, 0x07, 0x80, 0x00, 0xFC, 0x00, 0xFC, 0x18,
0xC6, 0x00, 0x00, 0x00, 0x31, 0xDC, 0xEE, 0x20, 0x00, 0x08, 0x01, 0xC0,
0x7E, 0x0F, 0xC1, 0xF8, 0x3F, 0x03, 0xC0, 0x18, 0x00, 0xF0, 0x07, 0xF0,
0x07, 0xE0, 0x0F, 0xC0, 0x1F, 0x80, 0x1C, 0x00, 0x20, 0xFF, 0xFF, 0xFF,
0xFF, 0xFE, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0x07,
0x00, 0x3F, 0x00, 0x7E, 0x00, 0xFC, 0x01, 0xF8, 0x01, 0xE0, 0x03, 0x00,
0x78, 0x1F, 0xC3, 0xF0, 0x7E, 0x0F, 0xC0, 0x70, 0x02, 0x00, 0x00, 0x7C,
0x3F, 0xC7, 0xF8, 0x0E, 0x01, 0xC0, 0x70, 0x1C, 0x07, 0x01, 0xC0, 0xE0,
0x78, 0x1C, 0x0E, 0x07, 0x03, 0xC0, 0xE0, 0x70, 0x1C, 0x07, 0x01, 0xC0,
0x60, 0x18, 0x00, 0x00, 0x00, 0x60, 0x18, 0x06, 0x00, 0x00, 0x0C, 0x00,
0x01, 0xFF, 0xC0, 0x03, 0xFF, 0xF0, 0x0F, 0x80, 0xF8, 0x1E, 0x00, 0x3C,
0x3C, 0x00, 0x1C, 0x38, 0x00, 0x0E, 0x70, 0x00, 0x06, 0x70, 0x3C, 0x07,
0xE0, 0xFF, 0x87, 0xE1, 0xFF, 0x83, 0xE1, 0xC3, 0x83, 0xC3, 0x81, 0x83,
0xC3, 0x81, 0x83, 0xC3, 0x81, 0x87, 0xE3, 0x81, 0xC7, 0xE1, 0x83, 0xCE,
0xE1, 0xC3, 0xFE, 0x60, 0xFF, 0xFC, 0x70, 0x7E, 0x10, 0x78, 0x18, 0x00,
0x38, 0x00, 0x00, 0x1E, 0x00, 0x08, 0x0F, 0x00, 0x38, 0x07, 0xFF, 0xFC,
0x03, 0xFF, 0xF0, 0x00, 0x7F, 0x80, 0x00, 0x04, 0x00, 0x1C, 0x00, 0x7C,
0x00, 0xFC, 0x03, 0xFC, 0x07, 0x9C, 0x07, 0x1C, 0x0E, 0x1C, 0x1C, 0x1C,
0x3C, 0x1C, 0x38, 0x1C, 0x70, 0x1C, 0x70, 0x1C, 0x70, 0x1C, 0xE0, 0x1C,
0xE0, 0x1C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x1C, 0xE0, 0x1C,
0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0xE0, 0x1C, 0x1C, 0x00,
0xF0, 0x07, 0xC0, 0x37, 0x01, 0xB8, 0x0D, 0xC0, 0x6E, 0x03, 0xE0, 0xFF,
0x07, 0xFC, 0x1F, 0xF8, 0x33, 0xC1, 0x87, 0x0C, 0x3C, 0x60, 0xE3, 0x07,
0x18, 0x18, 0xC0, 0xC6, 0x06, 0x30, 0x71, 0x83, 0x8C, 0x38, 0x63, 0xC3,
0x3C, 0x1F, 0xC0, 0xFC, 0x07, 0x80, 0x00, 0x38, 0x0F, 0xC0, 0xFE, 0x1F,
0x01, 0xE0, 0x0E, 0x00, 0xE0, 0x0E, 0x00, 0x70, 0x03, 0x00, 0x38, 0x01,
0xC0, 0x0E, 0x00, 0x60, 0x03, 0x80, 0x1C, 0x00, 0xE0, 0x07, 0x00, 0x1C,
0x00, 0xE0, 0x03, 0x80, 0x1E, 0x00, 0x78, 0x01, 0xF0, 0x07, 0xF8, 0x0F,
0xC0, 0x0E, 0xF8, 0x03, 0xF8, 0x0F, 0xF8, 0x31, 0xF0, 0xC1, 0xE3, 0x03,
0xCC, 0x07, 0xB0, 0x0E, 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0, 0x03, 0xC0,
0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x1F, 0x00, 0x7C, 0x01, 0xF0,
0x0E, 0xC0, 0x7B, 0x03, 0xCC, 0x1E, 0x31, 0xF0, 0xFF, 0x83, 0xF8, 0x0F,
0x80, 0x00, 0x00, 0x0E, 0x00, 0xFC, 0x03, 0xF8, 0x1F, 0x00, 0x78, 0x00,
0xE0, 0x03, 0x80, 0x0E, 0x00, 0x1C, 0x00, 0x30, 0x00, 0xE0, 0x01, 0xC0,
0x0F, 0xFF, 0xDF, 0xFF, 0xBF, 0xFF, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00,
0x70, 0x00, 0xE0, 0x00, 0xE0, 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xF0, 0x01,
0xFE, 0x00, 0xFC, 0x00, 0x38, 0x3E, 0x1F, 0x0F, 0x87, 0x03, 0x81, 0xC0,
0xE0, 0x70, 0xFF, 0xFF, 0xFF, 0xE7, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38,
0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x00,
0x00, 0x38, 0x03, 0xF0, 0x0F, 0xE0, 0x7C, 0x01, 0xE0, 0x03, 0x80, 0x0E,
0x00, 0x38, 0x00, 0x70, 0x01, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0E, 0x00,
0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0xE0, 0xFE, 0xC1, 0xFD, 0xC3, 0xFB,
0x80, 0x73, 0x80, 0xE3, 0x81, 0xC7, 0xC3, 0x87, 0xE7, 0x03, 0xFE, 0x03,
0xFC, 0x00, 0xF8, 0x38, 0xE7, 0x1C, 0xE3, 0x9C, 0x73, 0x8E, 0x71, 0xCE,
0x39, 0xC7, 0xFF, 0xFF, 0xFF, 0xFF, 0x9C, 0x73, 0x8E, 0x71, 0xCE, 0x39,
0xC7, 0x38, 0xE7, 0x1C, 0xE3, 0x9C, 0x73, 0x8E, 0x71, 0xCE, 0x39, 0xC7,
0x38, 0xE7, 0x1C, 0xE3, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC,
0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1,
0xC3, 0x87, 0x0E, 0x1C, 0x38, 0x70, 0xE1, 0xC3, 0x87, 0x0E, 0x1C, 0x38,
0xE1, 0xDF, 0x3C, 0x70, 0x38, 0x0F, 0x1C, 0x0F, 0x0E, 0x0F, 0x07, 0x0F,
0x03, 0x8E, 0x01, 0xCE, 0x00, 0xEE, 0x00, 0x7E, 0x00, 0xFF, 0x00, 0x7F,
0xE0, 0x3F, 0xFC, 0x07, 0x1F, 0x03, 0x83, 0xC1, 0xC0, 0xF0, 0xE0, 0x38,
0x70, 0x0E, 0x38, 0x07, 0x1C, 0x01, 0xCE, 0x00, 0xE7, 0x00, 0x73, 0x80,
0x39, 0xC0, 0x1C, 0xE0, 0x0E, 0x70, 0x07, 0x38, 0x03, 0x9C, 0x01, 0x8E,
0x01, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0,
0x70, 0x38, 0x1C, 0x0E, 0x07, 0x03, 0x81, 0xC0, 0xE0, 0x70, 0x38, 0x1C,
0x0E, 0x07, 0x03, 0x81, 0xC0, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0xFC, 0x00,
0x0F, 0xFE, 0x00, 0xFF, 0xFC, 0x07, 0x8C, 0x78, 0x3C, 0x30, 0xF0, 0xE0,
0xC1, 0xE7, 0x03, 0x03, 0x98, 0x0C, 0x07, 0xE0, 0x30, 0x1F, 0x80, 0xC0,
0x7E, 0x03, 0x00, 0xF8, 0x0C, 0x03, 0xE0, 0x30, 0x0F, 0x80, 0xC0, 0x3E,
0x03, 0x00, 0xF8, 0x0C, 0x03, 0xE0, 0x30, 0x0F, 0x80, 0xC0, 0x3E, 0x03,
0x00, 0xF8, 0x0C, 0x03, 0xE0, 0x30, 0x0F, 0x80, 0xC0, 0x3E, 0x03, 0x00,
0xF8, 0x0C, 0x03, 0xE0, 0x30, 0x0F, 0x80, 0xC0, 0x3E, 0x03, 0x00, 0xC0,
0xF8, 0x03, 0xF8, 0x0F, 0xF8, 0x31, 0xF0, 0xC1, 0xE3, 0x03, 0xCC, 0x07,
0xB0, 0x0E, 0xC0, 0x1B, 0x00, 0x7C, 0x01, 0xF0, 0x03, 0xC0, 0x0F, 0x00,
0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0,
0x0F, 0x00, 0x3C, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 0x00, 0x3C, 0x00, 0xC0,
0x00, 0x3F, 0x80, 0x00, 0x7F, 0xF8, 0x00, 0x3F, 0xFF, 0x80, 0x3E, 0x01,
0xF0, 0x1E, 0x00, 0x1E, 0x07, 0x00, 0x03, 0xC3, 0x80, 0x00, 0x79, 0xC0,
0x00, 0x0E, 0x70, 0x00, 0x01, 0xD8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F,
0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x3E, 0x00, 0x00,
0x0F, 0x80, 0x00, 0x03, 0xE0, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x77, 0x00,
0x00, 0x1D, 0xC0, 0x00, 0x0E, 0x38, 0x00, 0x07, 0x8F, 0x00, 0x03, 0xC1,
0xE0, 0x01, 0xE0, 0x3E, 0x01, 0xF0, 0x07, 0xFF, 0xF8, 0x00, 0x7F, 0xF8,
0x00, 0x03, 0xF8, 0x00, 0x1E, 0x00, 0xFC, 0x07, 0xF0, 0x33, 0xC1, 0x8F,
0x0C, 0x38, 0x60, 0xE3, 0x07, 0x18, 0x18, 0xC0, 0xC6, 0x06, 0x30, 0x71,
0x83, 0x8C, 0x1C, 0x61, 0xC3, 0x1C, 0x7F, 0xE7, 0xFC, 0x3F, 0xC0, 0x30,
0x01, 0x80, 0x0C, 0x00, 0x60, 0x03, 0x00, 0x18, 0x00, 0xC0, 0x06, 0x00,
0x00, 0x3F, 0x80, 0x00, 0x7F, 0xF8, 0x00, 0x3F, 0xFF, 0x80, 0x3E, 0x01,
0xF0, 0x1E, 0x00, 0x1E, 0x07, 0x00, 0x03, 0xC3, 0x80, 0x00, 0x79, 0xC0,
0x00, 0x0E, 0x70, 0x00, 0x01, 0xF8, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x1F,
0x80, 0x00, 0x03, 0xE0, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x3E, 0x00, 0x00,
0x0F, 0x80, 0x00, 0x03, 0xE0, 0x1C, 0x01, 0xD8, 0x0F, 0xE0, 0x77, 0x03,
0xFC, 0x19, 0xC0, 0x07, 0x8E, 0x38, 0x00, 0xF7, 0x07, 0x00, 0x1F, 0xC1,
0xE0, 0x03, 0xE0, 0x3E, 0x01, 0xF0, 0x03, 0xFF, 0xFC, 0x00, 0x7F, 0xFF,
0x00, 0x03, 0xF9, 0xC0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x18, 0x00, 0x00,
0x0E, 0x00, 0x00, 0x01, 0x00, 0x3C, 0x00, 0x1F, 0x00, 0x0F, 0xC0, 0x07,
0xE0, 0x03, 0xB8, 0x01, 0xDC, 0x00, 0xEC, 0x00, 0x7E, 0x00, 0xFF, 0x00,
0x7F, 0xE0, 0x3F, 0xFC, 0x07, 0x1F, 0x03, 0x83, 0xC1, 0xC0, 0xF0, 0xE0,
0x38, 0x70, 0x0E, 0x38, 0x07, 0x1C, 0x01, 0xCE, 0x00, 0xE7, 0x00, 0x73,
0x80, 0x39, 0xC0, 0x1C, 0xE0, 0x0E, 0x70, 0x07, 0x38, 0x03, 0x9C, 0x01,
0x8E, 0x01, 0xC0 };
const GFXglyph GrenadierNF18pt7bGlyphs[] PROGMEM = {
{ 0, 2, 3, 4, 1, -2 }, // 0x2E '.'
{ 1, 9, 30, 11, 1, -26 }, // 0x2F '/'
{ 35, 26, 27, 28, 1, -26 }, // 0x30 '0'
{ 123, 6, 27, 8, 1, -26 }, // 0x31 '1'
{ 144, 15, 27, 16, 1, -26 }, // 0x32 '2'
{ 195, 11, 27, 13, 1, -26 }, // 0x33 '3'
{ 233, 13, 27, 15, 1, -26 }, // 0x34 '4'
{ 277, 11, 27, 13, 1, -26 }, // 0x35 '5'
{ 315, 19, 28, 21, 1, -26 }, // 0x36 '6'
{ 382, 14, 27, 16, 1, -26 }, // 0x37 '7'
{ 430, 19, 27, 21, 1, -26 }, // 0x38 '8'
{ 495, 19, 27, 21, 1, -26 }, // 0x39 '9'
{ 560, 2, 11, 4, 1, -10 }, // 0x3A ':'
{ 563, 5, 14, 7, 1, -10 }, // 0x3B ';'
{ 572, 13, 15, 15, 1, -19 }, // 0x3C '<'
{ 597, 13, 8, 15, 1, -16 }, // 0x3D '='
{ 610, 13, 15, 15, 1, -19 }, // 0x3E '>'
{ 635, 10, 27, 12, 1, -26 }, // 0x3F '?'
{ 669, 24, 27, 26, 1, -27 }, // 0x40 '@'
{ 750, 16, 26, 17, 1, -25 }, // 0x41 'A'
{ 802, 13, 27, 15, 1, -26 }, // 0x42 'B'
{ 846, 13, 27, 15, 1, -26 }, // 0x43 'C'
{ 890, 14, 27, 16, 1, -26 }, // 0x44 'D'
{ 938, 15, 27, 17, 1, -26 }, // 0x45 'E'
{ 989, 9, 27, 11, 1, -26 }, // 0x46 'F'
{ 1020, 15, 27, 16, 1, -26 }, // 0x47 'G'
{ 1071, 11, 27, 12, 1, -26 }, // 0x48 'H'
{ 1109, 2, 27, 4, 1, -26 }, // 0x49 'I'
{ 1116, 7, 32, 4, -3, -26 }, // 0x4A 'J'
{ 1144, 17, 27, 19, 1, -26 }, // 0x4B 'K'
{ 1202, 9, 27, 10, 1, -26 }, // 0x4C 'L'
{ 1233, 22, 27, 24, 1, -26 }, // 0x4D 'M'
{ 1308, 14, 27, 16, 1, -26 }, // 0x4E 'N'
{ 1356, 26, 27, 28, 1, -26 }, // 0x4F 'O'
{ 1444, 13, 27, 15, 1, -26 }, // 0x50 'P'
{ 1488, 26, 31, 28, 1, -26 }, // 0x51 'Q'
{ 1589, 17, 27, 19, 1, -26 } }; // 0x52 'R'
const GFXfont GrenadierNF18pt7b PROGMEM = {
(uint8_t *)GrenadierNF18pt7bBitmaps,
(GFXglyph *)GrenadierNF18pt7bGlyphs,
0x2E, 0x52, 42 };
// Approx. 1913 bytes
static const unsigned char PROGMEM SPLASH[]= {
B00000000,B00000000,B00000000,B00000000,B00000000,B01100000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000001,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000111,B00011110,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00001110,B00000111,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00111000,B01100001,B11000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B11100001,B11111000,B01110000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000011,B10000111,B11111110,B00011100,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00001110,B00001111,B11111111,B00001111,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00011100,B00111111,B11111111,B11000011,B10000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B01110000,B11111111,B11111111,B11110000,B11100000,B00000000,B00000000,B00000000,
B11111111,B11111111,B11111111,B11000001,B11111111,B11111111,B11111000,B00111111,B11111111,B11111111,B11110000,
B10000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00010000,
B10111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11010000,
B10100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01010000,
B10100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01010000,
B10100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01010000,
B10100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01010000,
B10100111,B00000011,B10000000,B00000000,B11000000,B00000000,B00101110,B00000011,B00000001,B11000000,B01010000,
B10100111,B00000111,B11100000,B00000000,B11100000,B00000000,B11101111,B10000011,B00000110,B00110000,B01010000,
B10100100,B00001101,B10110000,B00000000,B11110000,B00000001,B11101100,B11000011,B00011000,B00001100,B01010000,
B10100100,B00011001,B10011000,B00000000,B11100000,B00000011,B01101100,B00100011,B00010000,B00000100,B01010000,
B10100100,B00010001,B10001000,B00000000,B11100000,B00000110,B01101100,B00110011,B00100000,B00000010,B01010000,
B10101111,B10010001,B10001000,B00000001,B11110000,B00001100,B01101100,B00010011,B00100000,B00000010,B01010000,
B10101100,B00110001,B10001100,B00000000,B11011100,B00011000,B01101100,B00010011,B00100000,B00000010,B01010000,
B10101100,B00110001,B10001100,B00000000,B11000100,B00010000,B01101100,B00011011,B01100000,B00000011,B01010000,
B10101100,B00110001,B10001100,B00000000,B11000110,B00010000,B01101100,B00010011,B00100000,B00000010,B01010000,
B10101100,B00110001,B10001100,B00000000,B11000010,B00011111,B11111100,B00010011,B00100000,B00000010,B01010000,
B10101100,B00110001,B10001100,B00000000,B11000010,B00110000,B01101100,B00110011,B00100000,B00000010,B01010000,
B10101100,B00110001,B10001100,B00000000,B11000011,B00110000,B01101100,B00100011,B00010000,B00000100,B01010000,
B10101100,B00110001,B10001100,B00000000,B11000010,B00110000,B01101100,B11000011,B00011000,B00001100,B01010000,
B10101100,B00110001,B10001100,B00000000,B11000010,B00110000,B01101111,B10000011,B00000110,B00110000,B01010000,
B10101100,B00110001,B10001100,B00000000,B11000110,B00110000,B01101110,B00000011,B00000001,B11000000,B01010000,
B10100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01010000,
B10100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01010000,
B10100000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B01010000,
B10111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11111111,B11010000,
B10000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00010000,
B11111111,B11111111,B11111111,B11000001,B11111111,B11111111,B11111000,B00111111,B11111111,B11111111,B11110000,
B00000000,B00000000,B00000000,B01110000,B11111111,B11111111,B11100000,B11100000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00011100,B00111111,B11111111,B11000011,B10000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00001110,B00001111,B11111111,B00001111,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000011,B10000011,B11111100,B00011100,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B11100000,B11111000,B01110000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00111000,B01100001,B11000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00001110,B00000111,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000111,B10011100,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B11110000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B01100000,B00000000,B00000000,B00000000,B00000000,B00000000,
};
No preview (download only).
Comments