【问题标题】:switch goes through but does not complete operations processing交换机通过但未完成操作处理
【发布时间】:2016-11-29 02:22:24
【问题描述】:
import processing.serial.*;  // add the serial library 
Serial myPort;        // the serial port to monitor  
PFont f;
PrintWriter output;
int pianoBColor = 0;
int numKeys = 6;
int sizeW = 900;
int sizeH = 830;
int pianoBackgroundW = sizeW*8/9;
int pianoBackgroundH = sizeH/3;
int blackSpace = 30;
int Empty1;
int Empty2;
int whitePressed=20;
int blackPressed = 255;
int whiteUnpressed = 255;
int blackUnpressed = 0;
int divider = 2;
int roundness = 10;
int pianoSpacingH =(sizeH - pianoBackgroundH) ;
int pianoSpacingW = (sizeW-pianoBackgroundW)/2;
int pianoKeyH = pianoBackgroundH - divider*2 ;
int pianoKeyW = (780/numKeys) - divider*8;
int num;

void setup ()
{
  size(900, 830);  // set the window size, will need to hardcode for Processing 3 compatibility
  background(0, 255, 250);
  println(Serial.list());  // list all available serial ports 
  // myPort = new Serial(this, Serial.list()[0], 115200);  // define input port 
  // myPort.clear(); 
  f = createFont("Arial", 50, true);
  RecorderDrawer();
  PianoDrawer();


}

void draw ()
{
delay(1000);
PianoPress(1, 255,200);
println("fr");
delay(1000);
PianoPress(1,0,255);

}

void PianoPress(int num, int blackKeysColor, int whiteKeysColor)
{
  // 1, 8 black key covers the right hand
  // 7, 12  black key covers the left hand
  // 2,4,6,9,11 black keys
  // 3,5,10 white keys covered by both sides
  switch(num)
  { 
  case 1:
    fill (whiteKeysColor);
    println("front");
    rect(pianoSpacingW +divider/2, pianoSpacingH+divider, pianoKeyW, pianoKeyH, roundness) ;
   println("debug");
    fill (blackKeysColor);
    println("back");
    rect(pianoSpacingW +divider/2+divider+pianoKeyW*2/3-2, pianoSpacingH+divider, pianoKeyW/2, pianoKeyH/2, roundness) ;
    println("debug");
    break;

    case 2:
    fill (blackKeysColor);
    println("case2");
    rect(pianoSpacingW +divider/2+divider+pianoKeyW*2/3-2, pianoSpacingH+divider, pianoKeyW/2, pianoKeyH/2, roundness) ;
     delay(100);
    break;

    case 3:
    fill (whiteKeysColor);
    rect(pianoSpacingW +divider/2+pianoKeyW, pianoSpacingH+divider, pianoKeyW, pianoKeyH, roundness) ; 
    fill (blackKeysColor);
    rect(pianoSpacingW +divider/2+pianoKeyW*4/6, pianoSpacingH+divider, pianoKeyW/2, pianoKeyH/2, roundness) ;  
    rect(pianoSpacingW +divider/2+divider+pianoKeyW*10/6, pianoSpacingH+divider, pianoKeyW/2, pianoKeyH/2, roundness) ;  
    break;

     case 4:
    fill (blackKeysColor);
    rect(pianoSpacingW +divider/2+divider+pianoKeyW*10/6, pianoSpacingH+divider, pianoKeyW/2, pianoKeyH/2, roundness) ;  
    break;

     case 5:
    fill (whiteKeysColor);
    rect(pianoSpacingW +divider/2+pianoKeyW*2, pianoSpacingH+divider, pianoKeyW, pianoKeyH, roundness) ; 
    fill (blackKeysColor);
    rect(pianoSpacingW +divider/2+pianoKeyW*16/6+4, pianoSpacingH+divider, pianoKeyW/2, pianoKeyH/2, roundness) ;  
    rect(pianoSpacingW +divider/2+divider+pianoKeyW*10/6, pianoSpacingH+divider, pianoKeyW/2, pianoKeyH/2, roundness) ;  
    break;  

  case 6:
    fill (blackKeysColor);
     println("case6");
    rect(pianoSpacingW +divider/2+pianoKeyW*16/6+4, pianoSpacingH+divider, pianoKeyW/2, pianoKeyH/2, roundness) ;  
    delay(100);
    break;

  case 7:
    fill (whiteKeysColor);
    rect(pianoSpacingW +divider/2+pianoKeyW*3, pianoSpacingH+divider, pianoKeyW, pianoKeyH, roundness) ;
  fill (blackKeysColor);
    rect(pianoSpacingW+pianoKeyW*16/6+4, pianoSpacingH+divider, pianoKeyW/2, pianoKeyH/2, roundness) ;
    break;

case 8:
    fill (whiteKeysColor);
    rect(pianoSpacingW +divider/2+pianoKeyW*4, pianoSpacingH+divider, pianoKeyW, pianoKeyH, roundness) ;
    fill (blackKeysColor);
    rect(pianoSpacingW+pianoKeyW*28/6+9, pianoSpacingH+divider, pianoKeyW/2, pianoKeyH/2, roundness) ;
    break;

  case 9:
    fill (blackKeysColor);
    rect(pianoSpacingW +divider/2+pianoKeyW*28/6+8, pianoSpacingH+divider, pianoKeyW/2, pianoKeyH/2, roundness) ;  
    break;

      case 10:
    fill (whiteKeysColor);
    rect(pianoSpacingW +divider/2+pianoKeyW*5, pianoSpacingH+divider, pianoKeyW, pianoKeyH, roundness) ; 
    fill (blackKeysColor);
    rect(pianoSpacingW +divider/2+pianoKeyW*28/6, pianoSpacingH+divider, pianoKeyW/2, pianoKeyH/2, roundness) ;  
    rect(pianoSpacingW +divider/2+pianoKeyW*34/6+10, pianoSpacingH+divider, pianoKeyW/2, pianoKeyH/2, roundness) ;  
    break;

  case 11:
    fill (blackKeysColor);
    rect(pianoSpacingW +divider/2+pianoKeyW*34/6+10, pianoSpacingH+divider, pianoKeyW/2, pianoKeyH/2, roundness) ;  
    break;

     case 12:
    fill (whiteKeysColor);
     println("case12");
    rect(pianoSpacingW +divider/2+pianoKeyW*6, pianoSpacingH+divider, pianoKeyW, pianoKeyH, roundness) ; 
    fill(blackKeysColor);
    rect(pianoSpacingW+pianoKeyW*34/6+10, pianoSpacingH+divider, pianoKeyW/2, pianoKeyH/2, roundness) ;
     delay(100);
    break;
  }
}


