Welcome to Hackster!
Hackster is a community dedicated to learning hardware, from beginner to pro. Join us, it's free!
smi1100
Published © GPL3+

Kitten or tiger?

Acrylic panels illuminated with led lights and and with an impressive sound.

IntermediateFull instructions provided64
Kitten or tiger?

Things used in this project

Hardware components

Arduino Nano R3
Arduino Nano R3
×1
DFPlayer - A Mini MP3 Player
DFRobot DFPlayer - A Mini MP3 Player
×1
Pushbutton Switch, Momentary
Pushbutton Switch, Momentary
×4
Capacitor 100 µF
Capacitor 100 µF
×1
Resistor 330 ohm
Resistor 330 ohm
×1
Resistor 1k ohm
Resistor 1k ohm
×1
Breadboard (generic)
Breadboard (generic)
×1
LED Strip, NeoPixel Digital RGB
LED Strip, NeoPixel Digital RGB
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Laser cutter (generic)
Laser cutter (generic)
Soldering iron (generic)
Soldering iron (generic)

Story

Read more

Schematics

Fritzing

Code

Arduino

Arduino
/*

Acryl Sign
  by smi1100 - 12/09/2022
    
pins:
  LED: 6
  Buttons: 7, 8, 9, 10
  DFPlayerMini: 11, 12
  
libraries:
  - Adafruit_NeoPixel.h
  - Arduino.h
  - SoftwareSerial.h
  - DFRobotDFPlayerMini.h
  
*/


// -------- DFPlayerMini -------- 

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(11, 12);  // RX, TX
DFRobotDFPlayerMini myDFPlayer;


// -------- Neopixel -------- 

#include <Adafruit_NeoPixel.h>
#define LED_PIN    6                      // Which pin on the Arduino is connected to the NeoPixels?
#define LED_COUNT 8                       // How many NeoPixels are attached to the Arduino?
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);


// -------- Buttons -------- 

const int buttonPin_tiger = 7;
boolean newButtonState_tiger;

const int buttonPin_death_star = 8;
boolean newButtonState_death_star;

const int buttonPin_front = 9;
boolean oldButtonState_front = HIGH;
boolean newButtonState_front;
int strip_color_front = 1;

const int buttonPin_back = 10;
boolean oldButtonState_back = HIGH;
boolean newButtonState_back;
int strip_color_back = 1;


