java中利用触发事件连续控制arduino直流电机
我试图用pc java通过Arduino Uno控制一个小型直流电机。此java应用程序是服务器应用程序,使用套接字与android应用程序连接。它可以在来自java的单个命令上工作。但不工作,不断按下。我想旋转电机时,我不断按下按钮,并停止按向上。请帮帮我 这是android代码/连续按压/java中利用触发事件连续控制arduino直流电机,java,android,sockets,arduino,serial-port,Java,Android,Sockets,Arduino,Serial Port,我试图用pc java通过Arduino Uno控制一个小型直流电机。此java应用程序是服务器应用程序,使用套接字与android应用程序连接。它可以在来自java的单个命令上工作。但不工作,不断按下。我想旋转电机时,我不断按下按钮,并停止按向上。请帮帮我 这是android代码/连续按压/ class RepetitiveUpdater implements Runnable { @Override public void run() {
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);
}
}
}
`Java服务器程序中存在一个问题: clientSocket=serverSocket.accept() 您接受一个新连接,读取/处理一条消息,然后? 客户端套接字超出了范围。连接保持打开状态,代码等待再次建立新连接
搜索“Java多线程服务器”示例,非常简单。接受后,在专用线程中完全处理每个连接,以便您可以同时等待另一个连接和处理已建立连接上的较长对话。谢谢您的建议。我试试JimmyB