Прошло много времени с тех пор, как я начал работать над своим решением, используя несколько шаблонов, также из stackoverflow, и после того, как я нашел хорошо работающий iam, делящийся им, чтобы другие могли найти эту полезную информацию, мне нужно было следующее: 1. прочитать 125 кГц RFID карты / метки на плате Arduino с подключенным считывателем RFID 2. считывайте любое количество карт, оставаясь на одной и той же форме, пока пользователь не нажмет кнопку 3. избегайте настройки каждого COM-порта каждый раз, когда он меняется - очень полезно для моих нужд 4. поиск RFID-карта в SQL и имя и идентификатор владельца карты, на основании которых я могу настроить различный доступ в соответствии с потребностями
private string DispString;
SerialPort SP;
private void Form1_Load(object sender, EventArgs e) //don't forget to put a serialPort1 resource in Design mode
{
foreach (string str in SerialPort.GetPortNames())
{
SP = new SerialPort(str);
if (SP.IsOpen == false)
{
serialPort1.PortName = str;
try
{
serialPort1.BaudRate = 9600;
serialPort1.DataBits = 8;
serialPort1.Parity = Parity.None;
serialPort1.StopBits = StopBits.One;
serialPort1.Open();
serialPort1.ReadTimeout = 500;
if (serialPort1.IsOpen)
{
DispString = "";
textBox6.Text = "";
}
}
catch (Exception)
{
serialPort1.Close();
}
}
}
serialPort1.DataReceived += new SerialDataReceivedEventHandler(RFID_DataReceived);
}
private void RFID_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (DispString.Length >= 30)
{
serialPort1.Close();
}
else
{
DispString = serialPort1.ReadLine();
Invoke(new EventHandler(DisplayText));
}
}
private void DisplayText(object sender, EventArgs e)
{
textBox6.Text = DispString; //HEX code of RFID card from serialPort
}
private void textBox6_TextChanged(object sender, EventArgs e)
{
if (textBox6.Text.Length >= 5)
{
textBox6.Text = Regex.Replace(textBox6.Text, @" ", "").Trim(); //removes empty space created by ReadLine()
try
{
textBox2.Text = "";
using (SqlConnection Conn = new SqlConnection(Settings.Default.connection))
{
//Find personal number
SqlCommand Comm1 = new SqlCommand("SELECT " + Settings.Default.personalnumber + " FROM " + Settings.Default.tableID + " WHERE " + Settings.Default.columnwithhexnumber + " LIKE '%" + textBox6.Text.ToString() + "%'", Conn);
Conn.Open();
string IDfromSQL = Comm1.ExecuteScalar().ToString();
String ID = IDfromSQL.TrimStart(new Char[] { '0' });
//Find name of user
SqlCommand Comm2 = new SqlCommand("SELECT " + Settings.Default.name + " FROM " + Settings.Default.tableID + " WHERE " + Settings.Default.columnwithhexnumber + " LIKE '%" + textBox6.Text.ToString() + "%'", Conn);
string Name = Comm2.ExecuteScalar().ToString();
string identification = Name + " " + ID;
textBox2.Text = identification;
Conn.Close();
textBox2.BackColor = Color.Green;
}
}
catch (Exception ee)
{
MessageBox.Show(ee.ToString());
return;
}
}
else
{
textBox6.Text = "";
}
}
private void button2_Click(object sender, EventArgs e)
{
if (textBox2.Text == "")
{
MessageBox.Show("Please swipe your card to RFID reader");
}
else
{
serialPort1.Close();
Dispose();
Registration nextForm = new Registration();
Hide();
nextForm.ShowDialog();
Close();
}
}
И, конечно, println должен использоваться в коде Arduino.