2016-09-27 57 views
0

我的工作這段代碼接收的Arduino的單個字母,我不能看到手機上的文本查看器的任何迴應時,我想的Arduino發送字母「A」顯示我的話「ON」如果發送「Z」顯示我關接收字符使用Android手機從Arduino的

注意,在文本查看器的詞,一直是Android手機的Arduino之間的連接成功和Android手機發送到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) { 

      } 


     } 
    } 
} 

Arduino的代碼

#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

Android手機發送並沒有問題,我從串行監視器接收,但問題是從Android的@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") 
      } 
     }); 

否則你必須使用廣播接收器或接口,爲數據傳遞給你的活動,以實現某種機制/用於更新的TextView內部runOnUiThread片段