主题 : Tiny210(Android)串口收发(测试通过) 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 26946
精华: 0
发帖: 14
金钱: 70 两
威望: 14 点
贡献值: 0 点
综合积分: 28 分
注册时间: 2010-08-17
最后登录: 2012-10-22
楼主  发表于: 2012-08-14 14:06

 Tiny210(Android)串口收发(测试通过)

Tiny210搭载Android2.3.1系统,Android程序实现对板子上的串口的读写。首先将友善之臂的非开源的libfriendlyarm-hardware.so文件导入工程:在源码文件夹下新建libs文件夹,在里面新建armeabi文件夹,拷贝libfriendlyarm-hardware.so到armeabi里面,然后在eclipse的工程目录上右击点Refresh;然后添加HardwareControler.java:新建名为com.friendlyarm.AndroidSDK的Package包,新建HardwareControler.java文件,然后将代码拷进去;最后写自己的Android应用程序。注意:路径不能有一点错误,因为友善之臂提供的是静态库,所以必须按照他们给定的路径来。
下面是读写串口的程序。
工程目录为:

Java主程序代码:
package com.android.zxw;
import java.util.Arrays;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.util.Xml.Encoding;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import com.friendlyarm.AndroidSDK.HardwareControler;

public class Zxw2Activity extends Activity {
     private TextView fdText;
     private EditText senddata;
     private EditText data1;
     private Button openSerial;
     private Button closeSerial;
     private Button sendSerial;
     private int fd;
     Handler handler=new Handler();
     Handler sendHandler=new Handler();
    
    
     Runnable runnable=new Runnable(){
         @Override
         public void run()
         {
             ReadSerial();
             //handler.postDelayed(this, 3000);
             handler.post(this);
         }
     };
    
     Runnable sendrunnable=new Runnable(){
         @Override
         public void run()
         {
             SendSerial();
             //handler.postDelayed(this, 3000);
             handler.post(this);
         }
     };
      
/**
*接收函数
*/
      public void ReadSerial(){
            //data1.setText(null);
            //System.out.println(fd);
            int m=HardwareControler.select(fd,2,20);
           // System.out.println("a");
            //System.out.println(m);
            if(m==1)
            {
               byte[] buf =new byte[10];
               try {
                Thread.sleep(90);
               } catch(InterruptedException e) {
                //TODO Auto-generated catch block
                e.printStackTrace();
               }
               int n=HardwareControler.read(fd, buf, buf.length);
              // System.out.println("b");
               //System.out.println(n);
               System.out.println(Arrays.toString(buf));
               data1.setText(data1.getText() + "  " + Arrays.toString(buf));
              }
         }
      
   @Override
   public void onCreate(Bundle savedInstanceState)
   {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.main);
           fdText=(TextView) findViewById(R.id.fdText);
           senddata=(EditText) findViewById(R.id.data);
           data1=(EditText) findViewById(R.id.data1);
           openSerial = (Button) findViewById(R.id.openSerial);
           closeSerial = (Button) findViewById(R.id.closeSerial);
           sendSerial = (Button) findViewById(R.id.sendSerial);
           /**
            * 软件运行就直接打开串口
            */
           //TODO Auto-generated method stub
           fd=HardwareControler.openSerialPort("/dev/s3c2410_serial3",115200,8,1);
           fdText.setText(Integer.toString(fd));
           handler.post(runnable);
           sendHandler.post(sendrunnable);
           // System.out.println("启动串口线程");
           fdText.setText(fdText.getText() + "打开线程");
    
          
       closeSerial.setOnClickListener(new Button.OnClickListener(){
           @Override
           public void onClick(View v) {
            //TODO Auto-generated method stub
            handler.removeCallbacks(runnable);
            HardwareControler.close(fd);
            fdText.setText("关闭串口");
           }
       });
      
       /**
        * 发送按钮
        */
       sendSerial.setOnClickListener(new Button.OnClickListener(){
          public void onClick(View v){
              SendSerial();
          }
       });
    }
  
   /**
    * 发送函数,直接调用友善之臂提供的函数接口
    * 我这里将(EditText)senddata中的内容变字符串再变bytes[]
    * 接收到的结果有点不对
    */
   public void SendSerial(){
       HardwareControler.write(fd,senddata.gettext().toString().getBytes());
    }
}

接收发送正常。
级别: 新手上路
UID: 70325
精华: 0
发帖: 34
金钱: 170 两
威望: 34 点
贡献值: 0 点
综合积分: 68 分
注册时间: 2012-05-18
最后登录: 2012-10-26
1楼  发表于: 2012-08-16 10:17
支持一下
级别: 新手上路
UID: 70325
精华: 0
发帖: 34
金钱: 170 两
威望: 34 点
贡献值: 0 点
综合积分: 68 分
注册时间: 2012-05-18
最后登录: 2012-10-26
2楼  发表于: 2012-08-16 10:27
lz我也尝试写了一个,但是我一调用select的时候,马上就一直阻塞在那里了,界面上的按钮都不能选择。。
级别: 新手上路
UID: 70325
精华: 0
发帖: 34
金钱: 170 两
威望: 34 点
贡献值: 0 点
综合积分: 68 分
注册时间: 2012-05-18
最后登录: 2012-10-26
3楼  发表于: 2012-08-16 14:12
我现在光读不写了,但是接收后也是一串乱码
级别: 新手上路
UID: 26946
精华: 0
发帖: 14
金钱: 70 两
威望: 14 点
贡献值: 0 点
综合积分: 28 分
注册时间: 2010-08-17
最后登录: 2012-10-22
4楼  发表于: 2012-08-24 14:54

 回 3楼(bottles) 的帖子

没有啊,接手过来后都是转换成10进制显示了。字母a就显示61还是什么的
级别: 新手上路
UID: 70325
精华: 0
发帖: 34
金钱: 170 两
威望: 34 点
贡献值: 0 点
综合积分: 68 分
注册时间: 2012-05-18
最后登录: 2012-10-26
5楼  发表于: 2012-08-24 17:44
lz我感觉你写的绝对有问题,这样等于读写都是在一个线程里的
级别: 新手上路
UID: 89387
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2013-03-27
最后登录: 2013-07-05
6楼  发表于: 2013-07-04 15:42
楼主 我也试着写了一个读串口2的 android小程序 用来读GPS数据序   可是 不论怎么弄 每次都只读回来 4个字节    但是用自带的 iTest每次就能读正确
级别: 新手上路
UID: 79927
精华: 0
发帖: 45
金钱: 225 两
威望: 45 点
贡献值: 0 点
综合积分: 90 分
注册时间: 2012-10-16
最后登录: 2017-09-13
7楼  发表于: 2013-08-03 20:44
级别: 新手上路
UID: 79927
精华: 0
发帖: 45
金钱: 225 两
威望: 45 点
贡献值: 0 点
综合积分: 90 分
注册时间: 2012-10-16
最后登录: 2017-09-13
8楼  发表于: 2013-08-03 21:06
我开发板运行了后 就死机了额 不要酱紫啊  
级别: 新手上路
UID: 79927
精华: 0
发帖: 45
金钱: 225 两
威望: 45 点
贡献值: 0 点
综合积分: 90 分
注册时间: 2012-10-16
最后登录: 2017-09-13
9楼  发表于: 2013-08-09 20:00
还是来看看我写的吧 哈哈
我写好了~~~~
http://liuzongming1988.iteye.com/admin/blogs/1922200