[开源硬件] 实践课做的小东西----心动时刻

[复制链接]
6193|37
 楼主 | 2015-1-19 11:52 | 显示全部楼层 |阅读模式
http://player.youku.com/player.php/sid/XODc0OTM5Mzk2/v.swf
心动时刻,听名字就应该能猜出几分是干嘛的吧。对他就是一个测心跳的,主要是通过心跳模块检查血管收缩,从而判定心跳。
废话不多少,看看具体的吧。

开发环境:android ,java

流程图:
服务端

手机端

效果图
服务端


手机端


楼下源码。。。居然不让我上传附件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 2威望 +14 收起 理由
tyw + 8 很给力!
ocon + 6 很给力!
 楼主 | 2015-1-19 11:56 | 显示全部楼层
  1. 服务端
  2. package blq.ssnb.test;

  3. import gnu.io.CommPortIdentifier;
  4. import gnu.io.NoSuchPortException;
  5. import gnu.io.PortInUseException;
  6. import gnu.io.SerialPort;
  7. import gnu.io.UnsupportedCommOperationException;

  8. import java.io.IOException;
  9. import java.io.InputStream;
  10. import java.io.ObjectInputStream;
  11. import java.io.ObjectOutputStream;
  12. import java.net.ServerSocket;
  13. import java.net.Socket;
  14. import java.util.Date;
  15. import java.util.Enumeration;

  16. public class test {
  17.         static CommPortIdentifier portId=null;//串口id
  18.         static InputStream inputStream;//串口输出流
  19.         static SerialPort serialPort=null;//串口端口
  20.         static String ms;//用来存放手机端读取的信息
  21.         static String mes;//用来存储串口中读取的数据
  22.         static boolean accept=true;//控制是否获取新的接口
  23.         public static void main(String[] args) {
  24.                 int btl = 115200;//比特率
  25.                 StartComm(btl);//串口连接初始化
  26.                 try {
  27.                         Thread.sleep(2000);
  28.                 } catch (InterruptedException e) {
  29.                         e.printStackTrace();
  30.                 }
  31.                 StartSocket();//开始socket连接
  32.         }
  33.         private static void StartSocket() {
  34.                 Socket socket =null;
  35.                 int nub;//用来存放心跳数
  36.                 String message="";//存放socket输出流数据
  37.                 try {
  38.                         ServerSocket ss=new ServerSocket(6543);//实例化socket监听6543端口
  39.                         int bb,i=0;
  40.                         byte[] tt=new byte [10];
  41.                         try {
  42.                                 while(true){
  43.                                         message="";
  44.                                         if(accept){
  45.                                                 System.out.println("等待接入");
  46.                                                 socket=ss.accept();
  47.                                         }
  48.                                         i=0;
  49.                                         for(int j = 0; j <10;j++){
  50.                                                 bb=inputStream.read();//读取串口数据
  51.                                                 if(bb!=-1){
  52.                                                         tt[i]=(byte)bb;
  53.                                                         i++;
  54.                                                 }else{
  55.                                                         break;
  56.                                                 }
  57.                                         }
  58.                                         mes=new String(tt,"utf-8");
  59.                                         mes=mes.trim();
  60.                                         if(mes!=null&&!(mes.equals(""))){
  61.                                                 tt = new byte[10];
  62.                                                 try{
  63.                                                         nub=Integer.parseInt(mes);
  64.                                                         if(nub>=140){
  65.                                                                 message="你马上就要自爆了,拜拜。|";
  66.                                                         }else if(nub<140&&nub>=120){
  67.                                                                 message="心跳这么快,你快要挂了!|";
  68.                                                         }else if(nub<120&&nub>=90){
  69.                                                                 message="是不是看到喜欢的女的啦!|";
  70.                                                         }else if(nub<90&&nub>=60){
  71.                                                                 message="恭喜你,你是正常人!|";
  72.                                                         }else if(nub<60&&nub>=50){
  73.                                                                 message="只有老头和运动员才这么低。|";
  74.                                                         }else if(nub<50){
  75.                                                                 message="你已经没救了,拜拜。|";
  76.                                                         }                                                       
  77.                                                         message+=mes;
  78.                                                         System.out.println(message);
  79.                                                         ObjectInputStream ois = null ;
  80.                                                         try{
  81.                                                                 ois= new ObjectInputStream(socket.getInputStream());//实例化输入流
  82.                                                         }
  83.                                                         catch (Exception e){
  84.                                                                 System.out.println("连接关闭");
  85.                                                                 accept=true;
  86.                                                                 continue;
  87.                                                         }
  88.                                                         ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());//实例化输出流
  89.                                                         ms = (String)ois.readObject();//流中数据
  90.                                                         if(ms.equals("1")){
  91.                                                                 accept=false;
  92.                                                                 oos.writeObject(message);//写出流
  93.                                                                 Thread.sleep(100);
  94.                                                         }else{
  95.                                                                 accept=true;
  96.                                                         }
  97.                                                 }catch(Exception e){
  98.                                                         accept=false;
  99.                                                 }
  100.                                         }
  101.                                 }                       
  102.                         } catch (Exception e) {
  103.                                 e.printStackTrace();
  104.                                
  105.                         }

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

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

  117.                 } catch (PortInUseException e) {
  118.                         System.out.println("串口名出错了");
  119.                         e.printStackTrace();
  120.                 } catch (UnsupportedCommOperationException e) {
  121.                         System.out.println("波特率出错了");
  122.                         e.printStackTrace();
  123.                 } catch (IOException e) {
  124.                         System.out.println("读入数据出错了");
  125.                         e.printStackTrace();
  126.                 } catch (NoSuchPortException e) {
  127.                         e.printStackTrace();
  128.                 }
  129.         }
  130. }
