【Arduino】使用C#实现Arduino与电脑进行串行通讯
/// <summary>
/// 初始化串口实例
/// </summary>
private void InitialSerialPort()
{
try
{
string portName = this.cmbSerials.SelectedItem.ToString();
port = new SerialPort(portName, 9600);
port.Encoding = Encoding.ASCII;
port.DataReceived += port_DataReceived;
port.Open();
this.ChangeArduinoSendStatus(true);
}
catch (Exception ex)
{
MessageBox.Show("初始化串口发生错误:" + ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
/// <summary>
/// 关闭并销毁串口实例
/// </summary>
private void DisposeSerialPort()
{
if (port != null)
{
try
{
this.ChangeArduinoSendStatus(false);
if (port.IsOpen)
{
port.Close();
}
port.Dispose();
}
catch (Exception ex)
{
MessageBox.Show("关闭串口发生错误:" + ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
/// <summary>
/// 改变Arduino串口的发送状态
/// </summary>
/// <param name="allowSend">是否允许发送数据</param>
private void ChangeArduinoSendStatus(bool allowSend)
{
if (port != null && port.IsOpen)
{
if (allowSend)
{
port.WriteLine("serial start");
}
else
{
port.WriteLine("serial stop");
}
}
}
/// <summary>
/// 从串口读取数据并转换为字符串形式
/// </summary>
/// <returns></returns>
private string ReadSerialData()
{
string value = "";
try
{
if (port != null && port.BytesToRead > 0)
{
value = port.ReadExisting();
}
}
catch (Exception ex)
{
MessageBox.Show("读取串口数据发生错误:" + ex.Message, "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
return value;
}
/// <summary>
/// 在读取到数据时刷新文本框的信息
/// </summary>
private void RefreshInfoTextBox()
{
string value = this.ReadSerialData();
Action<string> setValueAction = text => this.txtInfo.Text += text;
if (this.txtInfo.InvokeRequired)
{
this.txtInfo.Invoke(setValueAction, value);
}
else
{
setValueAction(value);
}
}
boolean sendFlag = false;//指示是否允许通过串口发送数据
String serialString = "";//串口数据缓存字符串
//参考:http://arduino.cc/en/Reference/Serial
void setup()
{
pinMode(pinLed,OUTPUT);
Serial.begin(9600);
serialString.reserve(200);//初始化字符串
}
void loop()
{
int lightValue = analogRead(A0);//从A0口读取光线传感器的值
if(readCompleted)//判断串口是否接收到数据并完成读取
{
Serial.print("read value:");
Serial.println(serialString);//将读取到的信息发送给电脑
if(serialString == "serial start")//当读取到的信息是"serial start"时,设置发送标志设置为true
{
sendFlag = true;
}
else if(serialString == "serial stop")//当读取到的信息是"serial stop"时,设置发送标志设置为false
{
sendFlag = false;
}
serialString = "";
}
if(sendFlag)//如果允许通过串口发送数据,则点亮LED并发送数据,否则关闭LED
digitalWrite(pinLed, HIGH);
Serial.print("light value:");
Serial.println(lightValue);
}
else
{
digitalWrite(pinLed, LOW);
}
delay(1000);//延时1000ms
}
void serialEvent()//串口事件处理方法,参考:http://arduino.cc/en/Tutorial/SerialEvent
{
while(Serial.available())//参考://arduino.cc/en/Serial/Available
{
char inChar = (char)Serial.read();
if(inChar != '\n')//以换行符作为读取结束标志
{
serialString += inChar;
}
else
{
readCompleted = true;
}
}
}
转载于:https://www.cnblogs.com/conexpress/p/Arduino_Connecte_Compute_With_SerialPort.html
【Arduino】使用C#实现Arduino与电脑进行串行通讯相关推荐
- arduino 编程ide_10种Arduino IDE替代品开始编程
arduino 编程ide 当我们开始开发Arduino项目时,通常我们倾向于使用Arduino IDE . 无论如何,如果我们对标准IDE不满意,我们应该考虑几种Arduino IDE替代方案. 众 ...
- arduino小车_10种Arduino IDE替代品开始编程
arduino小车 当我们开始开发Arduino项目时,通常会倾向于使用Arduino IDE . 无论如何,如果我们对标准IDE不满意,我们应该考虑几种Arduino IDE替代方案. 众所周知,在 ...
- 基于Arduino和AIDA64的lcd1602显示电脑状态
基于Arduino和AIDA64的lcd1602显示电脑状态 前言 硬件 硬件连接 软件 数据分析 代码 成品 注意 前言 大家都知道AIDA64可以用作副屏来显示电脑的一些参数如CPU温度.GP ...
- 【Arduino】重生之Arduino 学僧(1)----Arduino简介
大家对内容感兴趣的话,可以点赞关注哦 一.什么是Arduino? 如果想要知道arduino就先要了解什么是单片机,Arduino平台的基础就是聚合AVR指令集的单片机. 1.什么是单片机?它与个人计 ...
- 0022 arduino 实例讲解 TWI arduino 的 iic 库 i2c库 arduino Wire 库 主机 读 的例子
目录 硬件连接: 主机 读 的例子 硬件连接: 本次是两个Arduino 一个作为主机,一个作为从机 主机 读 的例子 // Wire Master Reader #include <Wire. ...
- Arduino Yun的硬件——Arduino Yun快速入门教程
Arduino Yun的硬件--Arduino Yun快速入门教程 前面也说过,Yun可以看做是拥有网络功能的Leonardo.更专业点来说它集Arduino Leonardo.Arduino Eth ...
- android蓝牙串口arduino源码,android – Arduino:使用串口和软件串口与蓝牙模块
我的目的是使用Arduino使用HC-05蓝牙模块在PC和 Android设备之间建立通信. 我使用PC和Arduino(串行监视器)之间的USB通信和SoftwareSerial连接到HC-05. ...
- arduino loar_如何使用Arduino开发板制作函数生成器(波形发生器)
对于喜欢偶尔鼓捣电子产品的工程师来说,他们都希望能有自己的实验室.万用表.钳形表.示波器.LCR表.函数发生器.双模电源和自动变压器都是实验室的基本配置.虽然所有这些都可以购买,但我们也可以轻松地自行 ...
- arduino与hcsr04_基于Arduino的超声波传感器HC-SR04
您将学习如何将超声波传感器HC-SR04与Arduino连接.它可以是超声波范围传感器或任何用途. 超声波传感器HC-SR04是可以测量距离的传感器.它会发出40 000 Hz(40kHz)的超声波, ...
最新文章
- 用 Flask 来写个轻博客 (18) — 使用工厂模式来生成应用对象
- 先序,中序,后序线索二叉树
- 在cygwin下编译c语言
- oracle中存储过程和函数有什么区别,Oracle中存储过程和函数的区别
- 怎样写出别人无法维护的代码
- 一个基于 React 开发的PC端音乐App
- 用计算机参加关于动漫的工作计划,动漫社团年度工作计划
- noSql-redis
- druid 连接池的释放 配合上spring bean销毁_spring boot基于DRUID数据源密码加密及数据源监控实现...
- Web前端:javascript实现图片轮播
- 勾股定理,西方称为毕达哥拉斯定理
- 谷歌浏览器点击上传文件崩溃/上传图片崩溃/打开浏览文件未响应 解决方案
- 链路聚合 Eth-Trunk
- alibaba.jym.item.external.goods.batch.offsale( 交易猫外部商家批量下架商品接口 )
- 【锁屏】 Ubuntu20.04 锁屏快捷键无反应的解决方法
- JS 开启 win10 触屏键盘
- 数据分析概述+框架+方法+工具!
- 微信小程序(九):页面跳转
- 无所不在的JavaScript与物联网设备
- 收购游戏手机厂商黑鲨背后,腾讯走了一步好棋?
热门文章
- 把变量赋值给寄存器_散装 vs 批发谁效率高?变量访问被ARM架构安排的明明白白...
- java ssh pdf_JavaSSH框架技术规范.pdf
- java string rt_如何使jvm加载我的java.lang.String而不是rt.jar中的那个
- 正则表达式匹配(动规)
- 图的基本概念【数据结构】
- (五)nodejs循序渐进-回调函数和异常处理(基础篇)
- Python模块(2)-Numpy 简易使用教程
- STL源码剖析 map
- STL源码剖析 序列式容器 slist
- windows安装 Git Large File Storage大文件下载工具ge