处理中:如何在运行下一行之前让函数等待?

时间:2018-12-08 02:43:41

标签: java processing

我正在尝试创建一个向用户显示笔记的程序,几秒钟后,他们通过蜂鸣器获得了触觉反馈,他们需要尽快击打该笔记。蜂鸣器通过arduino连接。此刻,当音符首次出现在屏幕上时,蜂鸣器会蜂鸣。我正在尝试找到一种方法,使蜂鸣器在几毫秒后开始工作,以使其更接近击打音符的实际时间。使用带有millis()或delay()的计时器无法正常工作,因为我需要这样做。

void readNotes(){
   int i = notesLineIndex;
   if(notesLineIndex < notes.length) {
      notesLineIndex++;
    }
   else return;
   notesLine= notes[i];    
   String[] list = split(notesLine, ',');

   if (Integer.parseInt(list[0]) == 1) el1 = 0;
   if (Integer.parseInt(list[1]) == 1) el2 = 0;
   if (Integer.parseInt(list[2]) == 1) el3 = 0;

   //add delay 
   notesBuzz= notes[i];    
   myPort.write('a'); //create a starting point for array
   myPort.write(list[0]);
   myPort.write(list[1]);
   myPort.write(list[2]);
 }

2 个答案:

答案 0 :(得分:0)

您可以使用delay功能。

delay(1000) //wait for 1 second

答案 1 :(得分:0)

您有2个选择:

笔记位置:如果笔记在屏幕上水平移动,则可以基于笔记的x位置实现触发器。可能是最简单的选择。如果是垂直的,则使用y位置。

Millis():笔记首次出现时,将该笔记的millis()存储在变量中。然后在每个帧上,检查存储的值和当前的millis()之间的差是否大于所需的延迟时间。如果是这样,请激活蜂鸣器。

有关delay()函数的注释:在很少的情况下,除了原型设计/测试之外,还应该使用它。这是因为delay()完全停止了程序执行。