关于串口读取单片机返回的数据,请大神指点一下!

VIX1314 2017-01-02 03:03:13
void _serialPort_DataReceived(object sender,SerialDataReceivedEventArgs e),调用这个函数应该传什么参数呢?函数体为 if(DataReceived!=null){ byte[] _data=new byte[_serialPort BytesToRead]; _serialPort.Read(_data,0,_data.Length); DataReceived(sender,e,_data) } 这个方法应该怎样改写,还有传进来的参数应该是什么东西,怎样获取啊,请大神指点一下!
...全文
488 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
VIX1314 2017-01-03
  • 打赏
  • 举报
回复
引用 2 楼 依然冷暖的回复:
_data= _serialPort.Read(_data,0,_data.Length);
好的,那我是直接调用这个呢,还是再重新写接收的函数呢(就是你说的这个)
VIX1314 2017-01-03
  • 打赏
  • 举报
回复
引用 3 楼 依然冷暖的回复:
上位用什么语言写的?
上位机用的C#,有一个写好的接收数据的方法,用了委托和事件,但是我不会调用,在考虑怎样传参或者自己重新写一个
VIX1314 2017-01-03
  • 打赏
  • 举报
回复
引用 6 楼 依然冷暖的回复:
[quote=引用 5 楼 VIX1314的回复:][quote=引用 2 楼 依然冷暖的回复:]_data= _serialPort.Read(_data,0,_data.Length);
好的,那我是直接调用这个呢,还是再重新写接收的函数呢(就是你说的这个)[/quote] 正常.......+=.......(函数名字)定义事件之后 不需要手动调用 就跟单片机中断自动执行中断函数一样不需要调用 触发之后自动执行此事件内的方法[/quote] 我需要把单片机的返回值显示在程序界面,这个_data应该在哪个地方转化成string并显示在在程序界面呢,而且我用的两个类,一个是串口通信类,还有一个是自助柜开锁拼接开锁指令的类,在发送完开锁指令之后,单片机就会返回一个反馈码,但是我测试的_data里边并没有数据,用的方法是在串口通信类中定义全局变量rec,存储_data转化为string的值,之后在开锁的类中实例化串口通信类,调用全局变量rec
依然冷暖 2017-01-03
  • 打赏
  • 举报
回复
引用 5 楼 VIX1314的回复:
[quote=引用 2 楼 依然冷暖的回复:]_data= _serialPort.Read(_data,0,_data.Length);
好的,那我是直接调用这个呢,还是再重新写接收的函数呢(就是你说的这个)[/quote] 正常.......+=.......(函数名字)定义事件之后 不需要手动调用 就跟单片机中断自动执行中断函数一样不需要调用 触发之后自动执行此事件内的方法
依然冷暖 2017-01-02
  • 打赏
  • 举报
回复
上位用什么语言写的?
依然冷暖 2017-01-02
  • 打赏
  • 举报
回复
_data= _serialPort.Read(_data,0,_data.Length);
依然冷暖 2017-01-02
  • 打赏
  • 举报
