Cameron Coward
Published © CC BY-NC-SA

KaboomBox - an RFID 8-Track Player

A vintage Panasonic TNT 8-track player converted to play MP3 files triggered by RFID tags.

IntermediateFull instructions provided8 hours1,081
KaboomBox - an RFID 8-Track Player

Things used in this project

Hardware components

Raspberry Pi Pico
Raspberry Pi Pico
×1
DFPlayer - A Mini MP3 Player
DFRobot DFPlayer - A Mini MP3 Player
×1
HiLetgo 0.95" SSD1331 65K OLED
×1
HiLetgo PN532 RFID Reader
×1

Software apps and online services

Arduino IDE
Arduino IDE
Fusion
Autodesk Fusion

Hand tools and fabrication machines

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

Story

Read more

Custom parts and enclosures

batterylid7_cnzldWAtxl.STL

lcd_mount5_zNviEYhOP6.STEP

mainboardmount_RIK6k6cj0E.STEP

sd_mount2_La782f7OKi.STEP

usb_mount3_AiXZYn0aSF.STEP

volumemountnew3_HchaAfKOCd.STEP

Schematics

Fritzing Schematic

Code

8-track.ino

Arduino
The main code
/***************************************************

KABOOM BOX by Cameron Coward (cameroncoward.com)

An RFID-controlled music device in a vintage
Panasonic "TNT" 8 track player.

Music stored on DFPlayer Mini SD card,
then folders selected based on scanned RFID

Works with MIFARE Classic 1K (ISO 14443A 13.56MHz) tags

-Raspberry Pi Pico Dev Board
-HiLetgo PN532 v3 RFID Scanner
-HiLetgo SSD1331 0.95" 65k SPI OLED Display
-DFPlayer Mini MP3 Player/Amplifier

 ****************************************************/

#include <SPI.h>                  // for display communication
#include <Wire.h>                 // for RFID communication
#include <DFRobotDFPlayerMini.h>  // for DFPlayer Mini
#include <Adafruit_GFX.h>         // for drawing graphics
#include <Adafruit_SSD1331.h>     // for HiLetgo SSD1331 display
#include <PN532_I2C.h>            // for PN532 RFID
#include <PN532.h>                // for PN532 RFID
#include <NfcAdapter.h>           // for PN532 RFID
#include "iconSet.h"              // custom icons and logo

// For display
#define sclk 15                     // SCL on HiLetgo display
#define mosi 14                     // SDA on HiLetgo display
#define cs   11                     // CS on HiLetgo display
#define rst  13                     // RES on HiLetgo display
#define dc   12                     // DC on HiLetgo display

#define BUTTON 2

// Color definitions
#define	BLACK           0x0000
#define	BLUE            0x001F
#define	RED             0xF800
#define	GREEN           0x07E0
#define CYAN            0x07FF
#define MAGENTA         0xF81F
#define YELLOW          0xFFE0
#define WHITE           0xFFFF
#define PINK            0xF810

String tagId = "None";              // this will be filled by each scanned tag's ID
String previousId = "";             // this will store the previously scanned tag's ID to prevent playing the same tag over and over

String tagList[3] = {               // a list of every tag ID we want to actually use (can add more)
  "3A 65 75 BD",
  "8A 31 75 BD",
  "7A D8 75 BD"
};

String nameList[3] = {              // a list of names for each playlist/genre/album (order must match tagList)
  "  LOVIN",                        // spacing is important for centering, as are the number of characters. 9 characters is good, spaces preceding to center
  " HIP HOP",
  "  OLDIES"
};


unsigned long lastTime;             // records millis each time we scan a tag, so we only scan at set intervals
unsigned long lastTimeButton;       // records millis each time we skip a song, to debounce button
unsigned long lastTimeVol;          // records millis each time we skip a song, keeps from constantly refresshing if hovering on edge of threshold
int scanTries = 0;                  // if scan fails, we can try a few times before stopping the music
int setVolume = 25;                 // the volume for the DFPlayer Mini (0-30)
bool isPlaying = false;

Adafruit_SSD1331 display = Adafruit_SSD1331(cs, dc, mosi, sclk, rst);   // initialize the HiLetgo SSD1331 display
DFRobotDFPlayerMini player;                                             // initialize the DFPlayer Mini
PN532_I2C pn532_i2c(Wire);                                              // initialize the RFID scanner
NfcAdapter nfc = NfcAdapter(pn532_i2c);                                 // initialize the RFID scanner (don't know why it is two separate things)

