当前位置: 首页 > news >正文

一个Java读取串口值的类(收藏)


这是一个通过JAVA的扩展包(javax.comm)从串口读取值的类,
本类库(javax.comm)主要包括:
SerialBean.java (与其他应用程序的接口),
SerialBuffer.java (用来保存从串口所接收数据的缓冲区),
ReadSerial.java (从串口读取数据的程序)。


整个类的设计思路大概就是:
实现一个线程一直在监听串口中是否有数据传送过来,
如果有的话开始拍照,并取得照片后,直接打印出来。因为涉及到商业秘密,所以拍照函数和取得照片函数采用的是空函数,请见谅!
若要运行此函数必须下载该扩展包,并加载到你的CLASSPATH下。当然,你若要测试并运行此类的话。可能要花费不少的精力。
如果你只有一台机器,你可以利用一条RS-232电缆将COM1和COM2连接起来,在COM1上运行SerialExample,在COM2上运行Windows提供的超级终端程序。
如果你有两台机器的话,你可以利用一条RS-232电缆将两台机器的COM1(或者是COM2)连接起来,在一端运行例程,另外一端运行Windows提供的超级终端程序。

该类有相当详细的注释。我想应该不难理解吧!

import java.io.*;
import java.awt.*;
import java.awt.print.*;
import javax.print.*;
import javax.comm.*; //这是一个Java扩展类库,并不包括在标准的Java SDK当中。
//如果你尚未安装这个扩展类那么你需要到sun公司的Java站点下载这个类库

