Как вы можете позволить Arduino воспроизводить файлы WAV с SD-карты? - PullRequest
0 голосов
/ 25 июня 2018

У моего друга есть проблема с желанием использовать Arduino с датчиком диапазона для обнаружения движущегося объекта в определенном диапазоне и воспроизводить два разных звука с SD-карты в зависимости от того, находится ли объект в задней половине областидвижения или на передней половине.Проблема, с которой мы сталкиваемся, заключается в том, что нам нужно подключить SD-карту к Arduino, но, поскольку мы оба не настолько продвинуты с Arduino, мы не уверены, что делаем неправильно.Код:

#include "Arduino.h"
#include "TMRpcm.h"
#include "SD.h"
// Max dist of movement
int d = 450; //Max distance in cm
#if !defined(SD_ChipSelectPin)
  #define SD_ChipSelectPin 4
#endif

// Pins for the sensor.
int trig = 11; // Attach Trig of ultrasonic sensor to pin 11
int echo = 10; // Attach Echo of ultrasonic sensor to pin 10
TMRpcm track1;
TMRpcm track2;

void setup() {
    if (!SD.begin(SD_ChipSelectPin)) {
    Serial.println("SD Card failed!");
    // stop if no SD detected
    return;
  }

    track1.play("001.wav");
    track1.loop(1);
    track2.play("002.wav");
    track2.loop(1);

    track1.speakerPin = 9;
    track2.speakerPin = 9;
}

void loop() 
{

    long duration, cm;

    pinMode(trig, OUTPUT);
    digitalWrite(trig, LOW);
    delayMicroseconds(2);
    digitalWrite(trig, HIGH);
    delayMicroseconds(5);
    digitalWrite(trig, LOW);


    pinMode(echo, INPUT);
    duration = pulseIn(echo, HIGH);
    cm = microsecondsToCentimeters(duration);

    delay(1);

    if (cm>(d/2)) { // Play soundtrack 1

        track1.setVolume((d-cm)/2.25);
        track2.setVolume(0);
    }

    else { //Play soundtrack 2

        track2.setVolume((225-cm)/2.25);
        track1.setVolume(0);
    }
}
long microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 m/s or 29 microseconds per centimeter.
// The ping travels out and back, so to find the distance of the
// object we take half of the distance travelled.
return microseconds / 29 / 2;
}

Текущая ошибка, которую мы получаем:

Arduino: 1.8.5 (Mac OS X), Board:"Arduino/Genuino Uno"

/Users/marinaveldhuizen/Downloads/Marina/Marina.ino:93:8: warning: extra tokens at end of #endif directive
 #endif }
        ^
/Users/marinaveldhuizen/Downloads/Marina/Marina.ino: In function 'void setup()':
/Users/marinaveldhuizen/Downloads/Marina/Marina.ino:20:23: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
  track1.play("001.wav");
                       ^
/Users/marinaveldhuizen/Downloads/Marina/Marina.ino:22:23: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
  track2.play("002.wav");
                       ^
/Users/marinaveldhuizen/Downloads/Marina/Marina.ino: In function 'long int microsecondsToCentimeters(long int)':
Meerdere bibliotheken gevonden voor "SD.h"
Marina:87: error: 'SD_ChipSelectPin' was not declared in this scope
 if (!SD.begin(SD_ChipSelectPin)) {
               ^
/Users/marinaveldhuizen/Downloads/Marina/Marina.ino:90:5: warning: return-statement with no value, in function returning 'long int' [-fpermissive]
     return;
     ^
Marina:111: error: a function-definition is not allowed here before '{' token
 void setup() {
              ^
Marina:186: error: expected '}' at end of input
 }
 ^
Marina:186: error: expected '}' at end of input
Gebruikt: /Users/marinaveldhuizen/Desktop/Arduino.app/Contents/Java/libraries/SD
Niet gebruikt: /Users/marinaveldhuizen/Documents/Arduino/libraries/SD-master
exit status 1
'SD_ChipSelectPin' was not declared in this scope

У меня такое ощущение, что мы правильно определили SD_ChipSelectPin, но ошибка постоянно говорит, что она не объявленаи т.д. Кто-нибудь знает, как решить эту проблему и есть ли в этом коде другие ошибки, с которыми мы могли бы столкнуться (и если да, то как мы могли бы их решить)?

1 Ответ

0 голосов
/ 26 июня 2018

Я только что скомпилировал ваш эскиз без проблем.Я думаю, что у вас установлено несколько библиотек для SD, и IDE запутывается.Попробуйте удалить библиотеку SD из /Users/marinaveldhuizen/Documents/Arduino/libraries/SD-master и перезапустить Arduino IDE.Вы также можете попробовать изменить

#if !defined(SD_ChipSelectPin)
  #define SD_ChipSelectPin 4
#endif

на

#ifndef SD_ChipSelectPin
  #define SD_ChipSelectPin 4
#endif

В противном случае попробуйте переименовать папку /Users/marinaveldhuizen/Documents/Arduino/ и переустановить IDE Arduino и библиотеку TMRpcm.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...