Чтение serialPort с помощью ReadLine () из arduino для целей RFID - PullRequest
0 голосов
/ 07 марта 2020

Прошло много времени с тех пор, как я начал работать над своим решением, используя несколько шаблонов, также из 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.

...