如何通过串口将数据从ASP.Net C#发送到Arduino并在LCD上打印?
How to send data from ASP.Net C# to Arduino through Serial and print it on LCD?
我有一个 ASP.Net 页面用于 login/register 操作。我想做的是在用户登录时在 LCD 上显示用户名。我使用的硬件是 LCD Keypad Shield,如果重要的话,不仅仅是 LCD。还有可爱的Arduino UNO。
C# 端
我尝试将用户名存储在一个字符数组中,然后一个一个地发送到 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 和 运行 登录页面时,我被成功重定向到指定的页面,但 LCD 上没有显示任何内容。
其实这是我登录网站后看到的。我不知道为什么会有白色电池,当我插入电路板时它们就会出现。但是当我上传一个键盘屏蔽的示例程序时,这些单元格就会恢复正常。
我发现 PIN 码的顺序很重要。将 LiquidCrystal lcd(4,5,6,7,8,9);
行更改为 LiquidCrystal lcd(8,9,4,5,6,7);
我现在可以看到所需的输出并且启动时也没有白细胞。
我有一个 ASP.Net 页面用于 login/register 操作。我想做的是在用户登录时在 LCD 上显示用户名。我使用的硬件是 LCD Keypad Shield,如果重要的话,不仅仅是 LCD。还有可爱的Arduino UNO。
C# 端
我尝试将用户名存储在一个字符数组中,然后一个一个地发送到 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 和 运行 登录页面时,我被成功重定向到指定的页面,但 LCD 上没有显示任何内容。
其实这是我登录网站后看到的。我不知道为什么会有白色电池,当我插入电路板时它们就会出现。但是当我上传一个键盘屏蔽的示例程序时,这些单元格就会恢复正常。
我发现 PIN 码的顺序很重要。将 LiquidCrystal lcd(4,5,6,7,8,9);
行更改为 LiquidCrystal lcd(8,9,4,5,6,7);
我现在可以看到所需的输出并且启动时也没有白细胞。