复制代码
 楼主 | 2015-1-19 11:57 | 显示全部楼层
  1. 手机端

  2. MainActivity

  3. package com.example.xdsk;

  4. import java.io.IOException;
  5. import java.io.ObjectInputStream;
  6. import java.io.ObjectOutputStream;
  7. import java.net.InetSocketAddress;
  8. import java.net.Socket;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import java.util.Random;

  12. import android.R.integer;
  13. import android.annotation.SuppressLint;
  14. import android.app.Activity;
  15. import android.os.Bundle;
  16. import android.os.Handler;
  17. import android.os.Message;
  18. import android.os.StrictMode;
  19. import android.util.Log;
  20. import android.view.Menu;
  21. import android.view.View;
  22. import android.view.View.OnClickListener;
  23. import android.view.WindowManager;
  24. import android.widget.Button;
  25. import android.widget.LinearLayout;
  26. import android.widget.TextView;


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

  56.                         @Override
  57.                         public void onClick(View v) {
  58.                                 if(key.equals("0")){
  59.                                         key="1";
  60.                                         Star();
  61.                                         bt1.setText("断开连接");                                       
  62.                                 }else{
  63.                                         key="0";
  64.                                         bt1.setText("开始连接");
  65.                                 }
  66.                                 Log.e("btn", "-----------");
  67.                         }
  68.                 });
  69.                 hd = new Handler(){
  70.                         public void handleMessage(Message msg){
  71.                                 super.handleMessage(msg);
  72.                                 switch(msg.what){
  73.                                 case 1:
  74.                                         if(js==0){
  75.                                                 String tt[]=l.split("\\|");
  76.                                                 zt.setText(tt[0]);
  77.                                                 xt.setText(tt[1]);
  78.                                                 draw(tt[1]);
  79.                                         }else if(js==3){
  80.                                                 js=0;
  81.                                         }else{
  82.                                                 js++;
  83.                                         }
  84.                                         break;
  85.                                 default:break;
  86.                                 }
  87.                         }

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


  99.         public void Star(){

  100.                 final Socket s = new Socket();
  101.                 try {
  102.                         s.connect(new InetSocketAddress(ips,dk),0);
  103.                 } catch (IOException e1) {
  104.                         e1.printStackTrace();
  105.                 }
  106.                 new Thread(new Runnable() {
  107.                         @Override
  108.                         public void run() {
  109.                                 String m ;
  110.                                 while(true){
  111.                                         try {
  112.                                                 ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
  113.                                                 oos.writeObject(key);
  114.                                                 ObjectInputStream ois =new ObjectInputStream(s.getInputStream());
  115.                                                 m=(String)ois.readObject();
  116.                                                 l=m;
  117.                                                
  118.                                                 Message mes = hd.obtainMessage(1);
  119.                                                 hd.sendMessage(mes);
  120.                                                 Thread.sleep(100);
  121.                                                 if(key.equals("0")){
  122.                                                         break;
  123.                                                 }
  124.                                         } catch (IOException e) {
  125.                                                 e.printStackTrace();
  126.                                         } catch (ClassNotFoundException e) {
  127.                                                 e.printStackTrace();
  128.                                         } catch (InterruptedException e) {
  129.                                                 e.printStackTrace();
  130.                                         }
  131.                                 }
  132.                         }
  133.                 }).start();
  134.                 Log.e("end", "end");
  135.         }
  136. }

  137. //画图
  138. Drawplan
  139. package com.example.xdsk;

  140. import java.util.ArrayList;
  141. import java.util.List;
  142. import java.util.Random;

  143. import android.content.Context;
  144. import android.graphics.Canvas;
  145. import android.graphics.Color;
  146. import android.graphics.Paint;
  147. import android.graphics.Path;
  148. import android.graphics.Rect;
  149. import android.os.Handler;
  150. import android.os.Message;
  151. import android.util.AttributeSet;
  152. import android.util.Log;
  153. import android.view.View;

  154. /**
  155. *
  156. * [url=home.php?mod=space&uid=187600]@author[/url] BLQ-SSBN
  157. *        继承View实现界面下方画图
  158. */
  159. public class drawplan extends View {
  160.         private int XPoint = 40;
  161.         private int YPoint = 485;
  162.         private int XScale = 20;  //刻度长度
  163.         private int YScale = 28;
  164.         private int XLength = 1000;
  165.         private int YLength = 420;
  166.         private int MaxDataSize = XLength / XScale;
  167.         private List<Integer> data = new ArrayList<Integer>(); //list存放从服务器获得的数据
  168.         //返回存储数据个数
  169.         public int getMaxData(){
  170.                 return MaxDataSize;
  171.         }
  172.         public drawplan(Context context, AttributeSet attrs) {
  173.                 super(context, attrs);
  174.         }
  175.        
  176.        
  177.         //画界面
  178.         @Override
  179.         protected void onDraw(Canvas canvas) {
  180.                 super.onDraw(canvas);
  181.                 Paint paint = new Paint();
  182.                 paint.setStyle(Paint.Style.STROKE);
  183.                 paint.setAntiAlias(true); //去锯齿
  184.                 paint.setColor(Color.BLUE); //画笔颜色
  185.                 //画y轴
  186.                 canvas.drawLine(XPoint, YPoint - YLength, XPoint, YPoint, paint);
  187.                 //画y轴上的尖尖头
  188.                 canvas.drawLine(XPoint, YPoint - YLength, XPoint - 3, YPoint-YLength + 6, paint);
  189.                 canvas.drawLine(XPoint, YPoint - YLength, XPoint + 3, YPoint-YLength + 6 ,paint);
  190.                 //画x轴
  191.                 canvas.drawLine(XPoint, YPoint, XPoint + XLength, YPoint, paint);
  192.                 //这里将list里的数据画出来
  193.                 if(data.size() > 1){
  194.                         for(int i=1; i<data.size(); i++){
  195.                                 canvas.drawLine(XPoint + (i-1) * XScale, YPoint - data.get(i-1) * YScale,  
  196.                                                 XPoint + i * XScale, YPoint - data.get(i) * YScale, paint);
  197.                         }
  198.                 }
  199.         }
  200.         //调用adddata 将数据传入并调用界面刷新
  201.         public void adddata(List<Integer> data2) {
  202.                 this.data=data2;
  203.                 drawplan.this.invalidate();
  204.         }
  205. }
