做单片机用到WEB控制。。跨界的,所以这个问题应该很简单。求帮助

xsh6528 2012-10-05 01:03:53
我是想用自己的电脑做服务器,通过PC对单片机通信,实现对家里电器的远程控制。

做了个web页面。想实现,点击按钮,PC通过串口向单片机发送一个字节数据。然后单片机的程序是,收到一个字节,立刻返回多个字节的字符串。

现在问题是,按下按钮后PC能正常发送,单片机应该也正常返回了,但是web端没能完整接受这个字符串,导致get.text里显示不全。(例如我让单片机返回的是Connected:现在按一下网页里的button,有时候显示出“Connected”可是有时候又显示“Con”,甚至完全显示为空白“”)

我个人的判断是因为按下button就pageload了,所以DataReceivedHandler没来的及接受完数据。

有什么能让buttonclick不pageload而是DataReceivedHandler处理完之后再刷新页面的方法吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.IO.Ports;
using System.Text;


public partial class _Default : System.Web.UI.Page
{
private SerialPort comm;
private bool flag=false;
protected void Page_Load(object sender, EventArgs e)
{
comm = new SerialPort();
comm.BaudRate = 9600;
comm.PortName = "COM4";
comm.DataBits = 8;
comm.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
protected void Check_Click(object sender, EventArgs e)
{
comm.Open();
Time.Text = (System.DateTime.Now.ToLongTimeString());
comm.Write("1");
Get.Text = "";//按下按钮就把这个textbox清空,避免无法分辨当前显示的是这一次还是上一次返回的数据
}
protected void Get_TextChanged(object sender, EventArgs e)
{
}
void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Get.Text = indata;
}
}
...全文
261 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xsh6528 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lyq8376 的回复:]
楼主,
Page_Load方法的方法体改成
if(!IsPostBack)
{
comm = new SerialPort();
comm.BaudRate = 9600;
comm.PortName = "COM4";
comm.DataBits = 8;
comm.DataReceived += new SerialDataReceivedEventHandler(DataRe……
[/Quote]

放在这里面了。
但是后面执行到
protected void Check_Click(object sender, EventArgs e)
{
comm.Open();
Time.Text = (System.DateTime.Now.ToLongTimeString());
comm.Write("1");
Get.Text = "";//按下按钮就把这个textbox清空,避免无法分辨当前显示的是这一次还是上一次返回的数据
}

的comm.Write("1");的时候
报错说comm没有实例化。怎么没、回事??
足球中国 2012-10-05
  • 打赏
  • 举报
回复
第一次知道。web也可以串口通信。
  • 打赏
  • 举报
回复
楼主,
Page_Load方法的方法体改成
if(!IsPostBack)
{
comm = new SerialPort();
comm.BaudRate = 9600;
comm.PortName = "COM4";
comm.DataBits = 8;
comm.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
试试

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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