Tower Pro SG90 + DFPlayer Mini - Tagir - 04-01-2017
Cześć,
Chciałbym połączyć w 2 kody tak aby działały ale niestety nie wychodzi mi tak jak powinno
(Płytka Arduino Uno R3 klon)
Ogólnie problem:
Tower ma dojść do pewnej pozycji powiedzmy 90 stopni (będzie otwierać pudełko) i wtedy zagrać 1 piosenkę z MP3 (2sek) i wrócić do pozycji 0 i w tym momęcie pętla z opóźnieniem powiedzmy 3 min.
2 pełne kody:
Kod: #include <Servo.h>
int servoPin = 9;
Servo servo;
int servoAngle = 0; // servo position in degrees
void setup()
{
Serial.begin(9600);
servo.attach(servoPin);
}
void loop()
{
//if you change the delay value (from example change 50 to 10), the speed of the servo changes
for(servoAngle = 30; servoAngle < 100; servoAngle++) //move the micro servo from 0 degrees to 180 degrees
{
servo.write(servoAngle);
delay(100);
}
{delay(1000); }
for(servoAngle = 100; servoAngle > 30; servoAngle--) //now move back the micro servo from 0 degrees to 180 degrees
{
servo.write(servoAngle);
delay(20);
}
//end control the servo's speed
}
2gi kod:
Kod: #include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
void setup()
{
mySoftwareSerial.begin(9600);
Serial.begin(115200);
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3.
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);
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.volume(20); //Set volume value. From 0 to 30
myDFPlayer.play(1); //Play the first mp3
}
void loop()
{
static unsigned long timer = millis();
if (millis() - timer > 3000) {
timer = millis();
myDFPlayer.next(); //Play next mp3 every 3 second.
}
if (myDFPlayer.available()) {
printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
}
}
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 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;
}
}
Tak myślę z tego drugiego kodu mogę wszystko usunąć z void loopa a void setup wstawić z rozpoczęciem grania do Voidloopa z pierwszego? Czy dobrze myślę?
I pytanie czy mogę uszkodzić płytkę w jakiś sposób mieszając kody ?
pozdrawiam
OStateczny kod wyszedł taki, działa jako tako poprostu skróciłem plik z mp3 do 4 sekund ale pewnie dało by sie to zrobić zwykłą komendą której nie znam
Kod: /*
Into Robotics
*/
#include <Servo.h>
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
int servoPin = 9;
Servo servo;
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
int servoAngle = 0; // servo position in degrees
void setup()
{
Serial.begin(9600);
servo.attach(servoPin);
mySoftwareSerial.begin(9600);
Serial.begin(115200);
Serial.println();
Serial.println(F("DFRobot DFPlayer Mini Demo"));
Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3.
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);
}
}
void loop()
{
//control the servo's speed
//if you change the delay value (from example change 50 to 10), the speed of the servo changes
for(servoAngle = 30; servoAngle < 100; servoAngle++) //move the micro servo from 0 degrees to 180 degrees
{
servo.write(servoAngle);
delay(100);
}
Serial.println(F("DFPlayer Mini online."));
myDFPlayer.volume(20); //Set volume value. From 0 to 30
myDFPlayer.play(1); //Play the first mp3
{delay(7000); }
for(servoAngle = 100; servoAngle > 30; servoAngle--) //now move back the micro servo from 0 degrees to 180 degrees
{
servo.write(servoAngle);
delay(20);
}
{delay(30000); }
//end control the servo's speed
RE: Tower Pro SG90 + DFPlayer Mini - Tagir - 22-01-2017
okej. potrzebuje jeszcze pomocy, jak zrobić aby DFP zagrał jedną piosenkę RANDOMOWO, tylko jedną i zrobił znowu pętlę po opóźnieniu ?
RE: Tower Pro SG90 + DFPlayer Mini - mati12_14 - 23-01-2017
Masz tam play(1) <-nie mam dfrobot ale obstawiam że to ustawia tracki. Jak on je czyta nie wiem. Jak je wgrywać na karte również nie.Jednak wracając do sedna powinieś dać zmienną pomocniczą przechowującą wartość z losowania: [link href="https://www.arduino.cc/en/Reference/Random"]Random[/link]. Potem skorzystać z ...play(temp);
Nie do końca wiem jaką pętlę? Przecież loop automatycznie się uruchamia zaraz po końc poprzedniej pętli.Chcesz opóźnić? wykorzystaj np. delay.
|