arduino与上位机VB串口通信

合集下载

基于Visual Basic的串口通讯和Arduino的智能小车控制系统设计

基于Visual Basic的串口通讯和Arduino的智能小车控制系统设计

基于Visual Basic的串口通讯和Arduino的智能小车控制系统设计作者:王飞杨娟娟来源:《科技与创新》2016年第01期摘要:针对智能小车中存在的问题提出相关改进措施,并介绍了一种新的控制系统。

该系统是将Arduino作为主控单元,利用Visual Basic开发的上位机软件进行控制,从而进一步提高了智能小车人机交互的功能性。

关键词:Visual Basic;智能小车;Arduino;上位机软件中图分类号:TP23 文献标识码:A DOI:10.15913/ki.kjycx.2016.01.073智能化是当今世界发展的方向之一,有大批科研人员投身这项工作中。

智能化的主控核心在于其控制系统,它的水平决定了智能化的水平。

此次设计的智能小车使用两后轮驱动,前轮安装一个导向轮,同时,还为小车安装了超声波测距传感器。

此传感器可以让小车在行进的过程中成功避开障碍物,并按指令行驶,这是智能小车的关键部分。

它虽然是智能的,但可控性比较差,并不能完全按照人的想法动作。

至此,引入上位机软件直接控制智能小车具有操作性强、易于控制的特点。

1 Visual Basic串口通讯简介利用VB实现串口通信的方法有2种,一种是利用其自身集成的MSComm通讯控件实现与外接设备的通信,另一种是利用通信API函数实现串口通信。

MSComm通讯控件通过串行端口传输和接收数据,并为应用程序提供串行通信功能。

PC 机通过此控件利用串行口与其他设备连接,从而实现两设备的数据通信。

MSComm通讯控件的主要属性和方法:Setting:设置并返回通讯参数。

PortOpen:通过设置其值打开或关闭串口。

Input:返回并删除接收缓冲区的数据流。

Output:向传输缓冲区写数据流。

根据程序的功能及其用途,在使用过程中,用OnComm事件和CommEvent属性监视并检测通信事件和错误值。

ComEvSend:发送缓冲区的字符数比Sthreshold。

两个arduino串口通信例子

两个arduino串口通信例子

两个arduino串口通信例子在Arduino编程中,串口通信被广泛应用于传输数据。

本例演示如何使用两个Arduino板实现串口通信。

硬件需求:- 两个Arduino板(这里我们使用Arduino Uno)- USB电缆- 两个面包板- 两个LED- 杜邦线步骤:1. 连接一个Arduino板,并上传以下代码:```void setup() {Serial.begin(9600);}void loop() {Serial.println('Hello from Arduino 1!');delay(1000);}```这个程序每秒钟发送一条包含“Hello from Arduino 1!”的消息到串口。

2. 连接另一个Arduino板,并上传以下代码:```void setup() {Serial.begin(9600);pinMode(LED_BUILTIN, OUTPUT);}void loop() {if (Serial.available() > 0) {String message = Serial.readStringUntil('');if (message == 'Hello from Arduino 1!') {digitalWrite(LED_BUILTIN, HIGH);delay(1000);digitalWrite(LED_BUILTIN, LOW);}}}```这个程序等待从串口接收到来自另一个Arduino板的消息。

如果消息是“Hello from Arduino 1!”则点亮板上的LED一秒钟。

3. 使用USB电缆将两个Arduino板连接在一起。

将一个板连接到计算机,打开串口监视器。

在另一个板上按下复位按钮。

您应该能够看到串口监视器中发送和接收的消息。

2. 实现Arduino与Python之间的串口通信Python是一种广泛使用的编程语言,用于各种计算机应用程序。

arduino与上位机VB串口通信教学文案

arduino与上位机VB串口通信教学文案

用pc控制LED灯注意红色的LED灯,熄灭的亮了,程序界面,注意要开启串口才能控制注意,我的arduino板子占用com3,所以mscomm也要用3口,不要弄错了,这里走过弯路,隔天才发现的,(彩色小点PS加上的,方便理解)。

下面是源码,方便复制:--------------------------------------------------------'vb写的上位机程序Private Sub Command1_Click()Comm3.PortOpen = TrueEnd SubPrivate Sub Command2_Click()Comm3.PortOpen = FalseEnd SubPrivate Sub Command3_Click()Comm3.Output = "a" '用a表示开灯End SubPrivate Sub Command4_Click()Comm3.Output = "b" '用b表示灭灯End Sub-----------------------------------------//arduino程序//通过电脑开关LED灯(LED灯负极连在arduino uno r3板数字3口,正极串一个1K 电阻后连板子5V电源正极//int led1=3; //把LED连在Arduino数字端口3//初始化void setup(){Serial.begin(9600); //启动串行通讯,波特率为9600b/s pinMode(led1,OUTPUT);digitalWrite(led1,HIGH); //熄灭LED灯}//主程序void loop(){char val;//定义变量val,用于暂存上位机发送来的字符if(Serial.available()>0)//如果上位机发送来了字符{val=Serial.read(); //读取上位机发来的字符,并保存到valSerial.println(val); //显示接受到的字符if(val=='a')//如果上位机发送字符'a',{digitalWrite(led1,LOW); //点亮LED灯}if(val=='b')//如果上位机发送字符'b',{digitalWrite(led1,HIGH);//熄灭LED1}}delay(100);//延时100ms}。

