John Bradnam
Published © GPL3+

Art Deco FM Radio

A rechargeable Art Deco Style FM Radio that copies the design of a 1936 AWA Radiolette.

IntermediateFull instructions provided12 hours602
Art Deco FM Radio

Things used in this project

Hardware components

Arduino Pro Mini 328 - 5V/16MHz
SparkFun Arduino Pro Mini 328 - 5V/16MHz
×1
Other components
See https://www.thingiverse.com/thing:2826999 for component list
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

3D Printer (generic)
3D Printer (generic)
Soldering iron (generic)
Soldering iron (generic)

Story

Read more

Custom parts and enclosures

STL Files

Files for 3D printing

Schematics

Schematic

PCB

Eagle Files

Schematic & PCB in Eagle format

Code

FMRadio.ino

C/C++
    /////////////////////////////////////////////////////////////////
   //           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);
  }
}

GrenadierNF15pt7b.h

C Header File
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

GrenadierNF18pt7b.h

C Header File
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

splash.h

C Header File
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,
};

Adafruit-GFX-Library-master.zip

Arduino
Adafruit GFX Library
No preview (download only).

Adafruit-PCD8544-Nokia-5110-LCD-library-master.zip

Arduino
Adafruit PCD8544 Nokia 5110 LCD library
No preview (download only).

encoder-master.zip

Arduino
Encoder library
No preview (download only).

TEA5767-master.zip

Arduino
TEA5767 library
No preview (download only).

TimerOne-master.zip

Arduino
TimerOne library
No preview (download only).

Credits

John Bradnam

John Bradnam

145 projects β€’ 177 followers
Thanks to educ8s.

Comments