void setup(void) {
  Serial1.begin(9600);                                                  // hardware serial port for talking to DFPlayer Mini

  pinMode(BUTTON, INPUT_PULLUP);                                        // for "next track" button

  display.begin();                                                      // start display and draw a black screen
  display.fillScreen(BLACK);
  nfc.begin();                                                          // start RFID scanner

  delay(500);                                                           // wait for those things to start

  lastTime = millis();                                                  // record time
  lastTimeButton = millis();                                            // record time again
  lastTimeVol = millis();                                               // record time again, again

  if (player.begin(Serial1)) {                                          // hopefully DFPlayer starts properly
    
  } else {
    display.setCursor(22, 26);
    display.setTextColor(YELLOW);
    display.setTextSize(1);
    display.print("Failed Start");
  }
  drawLogo();                                                           // draw the "kaboom box" logo
  delay(5000);                                                          // wait for users to appreciate the logo
  display.fillScreen(BLACK);
  setVolume = analogRead(A0) / 34;
  updateVol();                                                          // set the volume and draw the volume circle
  updateIcon(99);                                                       // draw the waiting icon
  delay(500);                                                           // wait to make sure everything is peachy
}

void loop() {
  if ((millis() - lastTime) > 3000) {                                           // only lets us check a tag once per second (trying too frequently may or may not cause issues)
    lastTime = millis();
    scanTag();
  }

  if ((digitalRead(BUTTON) == LOW) && ((millis() - lastTimeButton) > 1000)) {   // only lets us skip the song once per second (dirty debounce)
    lastTimeButton = millis();
    player.next();
  }

  if ((millis() - lastTimeVol) > 50) {                                           // only lets us check a tag once per second (trying too frequently may or may not cause issues)
    lastTimeVol = millis();
    int newVolume = analogRead(A0) / 34;
    if (newVolume != setVolume) {
      setVolume = newVolume;
      updateVol();
    }
  }

}

void scanTag() {                                    // attempts to scan a tag
  if (nfc.tagPresent()) {                           // true if ANY tag scans
    NfcTag tag = nfc.read();                        // read the tag data
    tagId = tag.getUidString();                     // get tag's ID
    playTag(tagId);                                 // tries to play the scanned tag ID
    scanTries = 0;                                  // reset tries counter
  } else if (isPlaying == true) {
    if (scanTries > 0) {                            // increase tries counter (so music doesn't stop for a misread)
      player.stop();                                // stops playing all music
      isPlaying = false;
      updateVol();                                  // first clears the screen, then redraws the volume circle
      updateIcon(99);                               // waiting icon (any number greater than the tag array will show the waiting icon)
      previousId = "";                              // so we can restart the same tag, even if we just stopped it
      scanTries = 0;                                // resets tries counter
    }
    scanTries++;                                    // increments tries counter
  } else {

  }
}

void playTag(String scannedId) {                    // checks the tag after successful scan
  if (scannedId == previousId) {                    // doesn't do anything if we're already playing that tag
  } else {
    previousId = scannedId;                         // remembers the currently playing tag
    for (int i = 0; i < sizeof(tagList); i++) {     // check if tag matches any we stored in the array
      if (scannedId == tagList[i]) {
        player.stop();                             
        player.loopFolder(i+1);                     // plays the folder of matching the array entry (array index + 1, since folders start at 1 and not 0)
        isPlaying = true;
        updateIcon(i);                              // updates the playing icon
        break;                                      // exits the for loop so we don't keep checking extra tags
      }
    }
  }
}

void updateVol() {                                  // updates player volume and draws volume circle
  player.volume(setVolume);
  volDots();
}

void updateIcon(int icon){                          // draws the icon for waiting or music, with genre label defined in the array at the top
  display.fillCircle(48, 32, 22, BLACK);
  if (icon < sizeof(tagList)) {                     // checks if "icon" variable is within the array of tags
    display.drawBitmap(30,16,music, 32, 32, PINK);  // places the music note icon
    display.setCursor(22, 26);
    display.setTextColor(YELLOW);
    display.setTextSize(1);
    display.print(nameList[icon]);                  // prints the genre from the list
  } else {
    display.drawBitmap(32,16,wait, 32, 32, WHITE);  // places the waiting icon if "icon" variable is anything more than the number of array elements
  }
}

