Elechhouse Mo3 Shield Play случайная песня
когда кто-то проходит мимо моего датчика расстояния, я получаю ошибку, одна и та же песня(трек 0001) играет каждый раз. Какой-нибудь совет?
#include <SoftwareSerial.h>
SoftwareSerial Geno(7,8); // Rx , Tx
unsigned char Data[10];
unsigned char i;
// defines pins numbers
const int trigPin = 8;
const int echoPin = 9;
// defines variables
long duration;
int distance;
void setup() {
delay(1000);
Geno.begin(9600);
delay(1000);
SetVolume(30);
pinMode(trigPin, OUTPUT); // Устанавливает тригПин в качестве выходного
pinMode(echoPin, INPUT); // Устанавливает echoPin в качестве входного
Serial.begin(9600); // Запуск последовательной связи
}
void playTrack(int num){
delay(100);
Data[0] = 0x7E;
Data[1] = 0x04;
Data[2] = 0xA0;
Data[3] = 0x00;
Data[4] = 0x00 + num;
Data[5] = 0x7E;
Command(Data,5);
play_pause();
delay(10000);
}
void SetVolume( int vol){
Data[0] = 0x7E; // СТАРТ
Data[1] = 0x03; // Длина не 0x02
Data[2] = 0xA7; // Команда
Data[3] = vol; // новый том
Data[4] = 0x7E; // КОНЕЦ
Command(Data,5);
}
void play_pause(){
Data[0] = 0x7E; // СТАРТ
Data[1] = 0x02; // Длина
Data[2] = 0xA3; // Команда
Data[3] = 0x7E; //Параметр Mode
Command(Data,4);
}
void Command(unsigned char *Data, int length){
for(int i=0; i<length; i++){
Geno.write(Data[i]);
}
}
void loop() {
//Присваивает случайное число
int song = random(0,200);
Serial.print("Song is:");
Serial.print(song);
Serial.print("\n");
// Очищает trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Устанавливает trigPin в HIGH состояние на 10 микросекунд
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Считывает echoPin, возвращает время прохождения звуковой волны в микросекундах
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance= duration*0.034/2;
Serial.print("Distance: ");
Serial.println(distance);
if(distance < 20){
playTrack(random(1,25));
}
//playTrack(1);
//playTrack(2);
}
@Pagaley 12, 👍2
Обсуждение2 ответа
Отказ от ответственности: Я ничего не знаю об этом медиаплеере, кроме того, о чем идет речь в этом вопросе. Я никогда раньше об этом не слышал. Следующее просто из наблюдения за кодом, который вы опубликовали.
Посмотрите на свою функцию play_pause ()
, в которой описаны значения всех элементов.
Data[0] = 0x7E; // НАЧАЛО
Data[1] = 0x02; // Длина
Data[2] = 0xA3; // Команда
Data[3] = 0x7E; //Параметр режима
Command(Data,4);
Похоже, сообщение начинается с 0x7E
, за которым следует длина, затем команда и что-то еще, а затем еще 0x7E
.
Поле "Длина" на 1 меньше общей длины, поэтому я думаю, что оно не включает "начало" или что - то еще-есть различные эквивалентные способы, которыми вы могли бы взглянуть на него.
В playTrack()
вы задаете 6 элементов, но для элемента длины установлено значение 4. Затем вы сообщаете команде ()
, что их 5. Таким образом, последний элемент (0x7E
) не будет отправлен, а отправленный вами элемент длины в любом случае неверен.
Полагаю, приемник впадет в какое-то странное состояние. Возможно, это объясняет проблему, которую вы видите.
Это почти определенно глупый вопрос, но я новичок в этом, где элемент длины и где он установлен на 4?, @Pagaley 12
Я более подробно объяснил это выше. Надеюсь, в этом больше смысла., @Mark Smith
случайная(1,25)
является детерминированной. Это PRNG должен каждый раз производить одну и ту же последовательность выходов в одном и том же порядке. В какой-то момент вам нужно вызвать randomSeed (), передав ему непредсказуемое значение. Что-то вроде:
if(distance < 20){
randomSeed(micros());
playTrack(random(1,25));
}
- SD-карта не инициализируется
- Разные и самые быстрые способы вычисления синусов и косинусов в Arduino
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Как подключить ардуино к разъему для наушников?
- Подключить Arduino к телефонной линии?
- Как отправить данные из Arduino Uno с SIM900 GPRS в Firebase
- Отправка текстового сообщения через Wi-Fi-shield Arduino
- Избегайте математических вычислений с плавающей запятой, чтобы ускорить Arduino
в чем же ошибка?, @jsotola
Это была плохая фраза на моем aprt, ошибка в том, что он воспроизводит одно и то же снова и снова, @Pagaley 12
начните с базового кода ... никакого измерения расстояния, никакого случайного выбора трека ... только код, который воспроизводит трек 03 (что угодно, кроме 01) ... как только это сработает, добавьте случайный выбор ... когда это сработает, добавьте код датчика расстояния, @jsotola
сам по себе play random работает, но как только я добавляю код для расстояния, он воспроизводит ту же песню, что и раньше, есть идеи?, @Pagaley 12