2016-09-27 3 views
0

나는 arduino의 단일 문자를 수신하기 위해이 코드를 사용했습니다. arduino가 문자를 보내는 전화 텍스트 뷰어에서 어떤 응답도 볼 수 없습니다. 'A' 및 보내기 'Z'는 나에게 안드로이드 전화 아두 이노 사이의 연결이 성공적으로 된 것을arduino에서 안드로이드 전화를 사용하여 문자를 수신

참고 오프 텍스트 뷰어에서 단어를 보여주고 안드로이드 폰은 아두 이노로 전송하지만

class Ahmed extends Thread { 

    public void run() { 
     for (; ;) { 
      try { 
       int bytesAvailable = btSocket.getInputStream().available(); 

       byte []packetBytes= new byte[bytesAvailable]; 
       if (bytesAvailable > 0) { 
        tb.setText(bytesAvailable+ "ok"); 
        btSocket.getInputStream().read(packetBytes); 

          for(int i=0; i<bytesAvailable;i++) 
          { 
           if (packetBytes[i]==65) 
            tb.setText("ON"); 
           else if (packetBytes[i] ==90) 
            tb.setText("off"); 
          } 
         } 

      } catch (Exception e) { 

      } 


     } 
    } 
} 

아두 이노 코드를받지 못한 경우

#include<SoftwareSerial.h> 
    void setup() { 
    Serial3.begin(9600); 
    pinMode(13,OUTPUT); 
    digitalWrite(13,LOW); 
     } 

    void loop() { 

    char x=Serial3.read(); 
    if(x=='A') 
    { 
    digitalWrite(13,HIGH); 
     Serial3.print('A'); 
} 
if(x=='Z') 
{digitalWrite(13,LOW); 
Serial3.print('Z'); 
} 
} 
+0

arduino의 10 번 라인은 char (블록 작동?)을 읽으려고합니다. 안드로이드는 아무것도 보내지 않습니다. ?? – ABuckau

+0

안드로이드 폰이 보내지는데 문제가 없으며 시리얼 모니터에서 받았지만 문제는 안드로이드 @ABuckau에서 수신 중입니다. –

답변

1

스레드에서 textview를 업데이트하는 중 일부 예외가 발생해야합니다. catch 블록에 아무것도 인쇄하지 않았으므로 출력이나 오류 또는 아무 것도 표시되지 않습니다. 언제든지보기를 업데이트 할 수 없습니다 UI 스레드가 아닌 스레드.

 try { 
      int bytesAvailable = btSocket.getInputStream().available(); 

      byte []packetBytes= new byte[bytesAvailable]; 
      if (bytesAvailable > 0) { 
       tb.setText(bytesAvailable+ "ok"); 
       btSocket.getInputStream().read(packetBytes); 

         for(int i=0; i<bytesAvailable;i++) 
         { 
          if (packetBytes[i]==65) 
           tb.setText("ON"); 
          else if (packetBytes[i] ==90) 
           tb.setText("off"); 
         } 
        } 

     } catch (Exception e) { 
     // ADD THIS TO SEE ANY ERROR 
     e.printStackTrace();    
     } 

당신이 활동 클래스 내부 스레드를 실행하는 경우 당신은 실행이 다른 당신이 당신의 활동에 데이터를 전달하는 방송 수신기 또는 인터페이스를 사용하여 몇 가지 메커니즘을 구현해야

 runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       tb.setText("ON") 
      } 
     }); 

/텍스트 뷰runOnUiThread을 업데이트하십시오.