2017-01-10 36 views
1

我试图通过Ardiuno Uno与pc java控制小型直流电机。这个Java应用程序是服务器应用程序,并使用套接字连接到android应用程它只是处理来自java的单个命令。但不能连续按下。当我连续按下按钮并停止按下时,我想旋转电机。请帮帮我。对不起,我英语不好。在ar中使用触发事件控制直流电机

这里是Android代码。 /连续按/

class RepetitiveUpdater implements Runnable { 

     @Override 
     public void run() { 
      if (autoIncrement) { 
       increment(); 
       try { 
        Thread.sleep(100); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       repeatUpdateHandler.postDelayed(new RepetitiveUpdater(), REPEAT_DELAY); 
      } else if (autoDecrement) { 
       decrement(); 
       repeatUpdateHandler.postDelayed(new RepetitiveUpdater(), REPEAT_DELAY); 
      } 
     } 

    } 

    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      increment(); 
     } 
    }); 

    btn.setOnLongClickListener(new View.OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 
      autoIncrement = true; 
      repeatUpdateHandler.post(new RepetitiveUpdater()); 
      return false; 
     } 
    }); 

    btn1.setOnLongClickListener(new View.OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 
      autoDecrement = true; 
      repeatUpdateHandler.post(new RepetitiveUpdater()); 
      return false; 
     } 
    }); 

这里是java服务器。

private void sendMsgToPort(int k) { 
    try { 
     String s = String.valueOf(k); 
     char buf2[] = s.toCharArray(); 
     serialPort.writeByte((byte) buf2[0]); 
    } catch (SerialPortException ex) { 
     System.out.println(ex); 
    } 
} 

// ........ 
     while (true) { 
      try { 

       clientSocket = serverSocket.accept(); // accept the client connection 
       inputStreamReader = new InputStreamReader(clientSocket.getInputStream()); 
       bufferedReader = new BufferedReader(inputStreamReader); // get the client message 
       message = bufferedReader.read(); 
       sendMsgToPort(message); 
       System.out.println("m=:" + message); 
       // System.out.println("Serial : "+serialPort.readString()); 
       //inputStreamReader.close(); 
       // clientSocket.close(); 
       //System.out.println(serialPort.readBytes()); 
       //Thread.sleep(100); 

      } catch (IOException ex) { 
       // status.setText("Error: " + ex); 
       System.out.println("Problem in message reading"); 
      } 
     } 

这里是ardiuno示例代码:

int val = 0; 
int led = 8; 

void setup() 
{ 
    Serial.begin(9600); 
    pinMode(led, OUTPUT); 
} 

void loop() 
{ 
    delay(100); 
} 

void serialEvent() // To check if there is any data on the Serial line 
{ 
    if (Serial.available()) 
    { 
     val = Serial.parseInt(); 
     if(val == 1) //Switch on the LED, if the received value is 1. 
     { 
      digitalWrite(led, HIGH); 
     } 
    } 

} 

`

回答

1

的一个问题是在Java服务器程序:

ClientSocket的=的ServerSocket.accept();

您接受一个新的连接,读取/处理一条消息,然后呢? 客户端套接字刚刚超出范围。连接刚刚打开,您的代码再次等待新的连接。

搜索“Java多线程服务器”示例,这非常简单。在接受后,在专用线程中完成每个连接的完全处理,以便您可以同时等待另一个连接并在已建立的连接上处理较长的对话。

+0

谢谢您的建议。我会尝试JimmyB –

相关问题