打印
[开源硬件]

实践课做的小东西----心动时刻

[复制链接]
8960|37
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
SSNB|  楼主 | 2015-1-19 11:52 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

心动时刻,听名字就应该能猜出几分是干嘛的吧。对他就是一个测心跳的,主要是通过心跳模块检查血管收缩,从而判定心跳。
废话不多少,看看具体的吧。

开发环境:android ,java

流程图:
服务端

手机端

效果图
服务端


手机端


楼下源码。。。居然不让我上传附件
评分
参与人数 2威望 +14 收起 理由
tyw + 8 很给力!
ocon + 6 很给力!

相关帖子

沙发
SSNB|  楼主 | 2015-1-19 11:56 | 只看该作者
服务端
package blq.ssnb.test;

import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.UnsupportedCommOperationException;

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.Enumeration;

public class test {
        static CommPortIdentifier portId=null;//串口id
        static InputStream inputStream;//串口输出流
        static SerialPort serialPort=null;//串口端口
        static String ms;//用来存放手机端读取的信息
        static String mes;//用来存储串口中读取的数据
        static boolean accept=true;//控制是否获取新的接口
        public static void main(String[] args) {
                int btl = 115200;//比特率
                StartComm(btl);//串口连接初始化
                try {
                        Thread.sleep(2000);
                } catch (InterruptedException e) {
                        e.printStackTrace();
                }
                StartSocket();//开始socket连接
        }
        private static void StartSocket() {
                Socket socket =null;
                int nub;//用来存放心跳数
                String message="";//存放socket输出流数据
                try {
                        ServerSocket ss=new ServerSocket(6543);//实例化socket监听6543端口
                        int bb,i=0;
                        byte[] tt=new byte [10];
                        try {
                                while(true){
                                        message="";
                                        if(accept){
                                                System.out.println("等待接入");
                                                socket=ss.accept();
                                        }
                                        i=0;
                                        for(int j = 0; j <10;j++){
                                                bb=inputStream.read();//读取串口数据
                                                if(bb!=-1){
                                                        tt[i]=(byte)bb;
                                                        i++;
                                                }else{
                                                        break;
                                                }
                                        }
                                        mes=new String(tt,"utf-8");
                                        mes=mes.trim();
                                        if(mes!=null&&!(mes.equals(""))){
                                                tt = new byte[10];
                                                try{
                                                        nub=Integer.parseInt(mes);
                                                        if(nub>=140){
                                                                message="你马上就要自爆了,拜拜。|";
                                                        }else if(nub<140&&nub>=120){
                                                                message="心跳这么快,你快要挂了!|";
                                                        }else if(nub<120&&nub>=90){
                                                                message="是不是看到喜欢的女的啦!|";
                                                        }else if(nub<90&&nub>=60){
                                                                message="恭喜你,你是正常人!|";
                                                        }else if(nub<60&&nub>=50){
                                                                message="只有老头和运动员才这么低。|";
                                                        }else if(nub<50){
                                                                message="你已经没救了,拜拜。|";
                                                        }                                                       
                                                        message+=mes;
                                                        System.out.println(message);
                                                        ObjectInputStream ois = null ;
                                                        try{
                                                                ois= new ObjectInputStream(socket.getInputStream());//实例化输入流
                                                        }
                                                        catch (Exception e){
                                                                System.out.println("连接关闭");
                                                                accept=true;
                                                                continue;
                                                        }
                                                        ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());//实例化输出流
                                                        ms = (String)ois.readObject();//流中数据
                                                        if(ms.equals("1")){
                                                                accept=false;
                                                                oos.writeObject(message);//写出流
                                                                Thread.sleep(100);
                                                        }else{
                                                                accept=true;
                                                        }
                                                }catch(Exception e){
                                                        accept=false;
                                                }
                                        }
                                }                       
                        } catch (Exception e) {
                                e.printStackTrace();
                               
                        }

                }catch (Exception e) {
                        System.out.println("端口被占用了");
                }
        }
        private static void StartComm(int btl) {

                try {
                        portId = CommPortIdentifier.getPortIdentifier("COM14");
                        serialPort =(SerialPort)portId.open(portId.getName(),2000);//
                        serialPort.notifyOnDataAvailable(true);
                        serialPort.setSerialPortParams(btl, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);//
                        inputStream =serialPort.getInputStream();//串口输入流

                } catch (PortInUseException e) {
                        System.out.println("串口名出错了");
                        e.printStackTrace();
                } catch (UnsupportedCommOperationException e) {
                        System.out.println("波特率出错了");
                        e.printStackTrace();
                } catch (IOException e) {
                        System.out.println("读入数据出错了");
                        e.printStackTrace();
                } catch (NoSuchPortException e) {
                        e.printStackTrace();
                }
        }
}