void volDots() {
  display.fillCircle(48, 4, 1, BLACK);
  display.fillCircle(64, 9, 1, BLACK);
  display.fillCircle(75, 23, 2, BLACK);
  display.fillCircle(75, 41, 2, BLACK);
  display.fillCircle(64, 55, 3, BLACK);
  display.fillCircle(48, 60, 3, BLACK);
  display.fillCircle(32, 55, 4, BLACK);
  display.fillCircle(21, 41, 4, BLACK);
  display.fillCircle(21, 23, 5, BLACK);
  display.fillCircle(32, 9, 6, BLACK);

  if (setVolume > 0) {display.fillCircle(48, 4, 1, GREEN);}
  if (setVolume > 2) {display.fillCircle(64, 9, 1, GREEN);}
  if (setVolume > 5) {display.fillCircle(75, 23, 2, GREEN);}
  if (setVolume > 8) {display.fillCircle(75, 41, 2, GREEN);}
  if (setVolume > 11) {display.fillCircle(64, 55, 3, GREEN);}
  if (setVolume > 14) {display.fillCircle(48, 60, 3, GREEN);}
  if (setVolume > 17) {display.fillCircle(32, 55, 4, GREEN);}
  if (setVolume > 20) {display.fillCircle(21, 41, 4, GREEN);}
  if (setVolume > 23) {display.fillCircle(21, 23, 5, GREEN);}
  if (setVolume > 26) {display.fillCircle(32, 9, 6, GREEN);}
}

void drawLogo() {                   // draws the "kaboom box" logo in three parts (more efficient than a full-color bitmap)
  display.drawBitmap(16,0,logo1, 64, 64, PINK);
  display.drawBitmap(16,0,logo2, 64, 64, YELLOW);
  display.drawBitmap(16,0,logo3, 64, 64, RED);
}

iconSet.h

Arduino
The file containing all of the icon images
#ifndef ICONSETS_H
#define ICONSETS_H

const unsigned char wait [] PROGMEM = {
0x00, 0x0b, 0xd0, 0x00, 
0x00, 0x3f, 0xfc, 0x20, 
0x00, 0xff, 0xff, 0xe0, 
0x03, 0xf0, 0x0f, 0xe0, 
0x07, 0x80, 0x01, 0xe0, 
0x0f, 0x00, 0x01, 0xf0, 
0x1e, 0x03, 0x03, 0xd0, 
0x1c, 0x03, 0x00, 0x00, 
0x38, 0x03, 0x00, 0x00, 
0x30, 0x03, 0x00, 0x00, 
0x70, 0x03, 0x00, 0x06, 
0x60, 0x03, 0x00, 0x0e, 
0xe0, 0x03, 0x00, 0x04, 
0x60, 0x03, 0x00, 0x00, 
0xe0, 0x03, 0x00, 0x02, 
0xe0, 0x03, 0x00, 0x03, 
0xc0, 0x03, 0xc0, 0x07, 
0xe0, 0x01, 0xe0, 0x00, 
0xe0, 0x00, 0x7c, 0x00, 
0x60, 0x00, 0x1e, 0x04, 
0x60, 0x00, 0x07, 0x86, 
0x70, 0x00, 0x01, 0x86, 
0x70, 0x00, 0x00, 0x04, 
0x38, 0x00, 0x00, 0x00, 
0x1c, 0x00, 0x00, 0x38, 
0x1c, 0x00, 0x00, 0x38, 
0x0f, 0x00, 0x00, 0x30, 
0x07, 0x80, 0x01, 0x80, 
0x03, 0xe0, 0x03, 0x80, 
0x01, 0xfc, 0x33, 0x00, 
0x00, 0x3c, 0x78, 0x00, 
0x00, 0x0c, 0x20, 0x00
};