复制代码

评论

逍遥李 2015-2-5 21:01 回复TA
很不错的想法!楼主你传感器什么型号?多少钱买的? 
| 2015-1-19 12:17 | 显示全部楼层
66666666666
| 2015-1-19 12:25 | 显示全部楼层
:lol
| 2015-1-19 14:26 | 显示全部楼层
源码打包才能上传哦!
 楼主 | 2015-1-19 16:59 | 显示全部楼层
yinlitansuo 发表于 2015-1-19 14:26
源码打包才能上传哦!

初来乍到,不懂啊。
| 2015-1-19 17:02 | 显示全部楼层
本帖最后由 yinlitansuo 于 2015-1-19 17:04 编辑

视频!
| 2015-1-19 17:09 | 显示全部楼层
yinlitansuo 发表于 2015-1-19 17:02
视频!

捉急~~
| 2015-1-19 22:28 | 显示全部楼层
好东西,赞一个!
| 2015-1-20 09:30 | 显示全部楼层
我上学时只会打魔兽
| 2015-1-22 08:42 | 显示全部楼层
不错,赞……
| 2015-1-22 09:06 | 显示全部楼层
赞一个
| 2015-1-22 22:20 | 显示全部楼层
不错
| 2015-1-25 21:42 | 显示全部楼层
未来是要测**的节奏啊
| 2015-1-26 08:40 | 显示全部楼层
这个界面显示标语,哥也是醉了
| 2015-1-26 12:24 | 显示全部楼层
mark301600 发表于 2015-1-20 09:30
我上学时只会打魔兽

上学打星际的顶一个.
| 2015-1-29 17:08 | 显示全部楼层
攒下:)
| 2015-1-29 20:43 | 显示全部楼层
这么多语句啊,我才学习几个汇编的指令,看着就发麻。
| 2015-1-30 13:34 | 显示全部楼层
哎呦 不错哦
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /7 下一条

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