2017-01-10 10 views
1

Я пытаюсь управлять небольшим двигателем постоянного тока через Ardiuno Uno с pc java. Это приложение Java является серверным приложением и подключается с помощью приложения android с помощью сокета. И он просто работает над одной командой из java. Но не работать непрерывно. Я хочу, чтобы вращающийся двигатель, когда я непрерывно нажимаю кнопку и останавливаю, нажимайте вверх. Пожалуйста, помогите мне. Извините, мой плохой английский.Управление двигателем постоянного тока с помощью ardiuno с использованием запускающего события непрерывно в java

Вот андроид-код./непрерывное прессование/

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 –