编辑:如果我使用equals()来比较字符串,它会播放一次声音,然后崩溃。有没有人知道为什么循环可能超出范围?
代码已更新
编辑2:我尝试插入!myString.isEmpty,现在它不再崩溃,但它仍然只播放一次声音,并且在第一次迭代后不再播放。
当按钮按下的长度等于一定量时,我们正试图为玩具发出声音。打印方式,响应是按预期的,(至少对于短按钮按下),它将打印出阵列[1]点等于" S"但是由于某种原因,这并不是'当数组[1]等于" S"时,触发我们的if函数,该函数应该导致声音播放。有什么想法吗?
出于某种原因,这也不是阅读" L"或长按按钮。这让我们感到疯狂,我们已经把它搞砸了三个小时!你聪明的人会怎么想?
处理的Java代码:
import processing.serial.*; //accepts serial input
import ddf.minim.*; //imports minim sound library
Minim minim;
String [] array;
Serial arduinoPort; //reads serial from arduino
AudioPlayer au_player1, au_player2, au_player3; //initializes sound files, au_player(n) (n=number of wav files)
void setup() {
minim = new Minim(this);
au_player1 = minim.loadFile("comply_not.wav");
au_player2 = minim.loadFile("go_away.wav");
String portName = Serial.list()[2];
arduinoPort = new Serial(this, portName, 9600);
}
void draw() {
while (arduinoPort.available () > 0) {
String myString = arduinoPort.readStringUntil('\n');
if ((myString != null)&&(!myString.isEmpty)) {
// println(myString);
printArray(array);
array = split(myString, ",");
if (array[1].equals("S")) {
au_player1.play();
}
else if (array[1].equals("L")) {
au_player2.play();
}
delay(100);
}
}
}
void stop() {
minim.stop();
super.stop();
}
Arduino代码:
基本上,这只是按下按钮然后被发送到处理全部用Java,所以如果你不知道arduino的东西并不是什么大不了的事。我认为这与Java有关。
#define BUTTON_PIN 2 // Button
#define LONGPRESS_LEN 25 // Min nr of loops for a long press
#define DELAY 100 // Delay per loop in ms
Serial.print("No");
Serial.print(",");
Serial.print("No");
Serial.print(",");
Serial.println("No");
break;
case EV_SHORTPRESS:
Serial.print(",");
Serial.print("S");
Serial.print(",");
Serial.println("No");
break;
case EV_LONGPRESS:
Serial.print(",");
Serial.print("L");
Serial.print(",");
Serial.println("No");
答案 0 :(得分:0)
想出来 -
由于某种原因声音需要重新振作!! (这对我来说很奇怪,因为它不是哈哈哈哈哈哈,但还可以!)
基本上我们添加了
soundclip.rewind();
每个声音片段,现在它正在工作。
感谢您的帮助!