void setup()
{  
  delay(500);

  // -------- DFPlayerMini --------
  
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
  delay(3000);
  Serial.println();
  Serial.println("Initializing DFPlayer ... ");
  
  if (!myDFPlayer.begin(mySoftwareSerial,true,false))
  {
    Serial.println("Unable to begin:");
    Serial.println("1.Please recheck the connection");
    Serial.println("2.Please insert the SD card");
    while(true)
    {
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println("DFPlayer Mini online.");
  
  myDFPlayer.volume(20);  //Set volume value. From 0 to 30
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);

  Serial.print("  MP3 Player Status: ");Serial.println(myDFPlayer.readState()); //read mp3 state
  Serial.print("  MP3 Player Volume: ");Serial.println(myDFPlayer.readVolume()); //read current volume
  Serial.print("  MP3 Player EQ: ");Serial.println(myDFPlayer.readEQ()); //read EQ setting
  Serial.print("  MP3 Player on SD: ");Serial.println(myDFPlayer.readFileCounts()); //read all file counts in SD card

  int AnzahlDateien_mp3 = myDFPlayer.readFileCountsInFolder("mp3");
  if (AnzahlDateien_mp3 == -1) Serial.println("Der Ordner enth\u00e4lt keine Musikdateien");
  else Serial.println(("     - ") + String(AnzahlDateien_mp3) + " Dateien im Ordner mp3");
  
  if (myDFPlayer.available())
  {
    printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
  }

  myDFPlayer.playMp3Folder(1);
  delay(1000);
  
  // -------- Neopixel --------
  
  strip.begin();
  strip.show(); 
  strip.setBrightness(255);                // Set BRIGHTNESS to about 1/5 (max = 255)

  // -------- Buttons --------

  pinMode(buttonPin_front, INPUT_PULLUP);
  pinMode(buttonPin_back, INPUT_PULLUP);
  pinMode(buttonPin_tiger, INPUT_PULLUP);
  pinMode(buttonPin_death_star, INPUT_PULLUP);
  
  Serial.println("Setup complete");
  Serial.println("");
  delay(500);
}

void loop()
{
  // -------- Button front --------
  
  newButtonState_front = digitalRead(buttonPin_front);
  
  if((newButtonState_front == LOW) && (oldButtonState_front == HIGH))   // Button not pressed = LOW
  {
    delay(20);                            // Short delay to debounce button.
    newButtonState_front = digitalRead(buttonPin_front); // Check if button is still low after debounce.
    
    if(newButtonState_front == LOW) // Yes, still low
    {        
        if(strip_color_front > 9) strip_color_front = 1;
        Serial.print("strip color front number: "); Serial.println(strip_color_front);
        switch (strip_color_front)
        {
          case 1:
            Serial.println("Strip color front RED");
            Serial.println("");
            for (int i = 0; i <= 3;i++)
            {
              strip.setPixelColor(i, 255, 0, 0);    //strip.setPixelColor(n, red, green, blue);
            }
            strip.show();
            break;  
    
          case 2:
            Serial.println("Strip color front GREEN");
            Serial.println("");
            for (int i = 0; i <= 3;i++)
            {
              strip.setPixelColor(i, 0, 255, 0);    //strip.setPixelColor(n, red, green, blue);
            }
            strip.show();
            break;  
    
          case 3:
            Serial.println("Strip color front BLUE");
            Serial.println("");
            for (int i = 0; i <= 3;i++)
            {
              strip.setPixelColor(i, 0, 0, 255);    //strip.setPixelColor(n, red, green, blue);
            }
            strip.show(); 
            break; 
        
          case 4:
            Serial.println("Strip color front WHITE");
            Serial.println("");
            for (int i = 0; i <= 3;i++)
            {
              strip.setPixelColor(i, 255, 255, 255);    //strip.setPixelColor(n, red, green, blue);
            }
            strip.show(); 
            break;

          case 5:
            Serial.println("Strip color front PINK");
            Serial.println("");
            for (int i = 0; i <= 3;i++)
            {
              strip.setPixelColor(i, 255, 20, 147);    //strip.setPixelColor(n, red, green, blue);
            }
            strip.show(); 
            break; 

          case 6:
            Serial.println("Strip color front YELLOW");
            Serial.println("");
            for (int i = 0; i <= 3;i++)
            {
              strip.setPixelColor(i, 255, 215,0);    //strip.setPixelColor(n, red, green, blue);
            }
            strip.show(); 
            break;        
        
          case 7:
            Serial.println("Strip color front OFF");
            Serial.println("");
            for (int i = 0; i <= 3;i++)
            {
              strip.setPixelColor(i, 0, 0,0);    //strip.setPixelColor(n, red, green, blue);
            }
            strip.show(); 
            break;     
                    
          case 8:
            Serial.println("Strip color front rainbow");
            Serial.println("");
            for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 256)
            {
              strip.rainbow(firstPixelHue);
              strip.show();
              Serial.print("firstPixelHue: ");Serial.println(firstPixelHue);
              delay(10);
              if (firstPixelHue == 327168) firstPixelHue = 0;
              
              newButtonState_front = digitalRead(buttonPin_front);
              newButtonState_back = digitalRead(buttonPin_back);
              if(newButtonState_front == HIGH || newButtonState_back == HIGH)
              {
                for (int i = 0; i <= 3;i++)
                {
                  strip.setPixelColor(i, 255, 0, 0);    //strip.setPixelColor(n, red, green, blue);
                }
                strip.show();
                   
                for (int i = 4; i <= 7;i++)
                {
                  strip.setPixelColor(i, 255, 0, 0);    //strip.setPixelColor(n, red, green, blue);
                }
                strip.show();
                strip_color_back = 1;
                                
                break;
              }
            }
            break;
        
        
          case 9:
            Serial.println("Strip color front color wipe");
            Serial.println("");
            int stopper = 0;
            while (stopper == 0)
            { 
              Serial.print("Stopper: ");Serial.println(stopper);
              for(int i=0; i<strip.numPixels(); i++)
              { 
                strip.setPixelColor(i, 255,   0,   0);         
                strip.show();
                newButtonState_front = digitalRead(buttonPin_front);
                newButtonState_back = digitalRead(buttonPin_back);
                if(newButtonState_front == HIGH || newButtonState_back == HIGH)
                {
                  stopper = 1;
                  break;
                }
                delay(200);                           
              }
              
              for(int i=0; i<strip.numPixels(); i++)
              { 
                strip.setPixelColor(i,   0, 255,   0);         
                strip.show();
                newButtonState_front = digitalRead(buttonPin_front);
                newButtonState_back = digitalRead(buttonPin_back);
                if(newButtonState_front == HIGH || newButtonState_back == HIGH)
                {
                  stopper = 1;
                  break;
                }
                delay(200);                           
              }
              
              for(int i=0; i<strip.numPixels(); i++)
              { 
                strip.setPixelColor(i,  0,   0, 255);         
                strip.show();
                newButtonState_front = digitalRead(buttonPin_front);
                newButtonState_back = digitalRead(buttonPin_back);
                if(newButtonState_front == HIGH || newButtonState_back == HIGH)
                {
                  stopper = 1;
                  break;
                }
                delay(200);                           
              }
                          
            }  
            for (int i = 0; i <= 3;i++)
            {
              strip.setPixelColor(i, 255, 0, 0);    //strip.setPixelColor(n, red, green, blue);
            }
            strip.show();
               
            for (int i = 4; i <= 7;i++)
            {
              strip.setPixelColor(i, 255, 0, 0);    //strip.setPixelColor(n, red, green, blue);
            }
            strip.show();
            strip_color_back = 1;
                        
            break;

        } // end of switch
        
        strip_color_front++;
    }
    
  }
  oldButtonState_front = newButtonState_front;


  // -------- Button back --------

  newButtonState_back = digitalRead(buttonPin_back);
    
  if((newButtonState_back == LOW) && (oldButtonState_back == HIGH))
  {
    delay(20);
    newButtonState_back = digitalRead(buttonPin_back);
    
    if(newButtonState_back == LOW)             
    {
        if(strip_color_back > 7) strip_color_back = 1;
        Serial.print("strip color back number: "); Serial.println(strip_color_back);
        switch (strip_color_back)
        {
          case 1:
            Serial.println("Strip color back RED");
            Serial.println("");
            for (int i = 4; i <= 7;i++)
            {
              strip.setPixelColor(i, 255, 0, 0);    //strip.setPixelColor(n, red, green, blue);
            }
            strip.show();
            break;  
    
          case 2:
            Serial.println("Strip color back GREEN");
            Serial.println("");
            for (int i = 4; i <= 7;i++)
            {
              strip.setPixelColor(i, 0, 255, 0);    //strip.setPixelColor(n, red, green, blue);
            }
            strip.show();
            break;  
    
          case 3:
            Serial.println("Strip color back BLUE");
            Serial.println("");
            for (int i = 4; i <= 7;i++)
            {
              strip.setPixelColor(i, 0, 0, 255);    //strip.setPixelColor(n, red, green, blue);
            }
            strip.show(); 
            break; 
        
          case 4:
            Serial.println("Strip color back WHITE");
            Serial.println("");
            for (int i = 4; i <= 7;i++)
            {
              strip.setPixelColor(i, 255, 255, 255);    //strip.setPixelColor(n, red, green, blue);
            }
            strip.show(); 
            break;

          case 5:
            Serial.println("Strip color back PINK");
            Serial.println("");
            for (int i = 4; i <= 7;i++)
            {
              strip.setPixelColor(i, 255, 20, 147);    //strip.setPixelColor(n, red, green, blue);
            }
            strip.show(); 
            break; 

          case 6:
            Serial.println("Strip color back YELLOW");
            Serial.println("");
            for (int i = 4; i <= 7;i++)
            {
              strip.setPixelColor(i, 255, 215,0);    //strip.setPixelColor(n, red, green, blue);
            }
            strip.show(); 
            break;

          case 7:
            Serial.println("Strip color front OFF");
            Serial.println("");
            for (int i = 0; i <= 3;i++)
            {
              strip.setPixelColor(i, 0, 0,0);    //strip.setPixelColor(n, red, green, blue);
            }
            strip.show(); 
            break;
        }
        strip_color_back++;
    }
  }
  oldButtonState_back = newButtonState_back;


 // -------- Button death star --------
  
  newButtonState_death_star = digitalRead(buttonPin_death_star);
    
  if(newButtonState_death_star == HIGH)
  {
    delay(20);
    newButtonState_death_star = digitalRead(buttonPin_death_star);
    Serial.println("");
    Serial.println("------------------------");
    Serial.println("Star Wars button pressed");
    
    if(newButtonState_death_star == HIGH)             
    {
      Serial.println("MP3 Star Wars INTRO playing");
      myDFPlayer.playMp3Folder(2);
      delay(1000);
      
      for (int j = 0; j < 120; j++)
      {
        strip.setBrightness(j);
        Serial.print("Death Star brightness = "); Serial.println(j);
        for (int i = 4; i < 8; i++)
        {
          strip.setPixelColor(i, 255, 255, 255);
        }
        strip.show();
        delay(130);
      }
      
      Serial.println("MP3 Star Wars ALARM playing");
      myDFPlayer.playMp3Folder(3);
      delay(1000);
      
      delay(4000);

      Serial.println("MP3 Star Wars FIRE playing");
      myDFPlayer.playMp3Folder(4);
      delay(1000);
      
      delay(3000);
      for (int i = 0; i < 4; i++)
      {
        strip.setPixelColor(i, 0, 255, 0);
      }
      strip.show();
      delay(6000);

      strip.clear();
      strip.show();
          
    }
  }

  // -------- Button tiger --------
  
  newButtonState_tiger = digitalRead(buttonPin_tiger);
    
  if(newButtonState_tiger == HIGH)
  {
    delay(20);
    newButtonState_tiger = digitalRead(buttonPin_tiger);
    Serial.println("");
    Serial.println("------------------------");
    Serial.println("Tiger button pressed");
       
    if(newButtonState_tiger == HIGH)             
    {         
      strip.clear();
      strip.show();
      delay (5000);
      
      Serial.println("MP3 Cat playing");
      myDFPlayer.playMp3Folder(5);
      delay(1000);

      Serial.println("MP3 Cat playing");
      myDFPlayer.playMp3Folder(5);
      delay(1000);

      delay(5000);

      for (int i = 0; i < 4; i++)
      {
        strip.setPixelColor(i, 0, 0, 255);
      }
      strip.show();
      
      Serial.println("MP3 Tiger playing");
      myDFPlayer.playMp3Folder(6);
      delay(1000);

      delay(4000);

      for (int i = 4; i < 8; i++)
      {
        strip.setPixelColor(i, 255, 0, 0);
      }
      strip.show();      
    }
  }
}


