|
本帖最后由 Hellmessage 于 2016-12-3 14:58 编辑
不多说什么 直接上图:
其实呢 原理很简单 通过html调用系统组件:MSCOMM32.OCX
然后设置参数 - <OBJECT id="MSComm1" CLASSID="clsid:648A5600-2C6E-101B-82B6-000000000014" codebase="MSCOMM32.OCX" type="application/x-oleobject" style="left:54px;top:14px" >
- <PARAM NAME="CommPort" VALUE="15"/><!--串口号 -->
- <PARAM NAME="DataBits" VALUE="8"/>
- <PARAM NAME="StopBits" VALUE="1"/>
- <PARAM NAME="BaudRate" VALUE="9600"/> <!-- 波率 -->
- <PARAM NAME="Settings" VALUE="9600,N,8,1"/><!-- 波率 -->
- <PARAM NAME="RTSEnable" VALUE="1"/>
- <PARAM NAME="DTREnable" VALUE="1"/>
- <PARAM NAME="Handshaking" VALUE="0"/>
- <PARAM NAME="NullDiscard" VALUE="0"/>
- <PARAM NAME="ParityReplace" VALUE="?"/>
- <PARAM NAME="EOFEnable" VALUE="0"/>
- <PARAM NAME="InputMode" VALUE="0"/>
- <PARAM NAME="InBufferSize" VALUE="1024"/>
- <PARAM NAME="InputLen" VALUE="0"/>
- <PARAM NAME="OutBufferSize" VALUE="512"/>
- <PARAM NAME="SThreshold" VALUE="0"/>
- <PARAM NAME="RThreshold" VALUE="1"/>
- </OBJECT>
复制代码
接着 声明一个function 用来接收和发送数据
- <SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
- function MSComm1_OnComm(){
- switch(MSComm1.CommEvent){
- case 1:{ window.alert("Send OK!"); break;}
- case 2: { Receive();break;} //接收事件
- default: alert("Event Raised!"+MSComm1.CommEvent);;
- }
- }
- </SCRIPT>
- //每次执行完MSComm1 都会调用一次MSComm1_OnComm();
- <SCRIPT LANGUAGE=javascript FOR=MSComm1 EVENT=OnComm>
- MSComm1_OnComm();
- </SCRIPT>
复制代码
然后js控制开关串口 - <script type="text/javascript"> var Serial = $("#SerialName");
- var Begin = $("#SerialBegin");
- var ThisBtn = $("#openSerial");
- function OpenPort() {
- try {
- var SerialName = Serial.val();
- var SerialBegin = Begin.val();
- if (SerialName == "" || isNaN(SerialName)) {
- Serial.focus().val("");
- return false;
- }
- if (SerialBegin == "" || isNaN(SerialBegin)) {
- Begin.focus().val("");
- return false;
- }
- MSComm1.CommPort = SerialName;
- MSComm1.BaudRate = SerialBegin;
- MSComm1.Settings = SerialBegin + ",N,8,1";
- MSComm1.OutBufferCount = 0;
- MSComm1.InBufferCount = 0;
- MSComm1.PortOpen = true;
- ThisBtn.addClass("openSerialBtnOn").val("关闭串口");
- Serial.attr("disabled", "true");
- Begin.attr("disabled", "true");
- } catch(ex) {
- alert(ex.message);
- }
- }
- function ClockPort() {
- try {
- MSComm1.OutBufferCount = 0;
- MSComm1.InBufferCount = 0;
- MSComm1.PortOpen = false;
- ThisBtn.removeClass("openSerialBtnOn").val("打开串口");
- Serial.removeAttr("disabled");
- Begin.removeAttr("disabled");
- } catch(ex) {
- alert(ex.message);
- }
- }
- </script>
复制代码
Log输出 和输入窗口代码:
- <p class="center title">串口输出</p><textarea disabled="true" spellcheck="false" id="OnLog"></textarea>
- <p class="center title">串口输入</p>
- <textarea disabled="true" spellcheck="false" id="Tolog"></textarea>
复制代码
- <script type="text/javascript"> function Receive() {
- document.getElementById("OnLog").value += hexToString(MSComm1.Input) + "\n";
- document.getElementById('OnLog').scrollTop = document.getElementById('OnLog').scrollHeight;
- }
- function SendLog(data) {
- document.getElementById("Tolog").value += data + "\n";
- document.getElementById('Tolog').scrollTop = document.getElementById('OnLog').scrollHeight;
- }
- </script>
复制代码
js转码:
- function stringToHex(str) {//字符串转16进制
- var val = "";
- for (var i = 0; i < str.length; i++) {
- if (val == ""){
- val = "0x"+str.charCodeAt(i).toString(16);
- } else {
- val += ",0x" + str.charCodeAt(i).toString(16);
- }
- }
- return val;
- }
- function hexToString(str) {//16进制转字符串
- var val = "";
- var arr = str.split(",");
- for (var i = 0; i < arr.length; i++) {
- var now = arr.replace("0x","");
- val += String.fromCharCode(parseInt(now,16));//16进制先转成10进制 再用String.fromCharCode()转成字符串
- }
- return val;
- }
复制代码
Arduino 测试代码:
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(9600);
- }
- void loop() {
- if (Serial.available() > 0) {
- Serial.print(char(Serial.read()));
- }
- }
复制代码
有什么问题可以联系的QQ:617494454
源码下载地址(有些东西还没写好,后面会更新):链接:http://pan.baidu.com/s/1gfxAFHD 密码:ylsc
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|