add arduino code
This commit is contained in:
parent
5a7d04a37a
commit
d943bece30
64
LegoHarkonnen/LegoHarkonnen.ino
Normal file
64
LegoHarkonnen/LegoHarkonnen.ino
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* LEGO Harkonnen Display
|
||||||
|
* By Görkem Bozkurt
|
||||||
|
* https://gorkem.cc
|
||||||
|
* Requires AccelStepper.h and mp3tf16p.h libraries
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "mp3tf16p.h"
|
||||||
|
#include <AccelStepper.h>
|
||||||
|
#include <Stepper.h>
|
||||||
|
|
||||||
|
boolean playedOnce = false;
|
||||||
|
const int buttonLight = 5; //front button light
|
||||||
|
const int boxLight = 2; //LED strip inside box
|
||||||
|
const int buttonPin = 6; //front button pin
|
||||||
|
int stepperLoc = 0; //initial location of stepper motor
|
||||||
|
|
||||||
|
#define HALFSTEP 8
|
||||||
|
|
||||||
|
#define motorPin1 9 // IN1 on ULN2003 ==> Blue on 28BYJ-48
|
||||||
|
#define motorPin2 10 // IN2 on ULN2003 ==> Pink on 28BYJ-48
|
||||||
|
#define motorPin3 11 // IN3 on ULN2003 ==> Yellow on 28BYJ-48
|
||||||
|
#define motorPin4 12 // IN4 on ULN2003 ==> Orange on 28BYJ-48
|
||||||
|
|
||||||
|
MP3Player mp3(3,4); //initialize mp3 player module
|
||||||
|
|
||||||
|
AccelStepper mystepper(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(9600);
|
||||||
|
pinMode(buttonPin, INPUT);
|
||||||
|
pinMode(buttonLight, OUTPUT);
|
||||||
|
pinMode(boxLight, OUTPUT);
|
||||||
|
mystepper.setMaxSpeed(800);
|
||||||
|
mystepper.setAcceleration(120);
|
||||||
|
mp3.initialize();
|
||||||
|
digitalWrite(buttonLight,HIGH);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
|
||||||
|
if(digitalRead(buttonPin)){
|
||||||
|
mp3.playTrackNumber(1,20,false);
|
||||||
|
digitalWrite(buttonLight,LOW);
|
||||||
|
playedOnce = true;
|
||||||
|
stepperLoc = 8000;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
mystepper.moveTo(stepperLoc);
|
||||||
|
|
||||||
|
if(mp3.playCompleted()){
|
||||||
|
stepperLoc = 0;
|
||||||
|
digitalWrite(buttonLight,HIGH);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mystepper.distanceToGo()!=0){
|
||||||
|
mystepper.enableOutputs();
|
||||||
|
mystepper.run();
|
||||||
|
}else{
|
||||||
|
mystepper.disableOutputs();
|
||||||
|
}
|
||||||
|
}
|
164
LegoHarkonnen/mp3tf16p.h
Normal file
164
LegoHarkonnen/mp3tf16p.h
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
#include "SoftwareSerial.h"
|
||||||
|
#include "DFRobotDFPlayerMini.h"
|
||||||
|
|
||||||
|
#define MP3_ERROR_ONLY 1
|
||||||
|
#define MP3_ALL_MESSAGE 2
|
||||||
|
|
||||||
|
class MP3Player
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
SoftwareSerial *mySoftwareSerial;
|
||||||
|
void statusOnSerial(uint8_t type, int value);
|
||||||
|
void waitPlayIsTerminated(void);
|
||||||
|
int p_RX;
|
||||||
|
int p_TX;
|
||||||
|
|
||||||
|
public:
|
||||||
|
DFRobotDFPlayerMini player;
|
||||||
|
MP3Player(int RX, int TX);
|
||||||
|
~MP3Player();
|
||||||
|
void playTrackNumber(int trackNumber, int volume, boolean waitPlayTerminated = true);
|
||||||
|
boolean playCompleted(void);
|
||||||
|
void initialize(void);
|
||||||
|
int serialPrintStatus(int errorOnly);
|
||||||
|
};
|
||||||
|
|
||||||
|
MP3Player::MP3Player(int RX, int TX)
|
||||||
|
{
|
||||||
|
p_TX = TX;
|
||||||
|
p_RX = RX;
|
||||||
|
}
|
||||||
|
|
||||||
|
MP3Player::~MP3Player()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void MP3Player::initialize(void)
|
||||||
|
{
|
||||||
|
mySoftwareSerial = new SoftwareSerial(p_RX, p_TX);
|
||||||
|
|
||||||
|
mySoftwareSerial->begin(9600);
|
||||||
|
Serial.println(F("Initializing MP3Player ..."));
|
||||||
|
|
||||||
|
if (!player.begin(*mySoftwareSerial,true,false))
|
||||||
|
{
|
||||||
|
Serial.println(F("Unable to begin:"));
|
||||||
|
Serial.println(F("1.Please recheck the connection!"));
|
||||||
|
Serial.println(F("2.Please insert the SD card!"));
|
||||||
|
while (true)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
player.volume(10);
|
||||||
|
Serial.println(F("MP3Player online."));
|
||||||
|
}
|
||||||
|
|
||||||
|
void MP3Player::playTrackNumber(int trackNumber, int volume, boolean waitPlayTerminated)
|
||||||
|
{
|
||||||
|
player.volume(volume);
|
||||||
|
player.play(trackNumber);
|
||||||
|
if (waitPlayTerminated)
|
||||||
|
{
|
||||||
|
waitPlayIsTerminated();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MP3Player::waitPlayIsTerminated(void)
|
||||||
|
{
|
||||||
|
while (!playCompleted())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean MP3Player::playCompleted(void)
|
||||||
|
{
|
||||||
|
if (player.available())
|
||||||
|
{
|
||||||
|
return player.readType() == DFPlayerPlayFinished;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print the detail message from DFPlayer to handle different errors and states.
|
||||||
|
//
|
||||||
|
int MP3Player::serialPrintStatus(int verbose)
|
||||||
|
{
|
||||||
|
if (player.available())
|
||||||
|
{
|
||||||
|
uint8_t type = player.readType();
|
||||||
|
int value = player.read();
|
||||||
|
if (verbose == MP3_ERROR_ONLY)
|
||||||
|
{
|
||||||
|
if (type == DFPlayerError)
|
||||||
|
{
|
||||||
|
statusOnSerial(type, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
statusOnSerial(type, value);
|
||||||
|
}
|
||||||
|
if(type == DFPlayerError) {
|
||||||
|
return value;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MP3Player::statusOnSerial(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 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;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user