So, I'm coding a robot that's meant to have two different triggers for the same mp3 module, playing different songs. In one, a distance sensor causes mp3 1 to play, and another a photoresistor causes mp3 2 to play. But I don't want them to play at the same time, so I'm trying to make it so that if mp3 is false, then whichever sensor is activated first can play, making mp3 true. So that the other sensor can't play it until it is false.
I'm very new to coding, and my professor was helping me and ran out of time. The last thing he did to the coding, made it so that the mp3 1 automatically played once when the arduino starts up, and then not again, without even being triggered by either sensor.
Again, I'm new, but I feel like it's because "mp3" isn't actually connected to the mp3 module in any way, so how does the coding know that mp3 = false means that the mp3 module isn't playing? I tried to ask this to my professor and he simply said "it doesn't" and continued on messing with my coding without addressing this. How does boolean know what it's making false or true?
This is before the setup/loop
Just a note, I have a millis delay because without it, the mp3 associated with the sensor would cut itself off and keep repeating over and over and over while the sensor is activated, so I have it delayed by 5 minutes, and the triggers also affect a single LED.
#include <SoftwareSerial.h>
#define ARDUINO_RX 5//should connect to TX of the Serial MP3 Player module
#define ARDUINO_TX 6//connect to RX of the module
#define trigPin 13//for the distance module
#define echoPin 12
int ldr=A5;//Set A0(Analog Input) for LDR.
int value=0;
int red_light_pin= 10;
int green_light_pin = 9;
int blue_light_pin = 3;
long pushTime;
boolean mp3 = false;
SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX);
static int8_t Send_buf[8] = {0} ;
#define NEXT_SONG 0X01
#define PREV_SONG 0X02
#define CMD_PLAY_W_INDEX 0X03 //DATA IS REQUIRED (number of song)
#define CMD_SET_VOLUME 0X00//DATA IS REQUIRED (number of volume from 0 up to 30(0x1E))
#define SET_DAC 0X17
#define CMD_PLAY_WITHVOLUME 0X00 //data is needed 0x7E 06 22 00 xx yy EF;(xx volume)(yy number of song)
#define CMD_SEL_DEV 0X09 //SELECT STORAGE DEVICE, DATA IS REQUIRED
#define DEV_TF 0X02 //HELLO,IM THE DATA REQUIRED
#define SLEEP_MODE_START 0X0A
#define SLEEP_MODE_WAKEUP 0X0B
#define CMD_RESET 0X0C//CHIP RESET
#define CMD_PLAY 0X0D //RESUME PLAYBACK
#define CMD_PAUSE 0X0E //PLAYBACK IS PAUSED
#define CMD_PLAY_WITHFOLDER 0X0F//DATA IS NEEDED, 0x7E 06 0F 00 01 02 EF;(play the song with the directory \01\002xxxxxx.mp3
#define STOP_PLAY 0X16
#define PLAY_FOLDER 0X17// data is needed 0x7E 06 17 00 01 XX EF;(play the 01 folder)(value xx we dont care)
#define SET_CYCLEPLAY 0X19//data is needed 00 start; 01 close
#define SET_DAC 0X17//data is needed 00 start DAC OUTPUT;01 DAC no output
void setup()
{
Serial.begin(9600);//Start our Serial coms for serial monitor in our pc
mySerial.begin(9600);//Start our Serial coms for THE MP3
delay(500);//Wait chip initialization is complete
sendCommand(CMD_SEL_DEV, DEV_TF);//select the TF card
delay(200);//wait for 200ms
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(red_light_pin, OUTPUT);
pinMode(green_light_pin, OUTPUT);
pinMode(blue_light_pin, OUTPUT);
}
void loop()
{{
value=analogRead(trigPin);//Reads the Value of distance i hope.
Serial.println(" cm");
value=analogRead(ldr);//Reads the Value of LDR(light).
Serial.println("LDR value is :");//Prints the value of LDR to Serial Monitor.
Serial.println(value);
if(measureDistance(trigPin,echoPin)<50 || value>900)
{
digitalWrite(blue_light_pin, HIGH);
digitalWrite(red_light_pin, HIGH);
digitalWrite(green_light_pin, HIGH);
}
else
{
digitalWrite(blue_light_pin, LOW);
digitalWrite(red_light_pin, LOW);
digitalWrite(green_light_pin, LOW);
}
if(measureDistance(trigPin,echoPin)<50 && mp3 == false){
if (pushTime < millis()) { // was the button pushed more than 5 minutes ago
sendCommand(CMD_PLAY_WITHFOLDER, 0X0101);
mp3 = true;//exp play the third song of the second folder
pushTime = millis() + 300000; // remember the time when the button was pushed
}}
{
if(value>900 && mp3 == false){ // button being pushed
}
if (pushTime < millis()) { // was the button pushed more than 5 minutes ago
sendCommand(CMD_PLAY_WITHFOLDER, 0X0202);
mp3 = true;//play the third song of the second folder
pushTime = millis() + 300000; // remember the time when the button was pushed
}
}
delay(300);
}
}
void sendCommand(int8_t command, int16_t dat)
{
delay(20);
Send_buf[0] = 0x7e; //starting byte
Send_buf[1] = 0xff; //version
Send_buf[2] = 0x06; //the number of bytes of the command without starting byte and ending byte
Send_buf[3] = command; //
Send_buf[4] = 0x00;//0x00 = no feedback, 0x01 = feedback
Send_buf[5] = (int8_t)(dat >> 8);//datah
Send_buf[6] = (int8_t)(dat); //datal
Send_buf[7] = 0xef; //ending byte
for(uint8_t i=0; i<8; i++)//
{
mySerial.write(Send_buf[i]) ;//send bit to serial mp3
Serial.print(Send_buf[i],HEX);//send bit to serial monitor in pc
}
Serial.println();
}
long measureDistance(int trigger,int echo){
long duration, distance;
digitalWrite(trigger, LOW); //PULSE ___|---|___
delayMicroseconds(2);
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);
duration = pulseIn(echo, HIGH);
distance = (duration/2) / 29.1;
Serial.println("distance:");
Serial.println(distance);
return distance;
}