VB上位机串口通讯

VB上位机串口通讯

'初始化代码Private Sub Form_Load() '窗体被加载时产生If MSComm1.PortOpen = True Then '串口查看是否打开,打开则关闭MsgBox "端口已经打开", 2'MSComm1.PortOpen = FalseEnd IfWith MSComm1.CommPort = 3 '设置串口3.Settings = "9600,n,8,1".InputLen = 0 '读取接收缓冲区所有字符.InBufferSize = 1024 '设置接收缓冲区1024字节.OutBufferSize = 512 '设置发送缓冲区512字节.InputMode = comInputModeText. '采用文本传输'.PortOpen = True '打开串口.SThreshold = 0 '一发送数据就触发OnComm事件.RThreshold = 1 '接收到一个字节就触发OnComm事件.InBufferCount = 0 '清除发送缓冲区数据.OutBufferCount = 0 '清除接收缓冲区数据End WithText_send.Text = ""Text_recv.Text = ""Text_send_16.Text = ""End Sub'清空对话框数据Sub Command3_Click(Index As Integer)Text_send.Text = ""Text_recv.Text = ""Text_send_16.Text = ""End Sub'通讯端口选择Private Sub Combo1_Click()If Combo1.Text = "com1" Then '通讯端口号设置mPort = 1'Text1 = 1ElseIf Combo1.Text = "com2" ThenmPort = 2'Text1 = 2ElseIf Combo1.Text = "com3" ThenmPort = 3'Text1 = 3ElseIf Combo1.Text = "com4" ThenmPort = 4'Text1 = 4ElsemPort = 5'Text1 = 5End IfEnd SubPrivate Sub Combo2_Click()If Combo2.Text = "9600,e,8,1" ThenMSComm1.Settings = "9600,e,8,1"ElseIf Combo2.Text = "9600,n,8,1" ThenMSComm1.Settings = "9600,n,8,1"ElseIf Combo2.Text = "57600,n,8,1" ThenMSComm1.Settings = "57600,n,8,1"End IfEnd Sub'发送数据Private Sub Command1_Click(Index As Integer)'判断是否选择了端口与通讯方式If CBool(Combo1.Text = "请选择") Or CBool(Combo2.Text = "请选择") = 1 Then MsgBox "请设置端口号与通讯方式", 2Exit SubEnd If'保证串口打开If Not MSComm1.PortOpen ThenMSComm1.PortOpen = TrueEnd If'发送数据MSComm1.Output = Text_send.Text'延时For i = 1 To 2000000Next iEnd Sub'发送16进制数据Private Sub Command4_Click(Index As Integer)'判断是否选择了端口与通讯方式If CBool(Combo1.Text = "请选择") Or CBool(Combo2.Text = "请选择") = 1 Then MsgBox "请设置端口号与通讯方式", 2Exit SubEnd If'保证串口打开If Not MSComm1.PortOpen ThenMSComm1.PortOpen = TrueEnd If'发送数据Dim a, b As String'Dim a As Long, b As Stringa = Text_send_16.Textb = CLng("&H" & a)MSComm1.Output = b'延时For i = 1 To 2000000Next iEnd SubPrivate Sub Command2_Click(Index As Integer)'判断是否选择了端口与通讯方式If CBool(Combo1.Text = "请选择") Or CBool(Combo2.Text = "请选择") = 1 Then MsgBox "请设置端口号与通讯方式", 2Exit SubEnd If'保证串口打开If Not MSComm1.PortOpen ThenMSComm1.PortOpen = TrueEnd If'接受数据Dim str As Stringstr = MSComm1.Input '从接收队列中读入字符串Text_recv.Text = Text_recv.Text & str '读出字符串送显Text_recv.Text = Text_recv.Text & "" & vbCrLf '文本换行符End Sub。

串口通讯及其在VB平台下的实现

串口通讯及其在VB平台下的实现

串口通讯及其在VB平台下的实现摘要:本文首先介绍串行通讯的基础知识,然后结合示例剖析在VB平台下的串口通讯的编程技巧。

随着计算机系统的普及与外围设备技术的发展,计算机与外围设备之间的通讯就显得越来越重要了。

由于串行通信是在一根传输线上一位一位的传送信息,所用的传输线少,并且可以借助现成的电话网进行信息传送,因此,特别适合于远距离传输。