使用特权

评论回复
板凳
SSNB|  楼主 | 2015-1-19 11:57 | 只看该作者
手机端

MainActivity

package com.example.xdsk;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import android.R.integer;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;


public class MainActivity extends Activity {
        private List<Integer> data = new ArrayList<Integer>();//存放服务器获得数据
        private String ips="10.23.42.16";
        private int dk=6543;
        private String l="";
        private TextView text,zt,xt;
        private String  key ="0";//表示当前是否连接状态
        private Handler hd ;
        private Button bt1;//开关连接按钮
        private int js=0, MaxDataSize;//max最大的数据数
        private drawplan view;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                if (android.os.Build.VERSION.SDK_INT > 9) {
                        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
                        StrictMode.setThreadPolicy(policy);
                }
                LinearLayout root =(LinearLayout)findViewById(R.id.plan);
                view= new drawplan(this, null);
                MaxDataSize=view.getMaxData();
                root.addView(view);
                bt1= (Button)findViewById(R.id.bt1);       
                text = (TextView)findViewById(R.id.t1);
                text.setText("ip:"+ips+"  端口:"+dk);
                zt=(TextView)findViewById(R.id.t2);
                xt=(TextView)findViewById(R.id.t3);
                bt1.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                if(key.equals("0")){
                                        key="1";
                                        Star();
                                        bt1.setText("断开连接");                                       
                                }else{
                                        key="0";
                                        bt1.setText("开始连接");
                                }
                                Log.e("btn", "-----------");
                        }
                });
                hd = new Handler(){
                        public void handleMessage(Message msg){
                                super.handleMessage(msg);
                                switch(msg.what){
                                case 1:
                                        if(js==0){
                                                String tt[]=l.split("\\|");
                                                zt.setText(tt[0]);
                                                xt.setText(tt[1]);
                                                draw(tt[1]);
                                        }else if(js==3){
                                                js=0;
                                        }else{
                                                js++;
                                        }
                                        break;
                                default:break;
                                }
                        }

                };
        }
        protected void draw(String tt) {
                if(data.size() >= MaxDataSize){
                        data.remove(0);//如果存入的数据超过最大值那么就移除第一个
                }
                int a=Integer.parseInt(tt);
                if(a>=150){a=150;}
                data.add(a/10);
                view.adddata(data);//刷新画板
        }


        public void Star(){

                final Socket s = new Socket();
                try {
                        s.connect(new InetSocketAddress(ips,dk),0);
                } catch (IOException e1) {
                        e1.printStackTrace();
                }
                new Thread(new Runnable() {
                        @Override
                        public void run() {
                                String m ;
                                while(true){
                                        try {
                                                ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
                                                oos.writeObject(key);
                                                ObjectInputStream ois =new ObjectInputStream(s.getInputStream());
                                                m=(String)ois.readObject();
                                                l=m;
                                               
                                                Message mes = hd.obtainMessage(1);
                                                hd.sendMessage(mes);
                                                Thread.sleep(100);
                                                if(key.equals("0")){
                                                        break;
                                                }
                                        } catch (IOException e) {
                                                e.printStackTrace();
                                        } catch (ClassNotFoundException e) {
                                                e.printStackTrace();
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                }
                        }
                }).start();
                Log.e("end", "end");
        }
}

//画图
Drawplan
package com.example.xdsk;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