const unsigned char music [] PROGMEM = {
0x00, 0x00, 0x00, 0x1e, 
0x00, 0x00, 0x0f, 0xff, 
0x00, 0x07, 0xff, 0xff, 
0x00, 0x7f, 0xff, 0xff, 
0x00, 0x7f, 0xff, 0xff, 
0x00, 0x7f, 0xff, 0xff, 
0x00, 0x7f, 0xff, 0xff, 
0x00, 0x7f, 0xff, 0xff, 
0x00, 0x7f, 0xff, 0xff, 
0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x01, 0xff, 
0x00, 0x70, 0x03, 0xff, 
0x00, 0x70, 0x07, 0xff, 
0x1f, 0xf0, 0x07, 0xff, 
0x3f, 0xf0, 0x0f, 0xff, 
0x7f, 0xf0, 0x0f, 0xff, 
0xff, 0xf0, 0x07, 0xff, 
0xff, 0xf0, 0x07, 0xfe, 
0xff, 0xf0, 0x07, 0xfe, 
0xff, 0xe0, 0x03, 0xfc, 
0x7f, 0xe0, 0x00, 0xf8, 
0x7f, 0xe0, 0x00, 0x00, 
0x3f, 0xc0, 0x00, 0x00, 
0x0f, 0x00, 0x00, 0x00
};

const unsigned char logo1 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x80, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x80, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x0c, 0xfd, 0xc0, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x3e, 0xec, 0x80, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x3f, 0x64, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x77, 0x70, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x0f, 0x73, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x30, 0x1f, 0xbf, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x38, 0x1f, 0x9e, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x3b, 0xb9, 0x80, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x3f, 0xdf, 0x80, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x1f, 0xef, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x9e, 0xe4, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x03, 0xcf, 0xe0, 0x00, 0x00, 0x00, 0x00, 
0x07, 0x07, 0xef, 0xc0, 0x00, 0x00, 0x00, 0x00, 
0x07, 0x3e, 0xf3, 0x80, 0x00, 0x00, 0x00, 0x00, 
0x07, 0xf1, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x03, 0xf3, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x03, 0xfb, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x01, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x01, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

const unsigned char logo2 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x03, 0xe3, 0xfe, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x07, 0xf1, 0xfe, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x0f, 0xf9, 0xc0, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x0f, 0x3b, 0xc0, 0x00, 
0x00, 0x00, 0x00, 0x03, 0xee, 0x19, 0x80, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xef, 0x18, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x0f, 0xf7, 0xf8, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x0e, 0x67, 0xf0, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x0e, 0xf9, 0xe0, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0x98, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xb0, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

const unsigned char logo3 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xc8, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x38, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x30, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x01, 0x80, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x7f, 0xb8, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xff, 0x18, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x40, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x07, 0x3f, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x0f, 0xbf, 0x80, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x3f, 0x9f, 0x80, 0x00, 
0x00, 0x00, 0x00, 0x00, 0xff, 0xdf, 0xc0, 0x00, 
0x00, 0x00, 0x00, 0x03, 0xff, 0xef, 0xc0, 0x00, 
0x00, 0x00, 0x00, 0x07, 0xff, 0xef, 0xc0, 0x00, 
0x00, 0x00, 0x00, 0x1f, 0xff, 0xf7, 0x80, 0x00, 
0x00, 0x00, 0x00, 0x7f, 0xff, 0xf2, 0x00, 0x00, 
0x00, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x00, 0x00, 
0x00, 0x00, 0x03, 0xff, 0xff, 0xe0, 0x00, 0x00, 
0x00, 0x00, 0x0f, 0xff, 0xff, 0xc0, 0x00, 0x00, 
0x00, 0x00, 0x3f, 0xff, 0xff, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x3f, 0xff, 0xfc, 0x00, 0x00, 0x00, 
0x00, 0x01, 0xbf, 0xff, 0xf0, 0x00, 0x00, 0x00, 
0x00, 0x07, 0xdf, 0xff, 0xe0, 0x00, 0x00, 0x00, 
0x00, 0x0f, 0xdf, 0xff, 0x80, 0x00, 0x00, 0x00, 
0x00, 0x0f, 0xef, 0xfe, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x07, 0xe7, 0xfc, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x07, 0xf7, 0xf0, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x03, 0xfb, 0xc0, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x01, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x01, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};



#endif

Credits

Cameron Coward

Cameron Coward

17 projects • 1398 followers
Writer for Hackster News. Proud husband and dog dad. Maker and serial hobbyist. Check out my YouTube channel: Serial Hobbyism

Comments