回复
目测是事件订阅 串口数据达到指定条件自动触发此事件
1.首先是蓝牙APP, 易安卓编写的,说编写其实我只是修改了其中的一些内容,主要的部分都是易锦老师视频里的那个软件,不过我已经懂得了那些命令,(后面有工程文件,如果不 懂,可以去找易锦老师的视频来看,如果找不到,我这存的有),两张界面和代码截图,非常简单,功能也很简单,程序前后修改了两次主要地方,主要原因是测试 的时候发现第一种程序会出现错误,在单片机哪里会仔细说明! 操作界面,很简单,打开之后打开蓝牙,然后点击搜索设备,找到你的模块名字,点击之后就可以连接了,连接之后下面会显示蓝牙的名称和地址信息 2.单片机程序,这个程序也很简单,只要学过一些单片机程序的人应该都知道吧,串口通信,设置好通信的波特率,初始化工作做好,然后在串口中断程序里写上你要做的事情就可 以了,这里虽然说11.0592的晶振定时器初值为fd,但是如果用12m的晶振也是可以的,差距不多,没有问题。(说的不怎么专业,我也不是很专业的 人,所以大神误喷,见笑了!)这里是修改前后的程序不一样的地方,前面的程序是单片机没接收到数据之后读取前一次的IO状态,然后改变其状态,但是测试 的时候发现读取状态有错误,估计是我的电路有问题,第一个继电器可以正常工作,第二个和第三个都有问题,当第一个关闭的时候可以打开,但是当打开的了却不 能关闭,只能用关闭所有的命令来关闭,(找了一下午也没发现问题,元件换了几个都没找到,后来放弃了),后来就换了后面程序,直接发送状态命令,不用判断 当前的状态了,我觉得后面这种可能更好!而且实际测试的时候也可以,没有问题。(补充一下,我发现12M的晶振不能用11.0592M的数据,原因是定时 器计数产生的波特率与9600差距有点大,误差到达了8.5%左右,理论上误差要小于4%才能正常通信,所以通信有错误,虽然能通信,但是数据不对,后来 我把晶振换回来就可以了,看来要实践才知道真理。) 第 一、二张是修改之前的程序,有问题,最后一张是修改之后的,没有问题,后来仔细想了一下,后面一种才是正确的,前面一种的改变状态可能会出现错误,就是手 机上显示的开关是关的,然而实际电路中的电路是开着的(这也是没有数据回传的原因吧,现在只是单向的手机发,模块接的形式,以后再研究)!,但是后面一种 不会出现这个问题! 3.实物电路连接,我也是在测试,所以先用LED 等来代替继电器输出,然后才用到继电器上面。单片机直接放在我做的最小系统版上面,然后用导线来连接到蓝牙开关的小板子上,等测试无误之后再安装在上面, 不然不好写程序上去。输出接的是一个小电机,用的一个12v蓄电池代替220V电源,如果要用220V的电源,要注意安全了!提醒一下,绝缘一定要做好, 毕竟不是开玩笑的。简单说一下电路连接,首先你得需要焊接一个51单片机最小系统板,(如果这个都不会,那你需要先学习一下,不然肯定是没办法做的)然后是由三极管驱动继电器的电路,记得加二极管,不然三极管很有几率被击穿,最后是蓝牙模块与单片机的连接,电源接好,一般蓝牙模块都是宽电压的,所以直接接到5V电源上,与单片机共用电源,不用什么电压转换,很方便的,把蓝牙模块的TX与单片机的RX连接,就是P3.0那个引脚,RX接单片机的TX,就是P3.1那个引脚,至于继电器哪里你需要接成常开还是常闭的模式就你自己决定了,当然还要加一点录滤波的,因为继电器启动的一瞬间电流很大,担心是单片机死机!这些就是主要的东西了!) 前一张是之前测试用的,后面一张是后来直接把单片机装上去的,看着没有那么乱了,可以看到,当手机上的开关23打开时,电路板上的灯23也是两的,表明继电器已经被打开了。 4.打完收工,作品完成好 了至此最简单的蓝牙开关就做好了,可以躺在床上遥控在远处的风扇了(好吧你们都用的是空调,当我没说!),定时关机(这个功能没做,不过原理都一样,自由 发挥了),其他神马的!感兴趣的同学可以试一下,比如说高级一点的外网控制的,把电脑作为服务器,把蓝牙模块接好,和控制器连接起来,然后让手机与电脑通 过互联网通信,用手机给电脑发送指令,再通过电脑给蓝牙模块发送指令,比如提前开个空调什么的(提前开风扇没用,还是开你们的空调吧),然后其他什么的东 西就自己发挥了!我想这个应该是属于传说中的物联网吧,虽然没有那么高大上,但是原理是一样的。
我要实现的功能就是能用我手机控制电源的通、对家里的电器的开关进行控制。(目前只是内网操作) 1.首先是蓝牙APP 易安卓编写的,说编写其实我只是修改了其中的一些内容,主要的部分都是通过视频学习的,不过我已经懂得了那些命令,(后面有工程文件,如果不懂,可以去找易锦老师的视频来看,如果找不到,我这存的有),两张界面和代码截图,非常简单,功能也很简单,程序前后修改了两个主要地方,主要原因是测试的时候发现第一种程序会出现错误,在单片机哪里会仔细说明! 操作界面,很简单,打开之后打开蓝牙,然后点击搜索设备,找到你的模块名字,点击之后就可以连接了,连接之后下面会显示蓝牙的名称和地址信息。这个是编程软件中显示的界面,可能和在手机上面运行的不一样,因为有些东西是非可视的,不过不影响,这反而能让我们知道更多的细节。 2.单片机程序 这个程序也很简单,只要学过一些单片机程序的人应该都知道吧,串口通信,设置好通信的波特率,初始化工作做好,然后在串口中断程序里写上你要做的事情就可 以了,这里虽然说11.0592的晶振定时器初值为fd,但是如果用12m的晶振也是可以的,差距不多,没有问题。(说的不怎么专业,我也不是很专业的 人,所以大神误喷,见笑了!)这里是修改前后的程序不一样的地方,前面的程序是单片机没接收到数据之后读取前一次的IO状态,然后改变其状态,但是测试 的时候发现读取状态有错误,估计是我的电路有问题,第一个继电器可以正常工作,第二个和第三个都有问题,当第一个关闭的时候可以打开,但是当打开的了却不 能关闭,只能用关闭所有的命令来关闭,(找了一下午也没发现问题,元件换了几个都没找到,后来放弃了),后来就换了后面程序,直接发送状态命令,不用判断 当前的状态了,我觉得后面这种可能更好!而且实际测试的时候也可以,没有问题。(补充一下,我发现12M的晶振不能用11.0592M的数据,原因是定时 器计数产生的波特率与9600差距有点大,误差到达了8.5%左右,理论上误差要小于4%才能正常通信,所以通信有错误,虽然能通信,但是数据不对,后来 我把晶振换回来就可以了,看来要实践才知道真理。) 第 一、二张是修改之前的程序,有问题,最后一张是修改之后的,没有问题,后来仔细想了一下,后面一种才是正确的,前面一种的改变状态可能会出现错误,就是手 机上显示的开关是关的,然而实际电路中的电路是开着的(这也是没有数据回传的原因吧,现在只是单向的手机发,模块接的形式,以后再研究)!,但是后面一种 不会出现这个问题! 3.实物电路连接 我也是在测试,所以先用LED 等来代替继电器输出,然后才用到继电器上面。单片机直接放在我做的最小系统版上面,然后用导线来连接到蓝牙开关的小板子上,等测试无误之后再安装在上面,不然不好写程序上去。输出接的是一个小电机,用的一个12v蓄电池代替220V电源,如果要用220V的电源,要注意安全了!提醒一下,绝缘一定要做好,毕竟不是开玩笑的。简单说一下电路连接,首先你得需要焊接一个51单片机最小系统板,(如果这个都不会,那你需要先学习一下,不然肯定是没办法做的)然后是由三极管驱动继电器的电路,记得加二极管,不然三极管很有几率被击穿,最后是蓝牙模块与单片机的连接,电源接好,一般蓝牙模块都是宽电压的,所以直接接到5V电源上,与单片机共用电源,不用什么电压转换,很方便的,把蓝牙模块的TX与单片机的RX连接,就是P3.0那个引脚,RX接单片机的TX,就是P3.1那个引脚,至于继电器哪里你需要接成常开还是常闭的模式就你自己决定了,当然还要加一点录滤波的,因为继电器启动的一瞬间电流很大,担心是单片机死机!这些就是主要的东西了!) 前一张是之前测试用的,后面一张是后来直接把单片机装上去的,看着没有那么乱了,可以看到,当手机上的开关23打开时,电路板上的灯23也是两的,表明继电器已经被打开了。 4.打完收工,作品完成 好了至此最简单的蓝牙开关就做好了,可以躺在床上遥控在远处的风扇了(好吧你们都用的是空调,当我没说!),定时关机(这个功能没做,不过原理都一样,自由发挥了),其他神马的!感兴趣的同学可以试一下,比如说高级一点的外网控制的,把电脑作为服务器,把蓝牙模块接好,和控制器连接起来,然后让手机与电脑通过互联网通信,用手机给电脑发送指令,再通过电脑给蓝牙模块发送指令,比如提前开个空调什么的(提前开风扇没用,还是开你们的空调吧),然后其他什么的东西就自己发挥了!我想这个应该是属于传说中的最简单的物联网吧,虽然没有那么高大上,但是原理是一样的。虽然是手动控制的,不过可以发挥你聪明大脑,让他自动控制啊!

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