对于那些与计算机相距不远的人-机交换设备和串行存储的外部设备如终端、打印机、逻辑分析仪、磁盘等,采用串行方式交换数据也很普遍。

在实时控制和管理方面,采用多台微机处理机组成分级分布控制系统中,各CPU之间的通信一般都是串行方式。

所以串行接口是微机应用系统常用的接口,而相应的应用程序也成为今年来研究的热点。

本文旨在阐述一般的穿口通讯的原理及其程序设计,希望借此能够抛砖引玉,为更深入的研究打下一定的基础。

一、串行通讯的基本原理所谓"串行通信"是指外设和计算机间使用一根数据信号线,数据在一根数据信号线上按位进行传输,每一位数据都占据一个固定的时间长度。

这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,当然,其传输速度比并行传输慢。

相比之下,由于高速率的要求,处于计算机内部的CPU与串口之间的通讯仍然采用并行的通讯方式,所以串行口的本质就是实现CPU与外围数据设备的数据格式转换(或者称为串并转换器),即当数据从外围设备输入计算机时,数据格式由位(bit)转化为字节数据;反之,当计算机发送下行数据到外围设备时,串口又将字节数据转化为位数据。

二、串口通讯的程序设计原理前面介绍了串行通讯的基本原理,那么如何在程序设计中实现它呢?事实上,这个过程并不复杂,一般有两种实现途径:其一就是使用MSCOMM控件,此控件提供很多方便操作的属性和方法,利用它们可以很方便地实现你的目的;另外一种途径就是使用Windows API,微软为开发者提供了很多相关的串行操作的编程接口,使用这些接口,可以很完成更为强大的功能。

VB下实现串口通信的方法

VB下实现串口通信的方法

VB下实现串口通信的方法1 VB下实现串口通信的方法1.1 通信控件MSComm简介VB下的串行端口通信是通过其提供的控件Microsoft Comm control(简称MSComm)实现的。

该控件屏蔽了通信过程中的底层操作,程序员只需设置并监视MSComm控件的属性和事件,结合其它VB提供的控件就可完成对串口的初始化和数据的发送接收。

本系统中用到的主要MSComm控件属性如下:①、Commport:设置并返回通信端口代码。

默认值为1,最大值为16,需要使用超过16个通信端口时,要采用其他方式操控通信端口(如PcommPro软件)。

例如将串口2设为通信端口:mPort=2。

②、Setting:设置初始化参数。

其格式为“****,P,D,S”,其中****为波特率(baud),P为校验方式,D为数据位数,S为停止位。

默认值为“9600,N,8,1”,意为“串口通信速度为9600Baud,无校验,每次数据为8个Bit,停止位为1个Bit”。

波特率可为110,300,600,1200,2400,9600,14400,19200,28800,38400(保留)等等。

校验位默认为None(无校验),若传输距离长,可增加校验位,可选M为符号校验,E为偶校验,O为奇校验,S为空白校验。

停止位的设定值可为:1(默认值),1.5,2。

此处的设置要和单片机侧的设置保持一致,否则不能实现正常的通信。

例如我们采用的初始化参数为“2400,N,8,1”,则单片机侧的设置相应项为:定时器1的初值为E6并且SMOD(串行口波特率加倍位)为1(对应2400Bit),串口控制寄存器SCON为40(10位异步收发,对应8Bit数据位,1Bit停止位)。

③、PortOpen:设置或返回通信端口状态。

④、Input:从缓冲区返回并删除字符。

将串行输入寄存器的数据读出,并清除寄存器中已读取的数据。

寄存器的特性是FIFO(First In First Out,先进先出)。

arduino与上位机通信教程

arduino与上位机通信教程

