• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Tower Pro SG90 + DFPlayer Mini
#1
Cześć,
Chciałbym połączyć w 2 kody tak aby działały ale niestety nie wychodzi mi tak jak powinno Wink
(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  
 
Odpowiedź
#2
okej. potrzebuje jeszcze pomocy, jak zrobić aby DFP zagrał jedną piosenkę RANDOMOWO, tylko jedną i zrobił znowu pętlę po opóźnieniu ?
 
Odpowiedź
#3
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.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości