2016-09-27 32 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片段