class SuanKou implements Runnable{
private java.io.FileOutputStream fos=null;
private Thread th=null;
private long shiJian=500;//设置间隔的时间
//private int duanKou=1;//设置端口号
private String Msg = null;
private SerialBean SB=null;
private int isSucces=-1;

//构造函数
public SuanKou(long sj,int dk) {
System.out.println("构造函数");
try{
fos=new java.io.FileOutputStream("c:\\log.txt");

this.shiJian=sj;//设定监听端口的时间

//this.duanKou=dk;//端口号

SB = new SerialBean(dk);//创建一个接口对象,参数为端口号

isSucces = SB.Initialize();//初使化所指定的串口并返回初始化结果。如果初始化成功返回1,否则返回-1

th=new Thread(this);//创建一个线程对象

th.start();//创建SuanKou这个对象就开始启动线程
}catch(java.io.FileNotFoundException fe){
fe.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
}

//拍照函数
public void snape() {
System.out.println("拍照函数");
}

//取得照片函数
public void getPicture() {
System.out.println("取得照片函数");

}

//实现线程接口的RUN方法
public void run(){
Thread.sleep(shiJian);
this.ReadSuanKou();
}

//定期到串口读取数据和函数,如果能读到数据就调用snape(),getPicture(),函数,写日志,打印
private void ReadSuanKou() {

//如果初使化成功的话,
if (isSucces == 1) {

//从串口(缓冲区)中读取指定长度的一个字符串。(500)

try{

Msg = SB.ReadPort(500);

//如果可以从串口读到数据的话

if (Msg != null) {
this.snape();//调用拍照函数

this.getPicture();//调用取得照片函数

java.text.SimpleDateFormat df=new java.text.SimpleDateFormat("EEEE-MMMM-dd-yyyy");

Date date=new Date();

String dateFormat=df.format(date);

fos.write(dateFormat.getBytes());//在日志文件中记录当前时间

fos.write(Msg.getBytes());//将读到的数据写到日志文件中

//调用打印方法 注:若要打印,要打印的对象必须实现java.awt.print.Printable接口。即getPicture

//返回的对象必须实现该接口,因为不知道getPicture返回什么对象,故这个打印功能无法实现,不过大概的思路是

/** 1,需要一个打印服务对象。这可通过三种方式实现:
在jdk1.4之前的版本,必须要实现java.awt.print.Printable接口
或通过Toolkit.getDefaultToolkit().getPrintJob来获取打印服务对象;
在jdk1.4中则还可以通过javax.print.PrintSerivceLookup来查找定位一个打印服务对象。

   2、需要开始一个打印工作。这也有几种实现方法:在jdk1.4之前可以通过java.awt.print.PrintJob
(jdk1.1提供的,现在已经很少用了)调用print或printAll方法开始打印工作;
也可以通过java.awt.print.PrinterJob的printDialog显示打印对话框,
然后通过print方法开始打印;在jdk1.4中则可以通过javax.print.ServiceUI的printDialog显示打印对话框,
然后调用print方法开始一个打印工作。

根据以上的提示去做,不会很难!
*/

java.awt.print.PrinterJob pj=new java.awt.print.PrinterJob();

pj.printDialog();//显示打印对话框
pj.print();//开始打印

}

//SB.WritePort("OK");若要向串口返回一个结果可以调用该函数?


}catch(Exception e){

e.printStackTrace();

}finally{
try{
fos.close();
//停止串口检测进程并关闭串口。
SB.ClosePort();

}catch(Exception e){
e.printStackTrace();
}
}

}
else {
throw RuntimeException("读取串口数据时出错!");
}

}

//主函数
public static void main(String args[]) {

new SuanKou(1000,1);//参数为间隔的时间,和端口号


}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 目标检测系列算法复现2:Darknet-YOLO-CUDA11-OpenCV4(Ubuntu平台)推理测试
  • AI模型部署到Android端:模拟器App的生成与tensorflow模型的输入输出调试
  • 加密和解密会员注册密码
  • 安装Hyper-V、WSL与虚拟机调用NVIDIA-GPU进行深入学习计算
  • AI模型设计:C++版本tensorflow_gpu模型构建与训练
  • NVIDIA-CUDA-CUDNN-TENSORRT深度学习编程学习文档
  • 一篇令所有游戏圈的兄弟汗颜的文章
  • AI模型设计:Ubuntu18.04完美编译在阿里云镜像源tensorflow C++并实现深度学习计算【编译方法与测试深度学习C++源码已开源】
  • TensorFlow Lite 示例应用
  • 写在英格兰被葡萄牙8:7淘汰之后
  • 优质的深度学习NLP学习资料[(第一部分:斯坦福-2022 年课程)
  • 物流实操课题调查
  • 优质的深度学习NLP学习资料[(第二部分【语言模型学习资源】)
  • 上帝,原谅我吧.
  • 优质的深度学习NLP学习资料[(第三部分【问答学习资源】)
  • 【翻译】babel对TC39装饰器草案的实现
  • canvas 五子棋游戏
  • fetch 从初识到应用
  • js对象的深浅拷贝
  • k8s 面向应用开发者的基础命令
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • passportjs 源码分析
  • React-Native - 收藏集 - 掘金
  • vue 配置sass、scss全局变量
  • 初探 Vue 生命周期和钩子函数
  • 从输入URL到页面加载发生了什么
  • 好的网址,关于.net 4.0 ,vs 2010
  • 类orAPI - 收藏集 - 掘金
  • 每天10道Java面试题,跟我走,offer有!
  • 携程小程序初体验
  • 一天一个设计模式之JS实现——适配器模式
  • 用 Swift 编写面向协议的视图
  • 你对linux中grep命令知道多少?
  • 带你开发类似Pokemon Go的AR游戏
  • ‌内网穿透技术‌总结
  • (52)只出现一次的数字III
  • (python)数据结构---字典
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (ZT)薛涌:谈贫说富
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (南京观海微电子)——I3C协议介绍
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)appium-desktop定位元素原理
  • (一)u-boot-nand.bin的下载
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转)用.Net的File控件上传文件的解决方案
  • (转载)Linux 多线程条件变量同步
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .JPG图片,各种压缩率下的文件尺寸
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net 托管代码与非托管代码
  • .NET/C#⾯试题汇总系列:集合、异常、泛型、LINQ、委托、EF!(完整版)
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net实现头像缩放截取功能 -----转载自accp教程网