关于arduino蓝牙串口通信助手apk的问题

arduino-串口通信后为什么两个字符串不同了……
作者:用户
浏览:935 次
串口通信后为什么两个字符串不同了……VB和aeduino中波特率都设置为9600,VB能够正常接收数据,看起来一样,但数据判断却不一样。。。。VB中代码:Dimbuf$DimDR$DR=Trim("D
串口通信后为什么两个字符串不同了……
VB和aeduino中波特率都设置为9600,VB能够正常接收数据,看起来一样,但数据判断却不一样。。。。
VB中代码:
DR = Trim("DATA:CREADY")
buf = Trim(MSComm1.Input)
Label15.Caption = buf
Label16.Caption = DR
If LCase(buf) = LCase(DR) Then
MsgBox ("校准完成!")
MsgBox ("校准失败!")
arduino中的代码:
char data = char(Serial.read());
if (data=='A')
//Serial.println(data);
delay(5000);
Serial.print("DATA:CREADY r n");
dialWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(1000);
按钮上方为串口接收的值,下方是VB中定义的值
不知道你说的数据判断是什么,建议你用串口调试助手调试下。
【云栖快讯】云栖社区技术交流群汇总,阿里巴巴技术专家及云栖社区专家等你加入互动,老铁,了解一下?&&
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
40+云计算产品,6个月免费体验
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
云服务器9.9元/月,大学必备【求教】arduino串口通信问题_arduino吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:56,725贴子:
【求教】arduino串口通信问题收藏
本人小白,第一次接触arduino和MFC,在串口通信上遇到了一些麻烦,求大神指教。原目的:
实现arduino与电脑间的串口通信相关条件:
IDE:vs2015;操作系统:win10;程序:通过MFC中mscomm控件实现串口通信现状:1.程序能够与网上下载的串口调试助手进行相互通信,收发都没有问题;2.arduino与串口调试助手也能进行通信3.arduino能够接收自写MFC程序(网上抄的)的信号,但MFC程序不能接收arduin信号4.经测试,程序运行到variant_inp = m_mscomm.get_Input()时,get_Input()没能成功读取缓冲区内数据,整个程序不再继续运行(似乎是没能读取造成数组越界?) 求问:应该如何修改MFC程序,错误是因为阻塞之类的原因吗,不太懂T T
//我是分割线::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::MFC源码主要部分://打开串口void CMFCApplication3Dlg::OnBnClickedButtonOpen(){if (m_mscomm.get_PortOpen())//如果串口打开,关闭串口{m_mscomm.put_PortOpen(FALSE);}m_mscomm.put_CommPort(3);//选择串口3m_mscomm.put_InBufferSize(2048);//接收缓冲区m_mscomm.put_OutBufferSize(1024);//发送缓冲区m_mscomm.put_InputLen(0);//设置当前接收区数据长度为0,表示全部读取m_mscomm.put_InputMode(1);//以二进制方式读写数据m_mscomm.put_RThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件m_mscomm.put_Settings(_T(&9600,n,8,1&));//波特率9600,无校验位,8个数据位,一个停止位//m_mscomm.get_Input();if (!m_mscomm.get_PortOpen())//若串口没打开,打开{m_mscomm.put_PortOpen(TRUE);//打开串口AfxMessageBox(_T(&串口3打开成功&));m_mscomm.get_Input();}else{m_mscomm.put_OutBufferCount(0);AfxMessageBox(_T(&串口3打开失败&));}}//关闭串口void CMFCApplication3Dlg::OnBnClickedButtonClose(){// TODO: 在此添加控件通知处理程序代码m_mscomm.put_PortOpen(FALSE);//关闭串口AfxMessageBox(_T(&串口3已关闭&));}//发送信息void CMFCApplication3Dlg::OnBnClickedButtonSend(){// TODO: 在此添加控件通知处理程序代码UpdateData(true);//读取编辑框内容m_mscomm.put_Output(COleVariant(m_EditSend));//发送数据m_EditSend.Empty();//发送后清空输入框UpdateData(false);//更新编辑框内容}BEGIN_EVENTSINK_MAP(CMFCApplication3Dlg, CDialogEx)ON_EVENT(CMFCApplication3Dlg, IDC_MSCOMM2, 1, CMFCApplication3Dlg::OnCommMscomm2, VTS_NONE)END_EVENTSINK_MAP()//接收信息void CMFCApplication3Dlg::OnCommMscomm2(){// TODO: 在此处添加消息处理程序代码//static unsigned int cnt = 0;VARIANT variant_COleSafeArray safearray_long len = 0, k = 0;unsigned int data[1024] = { 0 };byte rxdata[1024]{0};//设置byte数组CSif (m_mscomm.get_CommEvent() == 2)//值为2表示接收缓冲区内有字符{variant_inp = m_mscomm.get_Input();//读缓冲区消息safearray_inp = variant_//变量转换;len = safearray_inp.GetOneDimSize();//得到有效数据长度for (k = 0; k & k++){safearray_inp.GetElement(&k, rxdata + k);}for (k = 0; k & k++)//将数组转化为CString型变量{strtemp.Format(_T(&%c&),*(rxdata + k));m_EditSend2 +=}CString temp =_T(&\r\n&);m_EditSend2 +=}UpdateData(FALSE);//更新编辑框}//清空接收框void CMFCApplication3Dlg::OnBnClickedButtonclear(){m_EditSend2.Empty();//清空接收框UpdateData(false);//更新接收框内容}//对话框//arduino源码void setup() {
// put your setup code here, to run once:
Serial.begin(9600,SERIAL_8N1);
pinMode(7,OUTPUT);
digitalWrite(7,LOW);}void loop(){
digitalWrite(7,LOW);
delay(100);
char val = Serial.read();
if(val=='k')
//delay(100);
Serial.print('h');
digitalWrite(7,HIGH);
delay(100);
}}//MFC程序发送k,7号口LED确实闪烁,但编辑框没有显示出返回的h
arduino, 750多家厂商代理,100多万种现货库存,当天出货,免费送货.
digitalWrite(7,LOW);delay(100);char val = Serial.read();
《-----这里有问题,一般读取serial之前,最好先用serialavaliable 判断一下是否有数据if(val=='k'){//delay(100);Serial.print('h');digitalWrite(7,HIGH);delay(100);}
你二进制应该用serial.write
网上查了下,可能和mscomm控件与arduino串口转USB驱动不兼容有关。改用了SerialPort类,似乎可以了。谢谢大家。
登录百度帐号4.6k 次阅读
0x01.About
Arduino与Raspberry通过Serial通信的方案一般有两种,通过树莓派GPIO串口通信,还有,通过USB串口通信。
显然,通过USB通信比GPIO通信高效稳定多了。
看过TCP握手通信的人都应该明白,通信双方通信要通过3此握手才能开启TCP连接。
相同的,串口通信也是可以这么理解,我之前尝试通过简单地发送与接收来传递信息,发现,不但有信息丢包,而且各种问题。
举个例子,A-&R,A串口写入,R串口监听;R-&A,R写入时候,A监听。
那么好了,时间怎么约定?A写入要多久?B要监听多久?我们都知道,Arduino是单线程的,所以Arduino的串口通信是单信道。
0x02.Coding
这里串口的波特率设置成9600,所以还要做串口波特率修改(你可以用原始的 115200),但是对树莓派的性能不要指望太多,太快不好。
关于修改串口波特率可以看这里,或者你懒不改也行:
这里Arduino输出是string格式,我们要在树莓派那里转成dict字典模式方便调用,所以,约定数据格式为
{'result':True/False, 'data':'...'},在Arduino端用 - 断开字符串。
好了,下面是Arduino:
String readS
void setup()
Serial.begin(9600);
void loop()
while(!Serial.available()) {}
while (Serial.available()) {
if (Serial.available() &0) {
char c = Serial.read();
readString +=
if (readString.length() &0) {
flag = "True";
data = flag+"-"+readS
Serial.println(data);
readString="";
delay(200);
Serial.flush();
关于Raspberry端代码:
#!/usr/bin/python
import serial
import json
import syslog,time,sys
port = '/dev/tty.usbmodem1411'
def main(port):
ard = serial.Serial(port,9600,timeout=1)
time.sleep(1.5)
while (i&5):
send += 'Everything Ok~'
ard.flush()
send = str(send)
print ("Python value sent: ")
print (send)
ard.write(send)
msg = ard.readline().strip('\n\r') #ard.read(ard.inWaiting()).strip('\n\r')
print ("Message from arduino: ")
key = ['result','data']
value = msg.split('-',2)
data = dict(zip(key,value))
print 'ERROR!'
time.sleep(0.3)
print "Exiting"
if __name__ == '__main__':
main(sys.argv[1] if len(sys.argv) & 1 else port )
except KeyboardInterrupt:
ser.close()
关于端口自己查找 ls /dev/tty*
这里有2个时间延迟,第一个是做串口初始化等待,第二个是等待数据传输。
本文出自 ,转载请注明出处:
2 收藏&&|&&2
分享到微博?
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。Arduino串口的一些高级用法
1.配置串口通信数据位、校验位、停止位通常我们使用Serial.begin(speed)来完成串口的初始化,这种方式,只能配置串口的波特率。而使用Serial.begin(speed,
config)可以配置数据位、校验位、停止位等。例如Serial.begin(9600,SERIAL_8E2)是将串口波特率设为9600,数据位8,偶校验,停止位2。config可用配置如下:
config可选配置
config可选配置
SERIAL_5N1
SERIAL_5E2
SERIAL_6N1
SERIAL_6E2
SERIAL_7N1
SERIAL_7E2
SERIAL_8N1
SERIAL_8E2
SERIAL_5N2
SERIAL_5O1
SERIAL_6N2
SERIAL_6O1
SERIAL_7N2
SERIAL_7O1
SERIAL_8N2
SERIAL_8O1
SERIAL_5E1
SERIAL_5O2
SERIAL_6E1
SERIAL_6O2
SERIAL_7E1
SERIAL_7O2
SERIAL_8E1
SERIAL_8O2
(Serial)的用法当串口被打开时,Serial的值为真。串口被关闭时Serial的值为假。比较囧的是,这个方法只适用于Leonardo和micro的Serial,也就是说连接连接到电脑USB的那个模拟串口。例如以下程序,当你没有使用串口监视器打开串口时,程序就会一直循环运行while (!Serial) {;} ,当你打开串口监视器,程序会退出while循环,开始loop中的程序。
[C++] 纯文本查看 复制代码
Serial.begin(9600);
(!Serial) {;}
3.read和peek输入方式的差异串口接收到的数据都会暂时存放在接收缓冲区中,使用read()与peek()都是从接收缓冲区中读取数据。不同的是,使用read()读取数据后,会将该数据从接收缓冲区移除;而使用peek()读取时,不会移除接收缓冲区中的数据。你可以使用以下程序,观察其运行结果:
[C++] 纯文本查看 复制代码
Serial.begin(9600);
while(Serial.available()&0){
col=Serial.read();
Serial.print("Read:
Serial.println(col);
delay(1000);
[C++] 纯文本查看 复制代码
Serial.begin(9600);
while(Serial.available()&0){
col=Serial.peek();
Serial.print("Read:
Serial.println(col);
delay(1000);
4. 串口读入int型数据实际上是串口读入字符串,再转换为int型数据。
[C++] 纯文本查看 复制代码
(Serial.available() & 0) {
inChar = Serial.read();
(isDigit(inChar))
+= (char)inC
i=inString.toInt();
5.输出不同进制的文本我们可以是用 Serial.print(val, format)的形式输出不同进制的文本参数val 是需要输出的数据参数format 是需要输出的进制形式,你可以使用如下参数:BIN(二进制)DEC(十进制)OCT(八进制)HEX(十六进制)例如,使用Serial.print(123,BIN),你可以在串口调试器上看到1111011使用Serial.print(123,HEX),你可以在串口调试器上看到7B6.Arduino MEGA\Arduino DUE上其他串口用法serial1\serial2\serial3和serial用法一样比如serial3.begin(9600);6.修改串口缓冲区大小Arduino串口缓冲区默认为64字节,如果你单次传输的数据较多可以将arduino-1.0.5-r2\hardware\arduino\cores\arduino\HardwareSerial.cpp中的#define SERIAL_BUFFER_SIZE 64修改为#define SERIAL_BUFFER_SIZE 128这样就有128字节的缓冲区了
Arduino 串口通讯
arduino学习系列——串口通信
【Arduino官方教程第一辑】示例程序 1-1 读取模拟信号、串口操作
关于arduino清空串口缓存
Arduino--基础(六)--串口的使用
Arduino串口的使用
【Arduino官方教程第一辑】示例程序 4-10 串口事件
Arduino - 串口操作函数与示例代码大全
Arduino编程-串口双向通信
arduino uno 多机串口通信
没有更多推荐了,基于arduino的串口通信学习 - 简书
基于arduino的串口通信学习
一、串口通信格式START (起始位) D0~D7(数据位)P(校验位) STOP(停止位)二、串口通信步骤1、配置波特率
serial[x].begin(speed);2、查看串口缓冲中是否有数据(输出可忽略)
serial[x].available();
//有效数据
serial[x].read();
//读取数据3、读取或写入串行数据
serial[x].print(data);三、程序范例unsigned char Re_buf[11],counter=0;//定义数组储存数据unsigned char sign=0;float a[3],w[3],angle[3],T;void setup() {Serial.begin(9600);}void loop() {if(sign)sign = 0;if(Re_buf[0]==0x55)
//包头,确认数据是否传入{switch(Re_buf[1]) // 判断获取加速度仪何种数据{case 0x51: //加速度a[0]=(short(Re_buf[3]&&8|Re_buf[2]))/;a[1]=(short(Re_buf[5]&&8|Re_buf[4]))/;a[2]=(short(Re_buf[7]&&8|Re_buf[6]))/;T = (short(Re_buf[9]&&8|Re_buf[8]))/340.0+36.25;case 0x52: //角速度w[0]=(short(Re_buf[3]&&8|Re_buf[2]))/;w[1]=(short(Re_buf[5]&&8|Re_buf[4]))/;w[2]=(short(Re_buf[7]&&8|Re_buf[6]))/;T = (short(Re_buf[9]&&8|Re_buf[8]))/340.0+36.25;case 0x53: //角度angle[0]=(short(Re_buf[3]&&8|Re_buf[2]))/;angle[1]=(short(Re_buf[5]&&8|Re_buf[4]))/;angle[2]=(short(Re_buf[7]&&8|Re_buf[6]))/;T = (short(Re_buf[9]&&8|Re_buf[8]))/340.0+36.25;
//该部分公式有待考证/*case 0x53:* angle[0]=(short(Re_buf[3]&&8|Re_buf[2]))/32.8
//Vx* angle[1]=(short(Re_buf[5]&&8|Re_buf[4]))/32.8
//Vy* angle[2]=(short(Re_buf[7]&&8|Re_buf[6]))/32.8
//Vz*/}}}void serialEvent{while(Serial.available()){
//CRC循环冗余算法Re_buf[counter]=(unsigned char)Serial.read();if(counter==0&&Re_buf[0]!=0x55)
//if the first data is not the headcounter++;if(counter==11)
//have receive all the data{counter=0;sign=1;}}}
[TOC] Class I. Words Expressing Abstract Relations Section I. Existence 1. Being, in The Abstract existence 1 absolute
a.绝对的,完全的; 无(条件...
Why Stock Markets CrashThis page intentionally left blankWhy Stock Markets CrashCritical Events in ComplexFinancial SystemsD i d i e r S ...
cond-mat.stat-mech - 统计数学cs.AI - 人工智能cs.AR - 硬件体系结构cs.CC - 计算复杂度cs.CL - 计算与语言cs.CV - 机器视觉与模式识别cs.CY - 计算与社会cs.DC - 分布式、并行与集群计算cs.DS - 数据结...
cs.AI - 人工智能cs.CL - 计算与语言cs.CR - 加密与安全cs.CV - 机器视觉与模式识别cs.CY - 计算与社会cs.DB - 数据库cs.DC - 分布式、并行与集群计算cs.DS - 数据结构与算法cs.IR - 信息检索cs.IT - 信息论c...
8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样共享资源、帮助他人的筒子们==本文比较长,由于笔者个人能力有限,错漏在所难免,欢迎读者们批评指正。 本文首发于我的CSDN博客,同时也发布于我的博客园 一、基础...
CTCE CHINA 2018第七届中国国际航空、邮轮及列车食品饮料展览会 展览时间:日-16日 展览地点:国家会展中心-上海o虹桥(中国上海市青浦区崧泽大道333号) 批准单位 中华人民共和国商务部 国家质量监督检验检疫总局 主办单位 中国出入境检验检...
随着韦斯特布鲁克的当选新世纪出现了12位MVP,这十二位最强者正好对应十二位黄金圣斗士,黄金圣斗士各怀绝技身手不凡作为女神身边的最强者,他们都是桀骜不驯,勇猛无谓的战士,那么新世纪以来的十二位MVP对比十二位黄金圣斗士会碰撞出怎样的火花呢? 一:白羊座穆先生:纳什。纳什是个...
能装的才是好包。 日常生活小寓言系列 手指涂抹简单图文,记录下日常生活的联想发现,谓之小寓言。 愿我们都有柔软的心包容一切有活泼的心欣赏一切有灵敏的心洞察一切有平和的心映照一切 图文均为木偶班主原创,感谢阅读!
是什么引起痘痘其实还有很多是我们并不清楚的。目前大家都了解的就是青春期的产物,或是荷尔蒙失调那段时间所引起,像更年期,皮肤中油脂分泌更多等。 一些有争议的治疗方法往往能取得不错的效果,比如口服或外用抗生素,美容机构,或是使用化学修正处理过的维生素A。 今天就主要聊聊在自然疗...}

我要回帖

更多关于 蓝牙串口通信助手apk 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信