a r d u i n o与上位机通信教程公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-1,接收函数S e r i a l.r e a d() int Serial.read(void)如果串行数据缓冲区有数据,这个函数会读取串行数据缓冲区的第一个字节,数据读取位置移动到下一个数据缓冲区,也就是说如果继续读取的话会读取下一个数据缓冲区的第一个字节.如果数据缓冲区没有数据,将返回-1.2,发送函数Serial.printSerial.print(val)Serial.print(val, format)Serial.print(val)首先注意: print是一个打印函数,主要用于在上位机上显示,让数据可视化,它会将数据用字符的形式(ASCII码)逐个发送到串口. 一般不用这个函数来进行数据传输.比如下面这段代码不会在串口助手上显示3个256,而会分别显示'2','5','6'的ASCII码值,50,53,54(分三次发送,有三个地址不同的数据缓冲区)void setup() {// initialize serial ports:Serial.begin(9600);Serial1.begin(9600);Serial3.begin(9600);Serial3.print(256);if (Serial1.available()>0) {Serial.println(Serial1.read());Serial.println(Serial1.read());Serial.println(Serial1.read());}}void loop() {}既然print是一个打印函数,那么自然,参数val的类型是任意的. Serial.print(val, format)将val的值转换成format指定的形式发送,可为BIN,OCT,HEX,DEC.3,发送函数Serial.writeSerial.write(str)str为字符串的首地址,buf为一个用来存放数据的数组的首地址. 这个函数会先发送字符串,然后返回字符串的长度.void setup(){Serial.begin(9600);}void loop(){Serial.write(45); // send a byte with the value 45int bytesSent = Serial.write("hello");Serial.println(bytesSent);}Serial.write(val)val的数据类型为unsigned char,这个函数每次只发送一个字节的数据,所以val的值在0-255之间.Serial.write(buf, len)buf为要发送的数组的首地址(注意数组的类型为unsigned char),len为数组的长度.void setup(){Serial.begin(9600);Serial3.begin(9600);Serial1.begin(9600);}void loop(){unsigned char data[2] ={11,0};Serial3.write(data,2);if(Serial1.available()>0)Serial.println(Serial1.read());Serial.println(Serial1.read());}回到开头的问题,如何从一个单片机的串口发送数据到Arduino上,然后用Arduino显示呢我们可以先用单片机的print函数把数据打印到串口,然后用Serial1.readBytes(Serial的加强版,具体看官方参考手册)把数据从串口读取回来(以ASCII码的形式),然后把ASCII码转换成字符,然后发送. unsigned int send_data =1234;char rx_data[4];void setup(){Serial.begin(9600);Serial3.begin(9600);Serial1.begin(9600);}void loop(){Serial3.print( send_data);if(Serial1.available()>0){Serial1.readBytes(rx_data,4);for(char i=0;i<4;i++){Serial.print(char(rx_data));}Serial.print("\n");}delay(500);}注意:本文的串口使用的都是板上的串口,当和非Arduino板通信的时候注意使用TTL转RS232电平转接板.(所有的代码已验证)。

VB中串口通讯的实现详解说明

VB中串口通讯的实现详解说明

VB中串口通讯的实现详解说明在VB中实现串口通讯可以分为以下几个步骤:1.引用串口通讯相关的命名空间首先在项目中引用System.IO.Ports命名空间,该命名空间包含了实现串口通讯所需的类和方法。

2.创建串口对象使用SerialPort类创建一个串口实例,可以指定串口的名称、波特率、数据位、停止位、校验位等参数。

```vbDim serialPort As New SerialPortserialPort.PortName = "COM1"serialPort.BaudRate = 9600serialPort.DataBits = 8serialPort.StopBits = StopBits.OneserialPort.Parity = Parity.None```3.打开串口使用Open方法打开串口,可以在Open之前先判断串口是否已经打开。

```vbIf serialPort.IsOpen Then'串口已经打开ElseserialPort.OpenEnd If```4.串口数据接收通过事件处理函数来处理串口接收到的数据。

可以使用DataReceived事件来处理数据接收,当串口接收到数据时会触发该事件。

```vbPrivate Sub SerialPort_DataReceived(sender As Object, e As SerialDataReceivedEventArgs) Handles serialPort.DataReceived Dim data As String = serialPort.ReadExisting'处理接收到的数据End Sub```5.串口数据发送通过串口的Write方法来发送数据。

```vbserialPort.Write("Hello World")```需要注意的是,串口通讯是一种异步操作,发送和接收数据都需要一定的时间,因此在程序中需要合理处理串口的状态。

2021VB语言下上位机与单片机串口通讯的的延时方法范文3

2021VB语言下上位机与单片机串口通讯的的延时方法范文3

2021VB语言下上位机与单片机串口通讯的的延时方法范文vb设计论文六篇:VB语言下上位机与单片机串口通讯的的延时方法 摘要:PC机与单片机之间通讯时,要制定延时方案, 以保证通讯高效、准确。

本文介绍了时钟控件Timer和Get Tick Count函数延时方法, 并编写设计延时方案。

最后通过实例介绍了两种方法组合使用, 实例已经过长时间的考验, 运行稳定可靠。

对于设计同类型的延时方案有借鉴意义。

关键词:延时;时钟控件Timer; GetTickCount; 在信息技术高速发展的时代,通讯技术是其关键问题, 其中控制更是系统稳定运行的核心。

现今多以PC为上位机, 单片机将所需的数据通过串口发送给上位机, 由上位机进行分析、处理。

上位机根据实际数据, 通过串口发出命令进行干预、控制。

在这个过程有很多处理方法和规则, 其中延时方案尤为重要。

延时方案设计的是否合理, 直接影响到数据传输的正确性和效率, 也影响到整个系统的运行是否稳定。

在PC中有各种可以实现串口通讯的语言,本文选用VB6.0作为开发语言。

Visual Basic采用可视化的图像用户界面、面向对象的程序设计思想、事件驱动的工作机制和结构化的高级程序设计语言。

可高效、快速的开发出WINDOWS环境下功能强大、图形界面丰富的应用软件[1]。

Visual Basic6.0通过调用MSComm控件进行串口通讯, 其中有几种延时方法, 本文就HEW互感器误差管理系统各个版本中的用到的两种延时方法进行阐述。

一、上位机与单片机串口通讯实现 上位机与单片机之间以串行总线接口为RS-232。

VB6.0通过调用控件MSComm来实现通讯传输。

通过属性CommPort设置COM口, 属性Settings设置通讯参数, 如:波特率, 数据位, 校验位等。

由Outpu向单片机发送命令, 属性Input将接收的数据进行处理。

一个简单的例子,使用通讯端口COM1, 波特率为9600, 无奇偶校验码, 8位数据位, 1位停止位, 发送字符“A”。

用VB开发PC与单片机通信的上位机程序

用VB开发PC与单片机通信的上位机程序

1 符号位2 百位3 十位4 个位注释:1,符号符,+(2B)或—(2D),表示数据的正负2,3,4,百位,十位,和个位数字5,结束符,用大写字母A(41)表示接着,我们就要明确设计思路了,这个程序的设计将采用Microsoft Visual Basic 6.0(以下简称VB6.0)作为编译环境,运用串口通讯控件MSComm,通过计时器控件实现以查询方式编写的串口数据的接收和实时绘图。

二,程序界面设计(1)创建一个标准EXE工程:启动VB6.0,在自动弹出的“新建工程”窗口中单击“标准EXE”图标,然后单击“打开”按钮即可创建一个标准EXE工程。

将弹出的窗体的Caption属性设置为串口通讯与实时绘图程序。

[attachment=1364699](1)添加串口通信控件MSComm:VB的串口通信控件MSComm并不会主动出现在工具箱中,当我们需要MSComm控件时,首先要把它加入工具箱中,选择“工程”菜单下的“部件...”子菜单,在弹出的“部件”对话框中,在“控件”选项卡属性中选中“Microsoft Comm Control 6.0”,单击“确定”按钮后,在工具箱中就出现了一个形似电话的图标,这就是MSComm控件,选择MSComm控件的图标,将它添加到适当位置,采用默认名称MSComm1。

[attachment=1364697][attachment=1364696](1)添加一个Timer控件用于自动接收字符:选择Timer控件的图标,将它添加到适当位置,采用默认名称Timer1,Interval属性为1,Enabled属性为False。

(2)添加两个文本框控件用于显示数据:选择TexrBox控件的图标,将它添加到适当位置,采用默认名称Text1与Text2,Text属性均设置为空,设置Text2的属性MultiLine=True,ScrollBars=2-Vertical。

Text1用于显示最新的一组数据,Text2用于储存之前的所有数据。

两个arduino串口通信例子

两个arduino串口通信例子

两个arduino串口通信例子Arduino是一款常用的开源硬件,其可以通过串口通信来多个板子之间进行数据传输。

具体实现过程中,可以使用两个Arduino进行串口通信来实现数据传输,并利用这一技术实现各种功能。

下面就来介绍两个Arduino串口通信的例子。

一、基于串口通信的LED闪烁例子该例子需要两个Arduino板子,其中一个接LED灯,另一个用于发送控制指令。

同时,还需连接蜂鸣器和一个按键。

1.首先,将接LED灯的Arduino接入电脑,打开Arduino IDE(官方开发工具),创建一个新的工程。

在工具栏中,选择正确的板子类型和串口号,然后选择“串口监视器”。

2.然后,在Arduino IDE中,编写LED控制程序。

程序的基本逻辑是:读取串口传输的指令,判断指令,然后控制LED闪烁。

示例代码如下:void loop() { if (Serial.available() > 0) { String input = Serial.readString(); if (input == "on" || input == "off"){ digitalWrite(LED_PIN, input == "on" ? HIGH : LOW); } } }3.在Arduino的setup函数中,需要将LED灯的针脚设为输出。

示例代码如下:const int LED_PIN = 13; void setup(){ Serial.begin(9600); pinMode(LED_PIN, OUTPUT); }4.将程序上传到Arduino板子中。

此时,LED灯应该已经开始闪烁了。

5.现在,我们需要另一个Arduino板子,此时需要将其连接到电脑,创建一个新工程。

在工具栏中,选择正确的板子类型和串口号。

6.在Arduino IDE中,编写串口发送程序。

c++ builder实现模拟器测控系统单片机与上位机之间的串口通汛

c++ builder实现模拟器测控系统单片机与上位机之间的串口通汛

髦塑釜凰C ++B ui l der 实现模拟器测控系统单片机与L 位机之间的串口通汛底(石家庄宝石电子集团,伟河北石家庄050035)[}商要]由于各种类型模拟器的研制和推广,作为模拟器测控平台的模拟器测控系统,就显得越来越重要模拟器测控系统作为与各类模拟器配套的测控平台。

