C# ( C Sharp ) - Nhận dữ liệu từ Arduino

1.Giới thiệu

Lấy nguồn cảm hứng từ bài viết C# (C Sharp) – Một cách điều khiển Arduino bằng máy tính của bạn Đinh Hồng Thái . Mình sẽ xây dựng phần tiếp theo của loạt bài giao tiếp với Arduino bằng máy tính thông qua C#, dựa trên công nghệ Window Form Application….Nói nghe nguy hiểm vậy, nhưng thực ra bài viết khá đơn giản…keke. Nội dung chính của bài này đó là: “Nhận dữ liệu từ Arduino đến máy tính, thông qua phần mềm tự tạo bằng C#” !!!!!

Thực ra nó cũng tương tự như Serial Monitor của Arduino IDE…nhưng nếu trong các cuộc thi, bạn sẽ không thể tự vỗ ngực rồi nói Serial Monitor là do mình tự tạo ra đc……Vì vậy, bạn hãy tự tạo phần mềm theo phong cách riêng của chính mình….!!!

2. Cách làm

Để làm được phần mềm này….các bạn phải có công cụ hỗ trợ đó là: Microsoft Visual Studio hoặc Visual C# - Một công cụ của các lập trình viên chuyên nghiệp (các bạn có thể xem lại bài C# (C Sharp) – Một cách điều khiển Arduino bằng máy tính của bạn Đinh Hồng Thái để biết thêm chi tiết nhé!). Sau khi cài đặt xong, triển thôi!

a. Phần giao diện

b. Phần code

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

// Thêm 3 em này vào là OK, để sài SerialPort

using System.IO;

using System.IO.Ports;

using System.Xml;

// Bắt đầu code



namespace nhandulieuCOM

{

    public partial class Form1 : Form

    {

        string InputData = String.Empty; // Khai báo string buff dùng cho hiển thị dữ liệu sau này.

        delegate void SetTextCallback(string text); // Khai bao delegate SetTextCallBack voi tham so string

        public Form1()

        {

            InitializeComponent();

            // Khai báo hàm delegate bằng phương thức DataReceived của Object SerialPort;

            // Cái này khi có sự kiện nhận dữ liệu sẽ nhảy đến phương thức DataReceive

            // Nếu ko hiểu đoạn này bạn có thể tìm hiểu về Delegate, còn ko cứ COPY . Ko cần quan tâm

            serialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceive);

            string[] BaudRate = { "1200", "2400", "4800", "9600", "19200", "38400", "57600", "115200" };

            comboBox2.Items.AddRange(BaudRate);

        }



        private void Form1_Load(object sender, EventArgs e)

        {

            comboBox1.DataSource = SerialPort.GetPortNames();// Quét các cổng COM đang hoạt động lên comboBox1

            comboBox2.SelectedIndex = 3;

       // Set tí chế độ mặc đình cho nó nguy hiểm tí!!!!

        }



// Cái này là chế độ làm tươi… Hiển thị trạng thái, các bạn xem lại bài của Đinh Hồng Thái để biết thêm chi tiết

        private void timer1_Tick(object sender, EventArgs e)

        {

            if (!serialPort1.IsOpen)

            {



                label5.Text = ("Chưa kết nối");

                label5.ForeColor = Color.Red;

            }

            else if (serialPort1.IsOpen)

            {



                label5.Text = ("Đã kết nối");

                label5.ForeColor = Color.Green;



            }

        }

        private void DataReceive(object obj, SerialDataReceivedEventArgs e)

        {

            InputData = serialPort1.ReadExisting();

            if (InputData != String.Empty)

            {

                // textbox1 = InputData; // Ko dùng đc như thế này vì khác threads .

                SetText(InputData); // Chính vì vậy phải sử dụng ủy quyền tại đây. Gọi delegate đã khai báo trước đó.

            }



        }

        // Hàm của em nó là ở đây. Đừng hỏi vì sao lại thế.

        private void SetText(string text)

        {

            if (this.textBox1.InvokeRequired)

            {

                SetTextCallback d = new SetTextCallback(SetText); // khởi tạo 1 delegate mới gọi đến SetText

                this.Invoke(d, new object[] { text });

            }

            else this.textBox1.Text += text;

        }

// Cái dưới tương tự bài của Thái...tạo button mở và đóng Serial

        private void button2_Click(object sender, EventArgs e)

        {

            if (!serialPort1.IsOpen)

            {

                serialPort1.PortName = comboBox1.Text;

                serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text);

                serialPort1.Open();

            }

        }



        private void button1_Click(object sender, EventArgs e)

        {

            serialPort1.Close();

        }

  }

}

3. Kết quả

Và đây là thành quả:

Ở bài sắp tới. mình sẽ hướng dẫn chi tiết cách xây dựng lại Serial Monitor bằng C# với đầy đủ chức năng nhận và gửi với giao diện Max Vip...Các bạn hãy chờ đón và ủng hộ mình bằng cách Rate Note bài nhé!!

Các bạn có thể tải về source code tại đây.

Chúc các bạn thành công và có nhiều những phát minh sáng chế trong tương lai!!!!

lên
48 thành viên đã đánh giá bài viết này hữu ích.
Chuyên mục: 
Các dự án được truyền cảm hứng

Select any filter and click on Apply to see results

Các bài viết cùng tác giả

Nạp code cho Arduino Promini thông qua mạch nạp của Arduino UNO

Arduino Promini là một board mạch siêu nhỏ, và rẻ tiền....Lý do là Promini không có mạch nguồn chuyển đổi 5V, 3.3V và đặc biệt là không có mạch nạp. Vì thế bạn cần phải mua thêm một mạch nạp, để nạp code cho Arduno Promini...Nếu bạn không có mạch nạp, vậy phải làm thế nào để nạp code cho Promini?? Bạn có thể dễ dàng sử dụng board Arduino Uno R3 sẵn có của mình để nạp code cho Arduino Pro Mini khi không có mạch nạp, hay bạn muốn tiết kiệm con chip ATmega16U2 laugh

lên
24 thành viên đã đánh giá bài viết này hữu ích.

Chế tạo Serial Monitor từ C# (C Sharp) - Một sản phẩm được truyền cảm hứng

Sau khi đọc bài viết C sharp (C#) - Một cách điều khiển ARDUINO bằng máy tính !!! của Đinh Hồng Thái mình thấy rất hay và muốn phát triển nó...Trong đầu mình chợt lóe lên những ý tưởng với C#. Mình tự đặt câu hỏi: Làm thế nào để tự tạo ra 1 Serial Monitor của chính mình!!! Qua một thời gian tìm hiểu, mình đã thành công!!!

lên
26 thành viên đã đánh giá bài viết này hữu ích.