/**
*
* [url=home.php?mod=space&uid=187600]@author[/url] BLQ-SSBN
*        继承View实现界面下方画图
*/
public class drawplan extends View {
        private int XPoint = 40;
        private int YPoint = 485;
        private int XScale = 20;  //刻度长度
        private int YScale = 28;
        private int XLength = 1000;
        private int YLength = 420;
        private int MaxDataSize = XLength / XScale;
        private List<Integer> data = new ArrayList<Integer>(); //list存放从服务器获得的数据
        //返回存储数据个数
        public int getMaxData(){
                return MaxDataSize;
        }
        public drawplan(Context context, AttributeSet attrs) {
                super(context, attrs);
        }
       
       
        //画界面
        @Override
        protected void onDraw(Canvas canvas) {
                super.onDraw(canvas);
                Paint paint = new Paint();
                paint.setStyle(Paint.Style.STROKE);
                paint.setAntiAlias(true); //去锯齿
                paint.setColor(Color.BLUE); //画笔颜色
                //画y轴
                canvas.drawLine(XPoint, YPoint - YLength, XPoint, YPoint, paint);
                //画y轴上的尖尖头
                canvas.drawLine(XPoint, YPoint - YLength, XPoint - 3, YPoint-YLength + 6, paint);
                canvas.drawLine(XPoint, YPoint - YLength, XPoint + 3, YPoint-YLength + 6 ,paint);
                //画x轴
                canvas.drawLine(XPoint, YPoint, XPoint + XLength, YPoint, paint);
                //这里将list里的数据画出来
                if(data.size() > 1){
                        for(int i=1; i<data.size(); i++){
                                canvas.drawLine(XPoint + (i-1) * XScale, YPoint - data.get(i-1) * YScale,  
                                                XPoint + i * XScale, YPoint - data.get(i) * YScale, paint);
                        }
                }
        }
        //调用adddata 将数据传入并调用界面刷新
        public void adddata(List<Integer> data2) {
                this.data=data2;
                drawplan.this.invalidate();
        }
}

使用特权

评论回复
评论
逍遥李 2015-2-5 21:01 回复TA
很不错的想法!楼主你传感器什么型号?多少钱买的? 
地板
BIG_UNCLE| | 2015-1-19 12:17 | 只看该作者
66666666666

使用特权

评论回复
5
yinlitansuo| | 2015-1-19 12:25 | 只看该作者
:lol

使用特权

评论回复
6
yinlitansuo| | 2015-1-19 14:26 | 只看该作者
源码打包才能上传哦!

使用特权

评论回复
7
SSNB|  楼主 | 2015-1-19 16:59 | 只看该作者
yinlitansuo 发表于 2015-1-19 14:26
源码打包才能上传哦!

初来乍到,不懂啊。

使用特权

评论回复
8
yinlitansuo| | 2015-1-19 17:02 | 只看该作者
本帖最后由 yinlitansuo 于 2015-1-19 17:04 编辑

视频!

使用特权

评论回复
9
好难瘦~| | 2015-1-19 17:09 | 只看该作者
yinlitansuo 发表于 2015-1-19 17:02
视频!

捉急~~

使用特权

评论回复
10
我爱你的吻123| | 2015-1-19 22:28 | 只看该作者
好东西,赞一个!

使用特权

评论回复
11
mark301600| | 2015-1-20 09:30 | 只看该作者
我上学时只会打魔兽

使用特权

评论回复
12
icekoor| | 2015-1-22 08:42 | 只看该作者
不错,赞……

使用特权

评论回复
13
xygyszb| | 2015-1-22 09:06 | 只看该作者
赞一个

使用特权

评论回复
14
dirtwillfly| | 2015-1-22 22:20 | 只看该作者
不错

使用特权

评论回复
15
icecut| | 2015-1-25 21:42 | 只看该作者
未来是要测**的节奏啊

使用特权

评论回复
16
wang168506| | 2015-1-26 08:40 | 只看该作者
这个界面显示标语,哥也是醉了

使用特权

评论回复
17
cos12a| | 2015-1-26 12:24 | 只看该作者
mark301600 发表于 2015-1-20 09:30
我上学时只会打魔兽

上学打星际的顶一个.

使用特权

评论回复
18
dream2mit| | 2015-1-29 17:08 | 只看该作者
攒下:)

使用特权

评论回复
19
wddzyjcx0755| | 2015-1-29 20:43 | 只看该作者
这么多语句啊,我才学习几个汇编的指令,看着就发麻。

使用特权

评论回复
20
wtzc| | 2015-1-30 13:34 | 只看该作者
哎呦 不错哦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

2

粉丝