如何通过串口将数据从ASP.Net C#发送到Arduino并在LCD上打印?

时间:2015-07-08 21:31:18

标签: c# asp.net arduino arduino-uno

我有一个用于登录/注册操作的ASP.Net页面。我尝试做的是在用户登录时在LCD上显示用户名。我使用的硬件是LCD键盘屏蔽,如果重要的话不仅仅是LCD。还有可爱的Arduino UNO。

C#side

我尝试将用户名存储在char数组中并逐个发送到arduino,但如果我没有给它一个字符串,则Serial.Write()会出错。我想立刻发送整个名字,但Serial.Read()似乎一次只读一个。

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

namespace EComm
{
    public partial class Login : System.Web.UI.Page
    {
        SerialPort sp;
        protected void Page_Load(object sender, EventArgs e)
        {
            sp = new SerialPort();
            sp.PortName = "COM13";
            sp.BaudRate = 9600;
            txtPass.TextMode = TextBoxMode.Password;
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            DBDataContext db = new DBDataContext();
            db.Connection.Open();
            var users = from allusers in db.Users select allusers;
            foreach (User _user in users)
            {
                if (txtUser.Text == _user.UserName.Trim())
                    if (txtPass.Text == _user.UserPassword.Trim())
                    {
                        Session["User"] = _user.UserName;
                        String outgoing = Session["User"].ToString();
                        for (int i = 0; i < outgoing.Length; i++)
                        {
                            sp.Open();
                            sp.Write(outgoing[i].ToString());
                            sp.Close();
                        }
                        Response.Redirect("Default.aspx");
                    }
            }
        }

Arduino方

#include <LiquidCrystal.h>
char usrName[10];
char incomingChar;
byte index=0;

LiquidCrystal lcd(4,5,6,7,8,9);
int baud = 9600; 
int x=0;
int y=0;

void setup()
{
 lcd.begin(16,2);
 lcd.setCursor(x,y); 
 Serial.begin(baud);
}

void loop()
{
    while(Serial.available()>0){
    if(index<10){
      y=1;
      incomingChar=Serial.read();
      usrName[index]=incomingChar;
      lcd.setCursor(x,y);
      lcd.print(usrName[index]);
      index++;
      x++;
    }
}
}

两个代码都不会出现任何错误或警告。当我将程序上传到Arduino并运行登录页面时,我成功地重定向到所声明的页面,但液晶显示屏上没有显示任何内容。

实际上这是我登录网站后看到的内容。我不知道为什么会有白色电池,当我插上电路板时它们就会出现。但是当我上传一个用于键盘屏蔽的示例程序时,这些单元格就会恢复正常。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

我发现针数的顺序很重要。将LiquidCrystal lcd(4,5,6,7,8,9);行更改为LiquidCrystal lcd(8,9,4,5,6,7);我现在可以看到所需的输出,并且启动时也没有白色单元格。