小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 10022|回复: 6

求助:安卓手机无法接收openwrt串口返回的数据

[复制链接]
发表于 2013-6-21 21:20:04 | 显示全部楼层 |阅读模式
/etc/inittab 这个文件已经修改过了,用串口调试软件已经调试有数据返回的,如下图
111.png

哪位仁兄给点帮助成分感谢,
代码用的是论坛里的代码,代码权限已加,如下public class MessageActivity extends Activity {
    /** Called when the activity is first created. */
        private static final String        TAG        = "MessageActivity";
        private Socket socket ;
        static PrintWriter mPrintWriter ;
        static BufferedReader br        ;
        private Thread mThread=null;
        private String msg="";
        public TextView textview2;
        
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button button2 = (Button) findViewById(R.id.button2);//设置按钮,按下后给服务器发送数据

         textview2=(TextView)findViewById(R.id.textview2);//显示从服务器传来的数据

        try
                {  
                        socket=new Socket("10.10.100.254",8899);
                    br =new BufferedReader(new InputStreamReader(socket.getInputStream()));  //获得输出流
                    mPrintWriter=new PrintWriter(socket.getOutputStream(),true);  //获得输入流
                }   
        catch(Exception e)
                {
                        Log.e(TAG,e.toString());
                }

        button2.setOnTouchListener(new Button.OnTouchListener()   //给button2 设置监听
                {
                                public boolean onTouch(View v, MotionEvent event) {
                                        int action = event.getAction();
                                        switch(action)
                                        {
                                        case MotionEvent.ACTION_DOWN:
                                                    mPrintWriter.print("f");
                                                    mPrintWriter.print("\r");
                                                    mPrintWriter.print("\n");//前进         
                                                    mPrintWriter.flush();                                    
                                        break;
                                        case MotionEvent.ACTION_UP:
                                                    mPrintWriter.print("0");     
                                                    mPrintWriter.print("\r");
                                                    mPrintWriter.print("\n");
                                                    mPrintWriter.flush();                                                        
                                        }
                                        return false;
                        }
                });

        mThread= new Thread(mRunnable);  //创建一个新的线程
        mThread.start();   //开启新的线程

    }

    private Runnable mRunnable = new Runnable()  //通过Runnable接口创建线程,来处理从服务器传来的数据
    {
            public void run()
            {
                    while (true)
                    {
                            try
                            {
                                    if((msg=br.readLine())!=null)
                                    {
                                            mHandler.sendMessage(mHandler.obtainMessage());
                                    }
                            }
                            catch(Exception e)
                            {
                                    Log.e(TAG,e.toString());
                            }
                    }
            }
    };

    Handler mHandler=new Handler()   //处理传来的数据
    {
            public void handleMessage( Message Msg)
            {
                    super.handleMessage(Msg);
                    try
                    {
                            textview2.setText(msg);
                    }
                    catch(Exception e)
                    {
                            Log.e(TAG,e.toString());
                    }
            }
    };
}

回复

使用道具 举报

发表于 2013-6-21 21:53:37 | 显示全部楼层
加个LOG打印到线程里面看看,有没有读到数据。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-21 22:04:54 | 显示全部楼层
自己顶一下,困扰好几天了!.....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-22 00:01:47 | 显示全部楼层
应该是代码有问题吧,在红色代码处总是卡住了,不往下走了
        public void run() {
                         Log.i("run", "start");
                        while (true) {
                                try {
                                        if ((msg = br.readLine()) != null) {
                                                 Log.i("oncreate", msg);
//                                                textview2.setText(msg);
                                                mHandler.sendMessage(mHandler.obtainMessage());
                                        }
                                } catch (Exception e) {
                                        //Log.e(TAG, e.toString());
                                }
                        }
                }
        };
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-22 00:15:08 | 显示全部楼层
问题解决了,错误有两种状况,
一种是端口已被使用,解决办法在退出的时候关闭sock
一种是卡到上面所说红色代码的地方,是因为自己传的指令是用arduino的write指令,传输的数据没有换行,数据太长了,所以慢,最后用println方法每条指令后会加个换行,这样就正常读取了!
回复 支持 反对

使用道具 举报

发表于 2013-6-22 09:39:55 | 显示全部楼层
太高深了   不明白
回复 支持 反对

使用道具 举报

发表于 2013-6-23 13:07:04 | 显示全部楼层
研究研究吧!够高深的!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-11-23 00:07 , Processed in 1.107772 second(s), 21 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

快速回复 返回顶部 返回列表