从arduino使用Android手机接收角色

时间:2016-09-27 11:06:52

标签: android arduino android-bluetooth

我使用此代码接收arduino的单个字母我在电话文本查看器上看不到任何响应当我想要arduino发送字母'A'显示单词'ON'并且如果发送'Z'显示我关闭文本查看器中的单词

请注意,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');
}
}

1 个答案:

答案 0 :(得分: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