主题 : 求高手帮我看这个读取串口数据的程序 复制链接 | 浏览器收藏 | 打印
gmail都被和谐了。。。
级别: 新手上路
UID: 38991
精华: 0
发帖: 43
金钱: 215 两
威望: 43 点
综合积分: 86 分
注册时间: 2011-03-03
最后登录: 2011-06-04
楼主  发表于: 2011-04-15 15:49

 求高手帮我看这个读取串口数据的程序


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import com.friendlyarm.AndroidSDK.HardwareControler;

public class TestActivity extends Activity {

    int fd;
    int select;
    int read;
    byte[] buf = new byte[20];
    private TextView result;
    private Button myBtn;
    String str = "";


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        result = (TextView)findViewById(R.id.resultTextView);

        fd = HardwareControler.openSerialPort("/dev/s3c2410_serial1", 9600, 8, 1);


        //查询信息
        myBtn = (Button)findViewById(R.id.Button01);
        myBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if( fd != -1 )
                {
                    select = HardwareControler.select(fd, 1, 0); //哪位大哥能给小弟解释一下这个函数啊?后面两个数,是不是表示1秒又0毫秒呀?

                    if( select == 1 )
                    {
                        read = HardwareControler.read(fd, buf, 20);
                        if( read != 0 && read != -1)
                        {
                            str = buf.toString();
                        }
                        else
                        {
                            str = "无数据可读,read失败";
                        }
                    }
                    else if(select == 0)
                    {
                        str = "无数据可读";
                    }
                }
                else
                {
                    str = "打开串口失败!";
                }
                result.setText(str);
            }
        });

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        HardwareControler.close(fd);
    }

程序的结构总是select=0,可是我的确给串口发了信息了,通过超级终端和串口调试助手都试过了。

谢谢各位!!
级别: 荣誉会员
UID: 34761
精华: 0
发帖: 1348
金钱: 6835 两
威望: 1367 点
综合积分: 2696 分
注册时间: 2010-12-21
最后登录: 2017-06-02
1楼  发表于: 2011-04-15 16:13
select = HardwareControler.select(fd, 1, 0);

1, 0 分别表示 秒和微秒,
上面的语句表示阻塞1秒钟去等数据到来,由于 1000微秒等于1毫秒,所以,要等待 100毫秒,即可以这么写:
select = HardwareControler.select(fd, 0, 100*1000);


BTW, 阻塞等待常用于工作线程中,如果在GUI中使用,会导致界面短暂僵死,所以一般情况下,应该将这两个参数设置为0,0,然后用TIMER去触发查询动作。
gmail都被和谐了。。。
级别: 新手上路
UID: 38991
精华: 0
发帖: 43
金钱: 215 两
威望: 43 点
综合积分: 86 分
注册时间: 2011-03-03
最后登录: 2011-06-04
2楼  发表于: 2011-04-15 18:26

 回 1楼(hacker) 的帖子

谢谢,我通过timer来读的话,相当于启用了新线程,我怎么从activity类中获得读出的数据呢?

哎 这个问题好像有点低级了,但是我确实遇到问题了,我怎么都读不出来。
级别: 荣誉会员
UID: 34761
精华: 0
发帖: 1348
金钱: 6835 两
威望: 1367 点
综合积分: 2696 分
注册时间: 2010-12-21
最后登录: 2017-06-02
3楼  发表于: 2011-04-15 18:32
timer并不是线程
gmail都被和谐了。。。
级别: 新手上路
UID: 38991
精华: 0
发帖: 43
金钱: 215 两
威望: 43 点
综合积分: 86 分
注册时间: 2011-03-03
最后登录: 2011-06-04
4楼  发表于: 2011-04-15 18:42

 回 3楼(hacker) 的帖子

是啊 ,可是不需要一个TimerTask么?
级别: 新手上路
UID: 40960
精华: 0
发帖: 20
金钱: 100 两
威望: 20 点
综合积分: 40 分
注册时间: 2011-03-24
最后登录: 2011-09-20
5楼  发表于: 2011-04-18 20:19
问下, com.friendlyarm.AndroidSDK.HardwareControler;    在哪里可以找到?
级别: 新手上路
UID: 68552
精华: 0
发帖: 23
金钱: 120 两
威望: 24 点
综合积分: 46 分
注册时间: 2012-04-24
最后登录: 2012-06-27
6楼  发表于: 2012-06-27 00:05
楼主问题解决了吗? 我也是和楼主一样,读不到数据~