void colorWipe(uint32_t color, int wait)
{
  for(int i=0; i<strip.numPixels(); i++)
  { 
    strip.setPixelColor(i, color);         
    strip.show();                          
    delay(wait);                           
  }
}


void printDetail(uint8_t type, int value)
{
  switch (type)
  {
    case TimeOut:
      Serial.println(F("Time Out!"));
      break;
    case WrongStack:
      Serial.println(F("Stack Wrong!"));
      break;
    case DFPlayerCardInserted:
      Serial.println(F("Card Inserted!"));
      break;
    case DFPlayerCardRemoved:
      Serial.println(F("Card Removed!"));
      break;
    case DFPlayerCardOnline:
      Serial.println(F("Card Online!"));
      break;
    case DFPlayerUSBInserted:
      Serial.println("USB Inserted!");
      break;
    case DFPlayerUSBRemoved:
      Serial.println("USB Removed!");
      break;
    case DFPlayerPlayFinished:
      Serial.print(F("Number:"));
      Serial.print(value);
      Serial.println(F(" Play Finished!"));
      break;
    case DFPlayerError:
      Serial.print(F("DFPlayerError:"));
      switch (value)
      {
        case Busy:
          Serial.println(F("Card not found"));
          break;
        case Sleeping:
          Serial.println(F("Sleeping"));
          break;
        case SerialWrongStack:
          Serial.println(F("Get Wrong Stack"));
          break;
        case CheckSumNotMatch:
          Serial.println(F("Check Sum Not Match"));
          break;
        case FileIndexOut:
          Serial.println(F("File Index Out of Bound"));
          break;
        case FileMismatch:
          Serial.println(F("Cannot Find File"));
          break;
        case Advertise:
          Serial.println(F("In Advertise"));
          break;
        default:
          break;
      }
      break;
    default:
      break;
  }
}

Credits

smi1100
3 projects • 3 followers
Contact

Comments

Please log in or sign up to comment.