实现了对开关量、模拟量的测量,实现了对指示灯、数码管、电压仪表、电机权袁和彩屏仪表的控制。

饫键词]串行通讯;B or l andC ++B uil der (B C B );W i nA PI由于各种类型模拟器的研制和推广,作为模拟器测控平台的模拟器测控系统,就显得越来越重要。

模拟器测控系统作为与各类模拟器配套的测控平台,实现了对开关量、模拟量的测量,实现了对指示灯、数码管、电压仪表、电机仪表和彩屏仪表的控制。

为了实现工控机和外围数据源设备通讯的问题,因计算机和单片机(如M C S 一51)都具有串行通讯口,可以设计相应的串行口通讯程序,完成二者之间的数据通讯任务,在模拟器测控系统中利用串行通讯从而使上位机以图形方式反映模拟开关的位置、指示灯状态和各仪表信息。

1串行通讯的基本原理串行端口的本质功能作为CP U 和串行设备建的编码转换器。

当数据从CP U 经过串行端口发送出去时,字节数据转换为串行的位。

在接收数据时,串行的位被转换为字节数据。

在W i ndow s 环境下,串口是系统资源的一部分。

应用程序要使用串口进行通讯,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。

串口通行程序的流程如图1:图1串u 通{,f 丁J ≠的流程|{葺j2串口通信在模拟器测控系统中的应用测控系统采用上下位机结构,其结构图如图3所示。

各测控模块相对独立,每个模块内嵌单片机,可自主完成测量、控制和通讯功能。

各测控模块以单片机为核心,分别完成信号的测量和对各种设备的控制,并通过R S232C 串行总线与上位机通讯。

arduino与vb编写的上位机通讯简单程序

arduino与vb编写的上位机通讯简单程序

上位机一、回环测试1.1 VB程序Option ExplicitPrivate Sub Command1_Click()MSComm1.Output = Trim(TextSend.Text)End SubPrivate Sub Command2_Click()Dim num As Stringnum = Trim(MSComm1.Input)If Len(num) = 0 ThenTextRecive.Text =""ElseTextRecive.Text = Trim(num) & TextRecive.TextEnd IfEnd SubPrivate Sub Command3_Click()MSComm1.PortOpen = False End SubPrivate Sub Form_Load()MSComm1.PortOpen = TrueEnd SubVB窗口1,2庆9历。

程序char val;void setup() {int i=0;for (i = 1;i< = 13;i + +)pinMode(i,OUTPUT);Serial.begin(9600);}void loop() {val=Serial.read();if(-1!=val){delay(100);Serial.print(val);}}或者另一程序也能满足要求String comdata ="";void setup(){Serial.begin(9600);}void loop(){while (Serial.available() > 0){comdata += char(Serial.read());delay(2);}if (comdata.length() > 0){Serial.println(comdata); comdata ="";}}二、数字传送加工送回2.1arduino将浮点型数据变为指定位数字符型数据void setup() { Serial.begin(9600);}void loop() {float f=3.1;char c[6];dtostrf(f,1,3,c);Serial.println(c);delay(10000);}2.2arduino将一个字符型数据转换为浮点型数据加工后再变回为制定位数的字符型数据。

基于VB的上位机程序设计,用来实时监测温度变化

基于VB的上位机程序设计,用来实时监测温度变化

基于VB的上位机程序设计,用来实时监测温度变化用来连接Arduino的传感器很多,但是都没办法直观观测传感器数据值,本文设计的是一个简单的温度检测系统,上位机程序用来检测和显示Arduino串口发送的温度数据,并通过曲线的形式描绘出温度的变化过程。

上位机程序采用VB6.0设计。

上位机程序两次接收的温度数据间隔控制在1秒钟,能够显示的温度曲线的总时间在3分钟左右。

一、VB介绍VB是Visual Basic的简称,是美国微软公司于1991年开发的一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,类似于浏览器中JAVAScript操作HTML一样、安卓APP开发等。

可用于开发Windows 环境下的各类应用程序。

今天我们以VB6.0为基础,简单的认识一下VB。

二、VB基本操作安装Visual Basic成功之后,安装程序自动在【开始】菜单中建立Visual Basic 6.0的程序组和程序项。

点击启动,在VB启动后,屏幕上将出现如图2-1所示的启动界面,在启动界面中会出现一个【新建工程】对话框。

图2-1 启动界面2.1、创建工程在VB启动界面中的【新建工程】对话框中选择一个合适的工程类型,然后单击【打开】按钮,就可以新建一个工程,新工程打开后的用户界面如图2-2所示。

图2-2 用户界面2.2、控件设置和控件属性设置在用户界面的左侧是VB的【工具箱】,在【工具箱】中有我们常用的各类控件,在设计窗体时我们可以直接从工具箱中选择控件,然后在中间的【对象窗口】中按住鼠标左键拖出一个矩形后,相应的控件就放置到了用户的编辑窗口中,对于控件的各个属性,我们可以通过VB界面右面的【属性窗口】设置各个控件的各种属性,放置并调整好控件的各个属性的,如图2-3所示。

图2-3 添加控件后的对象窗口2.3、添加代码双击【对象窗口】的空白处或者某个控件,就会出现【代码窗口】,如图2-4所示。

图2-4 代码窗口在代码窗口中为各个事件添加相应的代码,在程序运行的时候一旦某个事件发生,就会执行相应的代码段,这里以Form_Load()事件为例,简单的设计一个实例程序。

arduino与上位机VB串口通信

arduino与上位机VB串口通信

用pc控制LED灯注意红色的LED灯,熄灭的亮了,程序界面,注意要开启串口才能控制注意,我的arduino板子占用com3,所以mscomm也要用3口,不要弄错了,这里走过弯路,隔天才发现的,(彩色小点PS加上的,方便理解)。

下面是源码,方便复制:-------------------------------------------------------- 'vb写的上位机程序Private Sub Command1_Click()Comm3.PortOpen = TrueEnd SubPrivate Sub Command2_Click()Comm3.PortOpen = FalseEnd SubPrivate Sub Command3_Click()Comm3.Output = "a" '用a表示开灯End SubPrivate Sub Command4_Click()Comm3.Output = "b" '用b表示灭灯End Sub-----------------------------------------//arduino程序//通过电脑开关LED灯(LED灯负极连在arduino uno r3板数字3口,正极串一个1K电阻后连板子5V电源正极//int led1=3; //把LED连在Arduino数字端口3//初始化void setup(){Serial.begin(9600); //启动串行通讯,波特率为9600b/spinMode(led1,OUTPUT);digitalWrite(led1,HIGH); //熄灭LED灯}//主程序void loop()char val;//定义变量val,用于暂存上位机发送来的字符if(Serial.available()>0)//如果上位机发送来了字符{val=Serial.read(); //读取上位机发来的字符,并保存到val Serial.println(val); //显示接受到的字符if(val=='a')//如果上位机发送字符'a',{digitalWrite(led1,LOW); //点亮LED灯}if(val=='b')//如果上位机发送字符'b',{digitalWrite(led1,HIGH);//熄灭LED1}}delay(100);//延时100ms}。

[转]arduino串口通信

[转]arduino串口通信

[转]arduino串口通信引自:刚开始看到引脚读写函数的时候觉得很鸡肋,还不如以前端口直接赋值简单。

但是继续往下看Arduino提供的通讯函数就发现真的是要比以前方便多了...上次把键盘做好,现在要把键盘按下的信息通过串口发给PC,如果以前用单片机自己来写串口程序做,对有基础的人来说其实也不难...但是如果用Arduino来做,会发现简直是傻瓜操作,合适初学者,也合适有基础的懒人...先了解一下相关的一些串口通信函数:Serial.begin(int speed)初始化串口比特率函数,直接输入相应的数值就把串口通信的寄存器设置为对应的比特率了,够傻瓜吧..当然,可以使用的值也不是随便设的,一般4800 9600 14400……等等Serial.available()串口输入数据读取前的判断函数,返回值为1 串口buff中有数据0 串口buff中无数据或者数据已经读取出来过。

经常if(Serial.available())来询问监视串口。

Serial.read()从串口buff中读取数据进来..比如infomaition = Serial.read(); 则buff中的数据会赋值给infomaition变量Serial.print(data)把data从串口把数据发送出去...注意的是使用找个函数的时候可以有几种发送方法:1 Serial.print(data)这样的话Arduino会把data发送成字符串ASCII出去。

如int data = 79 ; Serial.print(data) ;那串口发送出去的就是string"79" 的ASCII..2 Serial.print(data,DEC)这样发送的是data的10进制字符串。

如int data = 79; Serial.print(data,DEC); 那串口发出去的就是string"79"3 Serial.print(data,HEX)这样发送的是data的16进制字符串。

Arduino串口的使用——与计算机交流

Arduino串口的使用——与计算机交流

Arduino串口的使用——与计算机交流前面的示例中使用到了Serial.begin()、Serial.print() 等语句,这些语句便是在操作串口。

Arduino与计算机通信最常用的方式就是串口通信,这在之前的学习中已经接触多次。

我们使用USB线连接Arduino Uno与计算机时,Arduino Uno 会在计算机上虚拟出一个串口设备,此时两者之间便建立了串口连接。

通过此连接,Arduino Uno便可与计算机互传数据。

使用串口与计算机通信,需要先使用Serial.begin() 初始化Arduino的串口通信功能。

Serial.begin(speed);参数speed是指串口通信波特率,这是设定串口通信速率的参数。

串口通信的双方必须使用同样的波特率,方能正常进行通信。

波特率是一个衡量通信速度的参数。

它表示每秒钟传送的bit的个数。

例如9600波特表示每秒发送9600bit的数据。

通信双方需要使用一致的的波特率才能正常通信。

Arduino串口通信通常会使用以下波特率:300、600、1200、2400、4800、9600、14400、19200、28800、38400、57600、115200。

波特率越大,说明串口通信的速率越快。

串口输出串口初始化完成后,我们便可以使用Serial.print() 或Serial.println() 向计算机发送信息了。

Serial.print(val);参数val是你要输出的数据,各种类型的数据均可。

Serial.println(val);Serial.println(val) 语句也是使用串口输出数据,不同的是println() 函数会在输出完指定数据后,再输出一组回车换行符。

下面的示例程序中,演示了使用串口输出数据到计算机:int counter=0; // 计数器void setup() {// 初始化串口 Serial.begin(9600);}void loop() {// 每loop循环一次,计数器变量加1counter = counter+1;// 输出变量Serial.print(counter);// 输出字符Serial.print( ':' );// 输出字符串;Serial.println('Hellow World');delay(1000);}上传该程序到Arduino Uno,然后可以通过Arduino IDE右上角的图标打开串口监视器。

利用串口实现Arduino双机多通道数据传输-精品文档

利用串口实现Arduino双机多通道数据传输-精品文档

利用串口实现Arduino双机多通道数据传输-精品文档利用串口实现Arduino双机多通道数据传输1 需求概述Arduino是当前最流行的开源电子平台之一,易于上手节约学习成本,缩短了开发周期,从日常生活中的智能小装置到3D 打印机,Arduino让人们发现很多以前只有专业人员才能进入的领域普通爱好者也是可以涉足的。

在一个五轴机械臂项目中,需要使用5个电位器对机械臂的相应关节进行遥控,一般通用的采用PPM控制方式的模型遥控器只有两个十字摇杆,在数量上以及操作方式上都无法满足需求,因此笔者用两个Arduino实现了多通道控制信号的发送与接收。

2 Arduino的串口通信在单片机的实际应用中,串口通信非常普遍,只需少量几根线就能和其他串口设备通讯。

Arduino是通过USB转成TTL串口下载程序的,数字接口D0和D1就是TTL串口中的RX和TX。

Arduino中提供了十余个串口相关函数,使用Serial.begin()指定传输时的波特率即可,例如Serial.begin(9600),表示速率为9600bit/s,收发双方的速率要保持一致。

在程序中,使用Serial.print()函数可以从串口输出我们需要的变量或者字符串信息(以ASCII文本方式),利用IDE 中的串口监视器,开发者可以查看单片机输出的信息,这也是调试程序的主要手段之一。

此外,还有一个Serial.write()方法,不同于print方法,此方法是把二进制数据输出到串口。

3 收发实现以5通道遥控为例,笔者设计的收发同步与校验方案如下:发射端的Arduino每组发送7个数据,第1个为同步起始标记(255,即8个二进制1),然后是5个控制信号(s1~s5),每个信号用于操作指定关节的舵机,此外还需要一个校验数据,本文采用了较简单的校验方式,把5路信号值相加作为校验数据一并发送出去。

本项目中采用的是数据发送方式,Serial.write ()方法发送的数据只能有1个字节,也就是0-255之间的整数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用pc控制LED灯
注意红色的LED灯,熄灭的
亮了,程序界面,注意要开启串口才能控制
注意,我的arduino板子占用com3,所以mscomm也要用3口,不要弄错了,这里走过弯路,隔天才发现的,(彩色小点PS加上的,方便
理解)。

下面是源码,方便复制:
--------------------------------------------------------
'vb写的上位机程序
Private Sub Command1_Click()
Comm3.PortOpen = True
End Sub
Private Sub Command2_Click()
Comm3.PortOpen = False
End Sub
Private Sub Command3_Click()
Comm3.Output = "a" '用a表示开灯
End Sub
Private Sub Command4_Click()
Comm3.Output = "b" '用b表示灭灯
End Sub
-----------------------------------------
//arduino程序
//通过电脑开关LED灯(LED灯负极连在arduino uno r3板数字3口,正极串一个1K 电阻后连板子5V电源正极
//
int led1=3; //把LED连在Arduino数字端口3
//初始化
void setup()
{
Serial.begin(9600); //启动串行通讯,波特率为9600b/s pinMode(led1,OUTPUT);
digitalWrite(led1,HIGH); //熄灭LED灯
}
//主程序
void loop()
{
char val;//定义变量val,用于暂存上位机发送来的字符
if(Serial.available()>0)//如果上位机发送来了字符
{
val=Serial.read(); //读取上位机发来的字符,并保存到val Serial.println(val); //显示接受到的字符
if(val=='a')//如果上位机发送字符'a',
{
digitalWrite(led1,LOW); //点亮LED灯}
if(val=='b')//如果上位机发送字符'b',
{
digitalWrite(led1,HIGH);//熄灭LED1 }
}
delay(100);//延时100ms
}。

相关文档
最新文档