// set up functions
void PianoDrawer()
{
  fill(pianoBColor);
  rect( pianoSpacingW, pianoSpacingH, pianoBackgroundW, pianoBackgroundH, roundness);
  WhiteKeyDrawer();
  BlackKeyDrawer();
}

void WhiteKeyDrawer()
{
  for (int i = 0; i <= numKeys; i = i+1)
  {
    fill (255);
    rect(pianoSpacingW +divider/2+i*pianoKeyW, pianoSpacingH+divider, pianoKeyW, pianoKeyH, roundness) ;
  }
}
void BlackKeyDrawer()
{

  for (int i = 0; i <= numKeys; i = i+1)
  {
    if (i<=3)
    {
      Empty1 = i/3;
    } else
    {
      Empty1 = (i-3)/3;
    }
    Empty2 = i/7;
    println( Empty1, " ", Empty2);
    if (Empty1 == 0 && Empty2 == 0)
    {
      fill (0);
      rect(pianoSpacingW +divider/2+divider*i+pianoKeyW*2/3 + pianoKeyW*i, pianoSpacingH+divider, pianoKeyW/2, pianoKeyH/2, roundness) ;
    }
  }
}

void RecorderDrawer()
{
  fill(255);
  rect( pianoSpacingW-5, blackSpace-5, pianoBackgroundW+10, (sizeH-pianoBackgroundH)-100, roundness); 
  //stroke(255);
  fill(60);
  rect( pianoSpacingW, blackSpace, pianoKeyW*2/3, (sizeH-pianoBackgroundH)-blackSpace-80);
  for (int i = 0; i <= numKeys-2; i = i+1)
  {
    rect( pianoSpacingW+pianoKeyW*2/3+pianoKeyW*i/2, blackSpace, pianoKeyW/2, (sizeH-pianoBackgroundH)-blackSpace-80);
  }
  rect( pianoSpacingW+pianoKeyW*19/6, blackSpace, pianoKeyW*5/6, (sizeH-pianoBackgroundH)-blackSpace-80);
  rect( pianoSpacingW+pianoKeyW*4, blackSpace, pianoKeyW*5/6, (sizeH-pianoBackgroundH)-blackSpace-80);

  for (int i = 0; i <= numKeys-4; i = i+1)
  {
    rect(pianoSpacingW+pianoKeyW*29/6-10 +pianoKeyW*i/2, blackSpace, pianoKeyW/2, (sizeH-pianoBackgroundH)-blackSpace-80);
  }
  rect( pianoSpacingW+pianoKeyW*25/4, blackSpace, pianoKeyW*3/4+2, (sizeH-pianoBackgroundH)-blackSpace-80);       
  fill(100, 20, 200);
  textFont(f);
  textAlign(CENTER);
  text("ARDUINO PIANO PLAYER", sizeW/2, sizeH-pianoBackgroundH-20);
}

您好,我正在尝试制作一个可以记录笔画和时间长度并弹奏的钢琴键盘。在完成其余代码之前,我正在排除故障,并且似乎在按键颜色更改方面遇到了问题。我让它通过一个功能,并根据开关盒改变键的颜色。它通过代码,但处理屏幕不通过颜色变化。我该如何解决?

【问题讨论】:

    标签: function switch-statement processing


    【解决方案1】:

    您不应该像这样从draw() 函数内部调用delay() 函数。这导致您每 2 秒只能获得 1 帧,这肯定会打乱您的用户输入。

    改为使用millis()frameCount 变量来执行基于时间的操作。

    【讨论】:

      猜你喜欢
      • 2012-02-12
      • 2014-10-10
      • 1970-01-01
      • 2023-04-10
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      相关资源
      最近更新 更多