在上篇文章中介绍了通过串口向LED液晶显示屏发送数据的方式,同样,通过串口也可以让你的程序来捕捉外部设备(开关类设备)触发的事件或者从外部设备读取数据(传感器等)。 下面介绍一个通过脚踏开关来控制应用程序操作的例子。
脚踏开关—分为两种:一种就是日常生活中最普通的电路开关,通过电路的闭合来控制 电路的接通;另一种就是在开关中加入一个上位机,其他的都一样。
功能:当脚踏开关踩下(电路接通)时,触发你的程序中的一个动作,比如启动/停止一项任务。
接线图:
将开关的两根线分别接在串口的输入、输出(2、3号)引脚,如图:
根据脚踏开关的两种类型采用不同的方式
1.带上位机的
该方式比较简单,当开关的闭合触发事件时上位机会通过串口向pc发送数据,在程序中采用串口的事件监听模型即可进行事件的捕捉,主要代码如下:
try {
serialPort.addEventListener(new SerialPortEventListener() {
public void serialEvent(SerialPortEvent serialPortEvent) {
//在此进行事件捕捉处理
}
});
} catch (TooManyListenersException e) {
serialPort.close();
throw new SerialConnectionException("too many listeners added");
}
2.普通的开关
此种方式由于没有上位机主动向pc发送数据,所以不能再采用上述方式来进行捕获事件,解决的方式是:让一个单独的线程每隔一定的时间向串口发送数据,然后让另一个线程不停的在串口接收数据,如果能够接受到数据说明开关闭合,否则说明开关断开。
相关程序代码:
public class Demo {
static SwitchControl control;
private InputStream in;
private OutputStream os;
private SerialPort serialPort;
boolean inited = false;
boolean stoped = false;
long beg = System.currentTimeMillis();
public boolean init() {
if (inited) {
return true;
}
try {
CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM1");
serialPort = (SerialPort) portId.open("SerialBean", 4000);
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
serialPort.setDTR(true);
in = serialPort.getInputStream();
os = serialPort.getOutputStream();
inited = true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public void writePort(int s) {
try {
os.write(s);
os.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
public void start() {
Thread send = new Thread(new SendData());
Thread recive = new Thread(new ReceiveData());
send.start();
recive.start();
}
public void close() {
stoped = true;
try {
Thread.sleep(20);
if (in != null) {
in.close();
}
if (os != null) {
os.close();
}
if (serialPort != null)
serialPort.close();
} catch (Exception e) {
e.printStackTrace();
}
}
class ReceiveData implements Runnable {
public void run() {
while (true) {
if (stoped) {
break;
}
byte[] b = new byte[10];
try {
if (in.read(b) == 0) {
continue;
}
long end = System.currentTimeMillis();
//处去噪声影响,通过连续两次接受到数据的时间差来判断是一次长时间的踩踏还是连续2次或者多次踩踏
if (end - beg > 20) {
Thread tt = new Thread(new Task());
tt.start();
}
Thread.sleep(10);
beg = System.currentTimeMillis();
} catch (Exception e) {
break;
}
}
}
}
class SendData implements Runnable {
public void run() {
while (true) {
if (stoped) {
break;
}
writePort(0);
try {
Thread.sleep(5);
} catch (Exception e) {
e.printStackTrace();
break;
}
}
}
}
class Task implements Runnable {
public void run() {
// 相关任务
System.out.println("捕捉到事件.............");
}
}
public static void main(String[] args) {
Demo demo = new Demo();
if (!demo.init()) {
System.err.println("初始化串口失败!");
return;
}
demo.start();
}
}
分享到:
相关推荐
本示例中的"JAVA控制USB串口继电器例程源码"提供了一个具体的解决方案,允许开发者使用Java语言通过USB串口发送16进制指令来控制继电器开关。这一技术在自动化、远程控制、智能家居等领域有着广泛的应用。 首先,...
通过计算机或单片机的串行接口与LED驱动电路进行数据交换,实现对LED灯亮度、颜色或者开关状态的远程控制。下面将详细阐述串口通信的基本原理、LED控制方法以及涉及到的相关技术。 串口通信,又称串行通信,是数据...
开发者会创建一个Java程序,通过读写串口数据,向继电器发送控制指令。Java程序可能包括设置串口参数、打开串口、发送控制继电器的命令(如ON/OFF)以及接收反馈信息等步骤。 "开关按钮"这一标签暗示了用户界面(UI)...
继电器是一种电磁开关,通常用于在电路中隔离高电压或大电流部分,而蓝牙模块则提供无线通信功能,使用户能够通过智能手机或其他蓝牙设备远程控制电路。 【描述】:“程序可以直接使用 也可以参照程序更改为stm32...
2. **继电器功能**:该设备内置8路继电器,可以实现对电路的远程开关控制。继电器是一种电磁开关,通过电信号控制物理开关,常用于切换高电压或大电流的电路,确保操作安全。 3. **多种通信接口**:亚为8J提供RS232...
PC端的Java程序通过串口向ZigBee节点A发送命令,ZigBee节点A将命令转发给ZigBee节点B,ZigBee节点B接收到命令后控制电子开关的状态。 系统实现 系统的实现主要包括硬件的设计和制作、软件的开发和测试。硬件的设计...
在这个交通灯系统中,上位机可能是用C#、Java、Python等编程语言开发的一个应用程序,它具备用户友好的图形界面,允许操作员设置交通灯的运行模式,如红绿黄灯的时序、紧急情况下的信号切换等。 交通灯上位机与...
3. **串口发送控制继电器开关**:这可能是一个程序或脚本,用于通过串行通信接口发送控制继电器的指令。在PC上,这可能使用Python、C++或其他编程语言实现,通过串口(如USB转串口)连接到蓝牙控制板。这个程序可能...
在本文中,我们将深入探讨...总结来说,"arduino蓝牙开关"项目涉及Arduino编程、蓝牙通信、继电器控制和Android应用程序开发等多个方面。通过学习和实践这个项目,你可以掌握基本的物联网技能,同时享受创新的乐趣。
- **下位机设计**:下位机采用STM32微控制器作为核心,负责电灯的开关控制。STM32芯片具有高性能、低功耗的特点。通过WiFi模块,下位机与上位机APP进行数据交互,实现远程控制。 - **上位机设计**:上位机即用户端...
在本例中,上位机可能使用VC++编写,通过串口与下位机通信,控制智能家居设备,如LED灯的开关。下位机通常采用微控制器,如CC2530芯片,这是一种集成RF通信和微控制器功能的芯片,适合于构建ZigBee网络。 设计过程...
1. 物理层接口:ESP8266通常采用AT命令集进行编程,通过串口接收安卓设备发送的指令,并通过GPIO引脚控制灯具。使用Arduino IDE或MicroPython等开发环境进行编程。 2. Wi-Fi配置:ESP8266需要配置为Wi-Fi客户端模式...
系统可以通过继电器模块控制灯光的开关以及亮度调节。用户可以选择手动调节或是设置预设模式,如“阅读”、“睡眠”等模式。 ##### 光线控制 系统能够根据室内光照强度自动调整窗帘开合程度,确保室内光线适宜,...
用户可以通过打电话的方式,通过特定的电话网络对家电进行开关控制或者状态监测。随着移动通信技术的发展,移动电话也被广泛应用于家电远程控制系统中。 在设计家电远程控制系统时,需要考虑系统的硬件组成和软件...
上位机应用程序可实现远程监控和参数设置,常用语言有C#、Java等,通过串口、蓝牙或Wi-Fi与单片机通信。 四、系统功能实现 1. 自动控制:依据光照强度、温度、湿度和风速等参数,自动调节窗户开闭,提高室内环境...
在本文中,开发者使用Eclipse作为集成开发环境,采用JAVA语言编写了能够控制蓝牙智能锁的手机应用程序。该程序通过蓝牙与智能锁建立连接并发送开关锁的指令。一个优秀的手机APP不仅需要功能完备,还要有良好的用户...
数字电子线路方向主要涉及单片机(8位的8051系列、32位的ARM系列等)、FPGA(CPLD)、数字逻辑电路、微机接口(串口、并口、USB、PCI)的开发,以及驱动程序和底层应用程序的编写。这一方向需要熟悉C语言和汇编语言...
4. **软件开发**:在PC端,可能需要编写一个简单的控制程序,例如用C#、Python或Java,用于发送"open"和"close"字符串到KL25。而在KL25端,需要编程实现串口接收、解析指令并控制GPIO(通用输入/输出)的功能。这...
数字电子线路方向作为一个热门的就业方向,主要从事单片机(8 位的 8051 系列、32 位的 ARM 系列等等)、FPGA(CPLD)、数字逻辑电路、微机接口(串口、并口、USB、PCI)的开发,更高的要求会写驱动程序、会写底层...