我正在创建一个程序,它从超声波传感器/ arduino获取串行信息并将其发送到处理,根据输入的值,它将播放crickets.mp3或growl.mp3。
如果值<10,则应该播放crickets.mp3 如果值> 10 ,则应该播放growl.mp3原样,代码将播放growl.mp3,但不播放crickets.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();
}
}
答案 0 :(得分:0)
你遗漏了很多细节,所以很难以特定的方式回答,但我会尝试回答一般意义:
是时候开始调试代码了。
您需要确切了解您的代码正在做什么。你可以使用调试器(它一次只能逐行执行代码),或者使用println()
语句,或者只是用一张纸和一支铅笔自己单步执行代码来实现。< / p>
您应该做的第一件事是确保这些声音文件有效,拼写正确(检查您的大小写),以及您认为它们所在的位置。创建一个小例子程序,只需播放没有任何Arduino代码的声音。
接下来,您需要确切了解Arduino的确切内容。您已经打印出convertedDataFromArduino
的值。这个价值是多少?如果它总是小于10
,那么你需要弄清楚发生了什么。如果它在你预期的时候大于10
,那么你可以将其作为嫌疑人进行排除。
最后,你应该看看你的if语句。它们是否都在您预期的时候进入?这些打印语句是否会在您预期的时候触发?如果该值大于或等于10但小于11?
会发生什么如果仍然无法使其正常工作,那么您可以考虑创建一系列较小的程序。创建一个只是播放声音而没有任何Arduino代码的小程序。创建另一个小程序只打印出来自Arduino的值,而不播放任何声音。让那些工作完美,并且只在他们单独工作时尝试将它们组合在一起。如果您遇到问题,可以发布一个更具体的问题以及MCVE,我们将从那里开始。祝你好运。