So this code has a servo rotate until the ultrasound sensor sees something. when trying to play sound with the dfplayer once something is seen, it will occasionally play or not play the sound, I hear the Windows disconnect sound, the servo sometimes acts without being instructed, the serial monitor will stop printing out the values read by the sensor. when moving the object away from the sensor, the code returns back to the void loop() function and will perform the rotations perfectly, until the same issue happens when placing something in front of the sensor. Does anyone have any advice onto why the DFplayer is causing the issue? Code is below.
#include <Servo.h>
#include "SR04.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#define TRIG_PIN 12
#define ECHO_PIN 8
void idle();
void focus();
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini Player;
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN);
Servo myservo; // create servo object to control a servo
int pos = 0; // variable to store the servo position
int i = 1;
long a;
long b;
long spec;
long sound;
void setup() {
randomSeed(analogRead(0));
mySoftwareSerial.begin(9600);
Serial.begin(115200);
if (!Player.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3.
while(true);
}
Player.volume(20); //Set volume value. From 0 to 30
myservo.attach(9);
//myservo.write(20);
//delay(1000);
//myservo.write(135);
//Serial.begin(9600);
//delay(2000);
if(sr04.Distance() <= 2){
Player.play(22);
myservo.write(0);
delay(2000);
idle();
}else{
myservo.write(0);
delay(2000);
}
}
void loop() {
a = sr04.Distance();
Serial.print(a);
Serial.println("cm");
if(a <= 65){
delay(400);
focus();
}
if(i == 1){
pos += 3;
myservo.write(pos);
if(pos == 135){
i = 0;
delay(3000);
}
}else{
pos -= 3;
myservo.write(pos);
if(pos == 0){
i = 1;
delay(3000);
}
}
delay(40);
}
void idle(){
while(true){
if(i == 1){
pos += 3;
myservo.write(pos);
if(pos == 135){
i = 0;
delay(3000);
}
}else{
pos -= 3;
myservo.write(pos);
if(pos == 0){
i = 1;
delay(3000);
}
}
delay(40);
}
}
void focus(){
spec = random(1,501);
if (spec == 115){
Serial.println("ok");
//Player.play(22);
}else{
sound = random(1,22);
Serial.println("ok");
//Player.play(sound);
delay(4000);
}
//delay(4000); // beeps and boops, LEDs and whatnot
b = sr04.Distance();
Serial.print(b);
Serial.println("cm");
if(b <= 65){
focus();
}
Please do not duplicate your questions as doing so wastes the time and effort of the volunteers trying to help you as they are then answering the same thing in different places.
Repeated duplicate posting could result in a temporary or permanent ban from the forum.
Could you take a few moments to Learn How To Use The Forum
It will help you get the best out of the forum in the future.
Your OS and version can be valuable information, please include it along with extra security you are using.
Always list the version of the IDE you are using and the board version if applicable.
Use quote or add error messages as an attachment NOT a picture.