使用来自 arduino 的串行信息在处理中播放音频



我正在创建一个程序,该程序从超声波传感器/arduino获取串行信息并将其发送到处理中,该处理将播放蟋蟀.mp3或咆哮.mp3,具体取决于输入的值。

蟋蟀.mp3如果值为 <10 应该玩咆哮.mp3如果值为>10 应该播放

按原样,代码将播放咆哮.mp3,但不会播放蟋蟀.mp3

import processing.serial.*;
import ddf.minim.*;
Minim minim;
AudioPlayer player, player2;
Serial myPort; // Create object from Serial class
String dataFromArduino; // Data received from the serial port
String convertedDataFromArduino;
boolean soundactivated = false;
boolean sound2activated = false;
void setup() {
  size(640, 480);
  minim = new Minim(this);
  player = minim.loadFile("crickets.mp3");
  player2 = minim.loadFile("growl.mp3");
  printArray(Serial.list());
  String portName = Serial.list()[4]; //change the 0 to a 1 or 2 etc. to match your port
  myPort = new Serial(this, portName, 9600);
}
void draw() {
  player.pause();
  dataFromArduino = myPort.readStringUntil('n'); // read it and store it in message
  if (dataFromArduino != null) {
    convertedDataFromArduino = trim(dataFromArduino);
    println(convertedDataFromArduino);

//Music calls   
if (int(convertedDataFromArduino) < 10 && (soundactivated == false)) {
  player.loop();
  println("crickets");
  soundactivated = true;
  sound2activated = false;
} else if (int(convertedDataFromArduino) >= 11 && (sound2activated == false)) {
  player2.loop();
  println("growl");
  sound2activated = true;
  soundactivated = false;
}
//loop();
  }
}

你省略了很多细节,所以很难以特定的方式回答,但我会尝试在一般意义上回答:

是时候开始调试代码了。

你需要弄清楚你的代码到底在做什么。可以使用调试器(一次只单步执行一行代码)、使用 println() 语句,或者只是用一张纸和一支铅笔自己单步执行代码来执行此操作。

您应该做的第一件事是确保这些声音文件有效,拼写正确(检查您的大小写),并且位于您认为它们的位置。创建一个小型示例程序,该程序只需播放声音,而无需任何Arduino代码。

接下来,您需要弄清楚Arduino到底有什么。您已经在打印出convertedDataFromArduino的值。这个价值是多少?如果它总是小于 10 ,那么你需要弄清楚发生了什么。如果它大于您预期的10,那么您可以将其排除为嫌疑人。

最后,你应该看看你的if语句。它们是否都按照您的预期输入?这些打印语句是否在您预期时触发?如果值大于或等于 10 但小于 11,会发生什么情况?

如果您仍然无法使其工作,那么您可以考虑创建一系列较小的程序。创建一个小程序,播放声音,没有任何Arduino代码。创建另一个小程序,打印出来自Arduino的值,而不播放任何声音。让那些完美地工作,并且只有在它们分开工作时才尝试将它们组合在一起。如果您遇到困难,您可以发布更具体的问题以及 MCVE,我们将从那里开始。祝你好运。

相关内容

  • 没有找到相关文章

最新更新