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!!!

I. Thiết kế giao diện chính và trang trí

Như những bài trước, các bạn sẽ thiết kế 1 giao diện cho app của mình như sau:

Ngoài ra các bạn kéo thêm timer1 vào, serialPort1, StatusTrip....ngoài ra có thể trang trí bằng lịch, hay hình ảnh cho nguy hiểm!!! timer1 các bạn thiết lập Properties như sau:

Sau đó, các bạn click chuột phải vào tên Project trong cột Solution Explorer bên phải màn hình >>> Chọn Add >> Win Form để tạo một Form2....Mình sẽ thiết lập trong app...Nếu ấn Tác giả thỳ sẽ hiện lên Form2...Form2 là logo bạn tự tạo...Cho Pro tí ấy mà!!!...

Trong Form2 này các bạn có thể kéo thả các logo của mình, thêm các label giới thiệu cho ngầu ...Đây là cách trang trí của mình..hehe:

Tiếp theo...các bạn tạo thêm một Form3....Khi chạy App...Form3 sẽ hiện ra...giao liện như kiểu: "Xin chờ 1 tí, chương trình đang Load..." cho nguy hiểm:

Ở Form3, bạn tùy chỉnh Properties cho Form3 như chèn hình ảnh vô, chọn BackGrondImage là Strench, FormBorderStyle chọn None giống như hình trên...và các bạn kéo thả 1 ProcessBar1, một timer..thiết lập timer1 Enable là true..và time là 32

II. Code

Sau khi xong phần thiết kế giao diện các bạn nạp code cho từng Form:

Form1:

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;

using System.Threading;// khởi tạo hàm Threading

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()
        {
        //cái Thread thực ra để chạy Form3 khi ms zô...cho ngầu
            Thread t = new Thread(new ThreadStart(SplashScreen));//tạo 1 Thread t là SplashScreen
            t.Start();// khi chương trình bật thỳ chạy t...tức là gọi SplashScreen
            Thread.Sleep(4500);//ngủ 4,5s  
            InitializeComponent();
            t.Abort();//sau đó đóng t
            // 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);// Thiết lập cho comboBox2
        }
        private void SplashScreen()
        {
            Application.Run(new Form3());//chạy Form3
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.DataSource = SerialPort.GetPortNames();
            comboBox2.SelectedIndex = 3;
        }







        private void timer1_Tick(object sender, EventArgs e)
        {
            if (!serialPort1.IsOpen)
            {
                button2.Enabled = true;
                button1.Enabled = false;
                Thongbao.Text = ("Bạn chưa kết nối, hãy chọn một cổng COM để kết nối nhé!!! keke !! Arduino.vn");
                Thongbao.ForeColor = Color.Red;
            }
            else if (serialPort1.IsOpen)
            {
                button2.Enabled = false;
                button1.Enabled = true;
                Thongbao.Text = ("Đã kết nối nhé!!! keke");
                Thongbao.ForeColor = Color.Green;

            }
        }
        private void DataReceive(object obj, SerialDataReceivedEventArgs e)
        {
            InputData = serialPort1.ReadExisting();
            if (InputData != String.Empty)
            {
                // txtIn.Text = 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;
        }

        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();
        }

        private void button5_Click(object sender, EventArgs e)
        {
        // Hiện tí thông báo..cho ngầu
            if (serialPort1.IsOpen)// đã kết nối thì
            {
            //nếu chưa nhập
                if (textBox2.Text == "") MessageBox.Show("Nhập dữ liệu cần gửi vào nhé!!!", "Đỗ Hữu Toàn - Thông báo");
                else

                    serialPort1.Write(textBox2.Text);// ngược lại...gửi giá trị từ textBox tới cổng COM
            }
            // Nếu cổng COM chưa kết nối
            else MessageBox.Show("Kết nối cổng COM đi bạn", "Đỗ Hữu Toàn - Thông báo");
            textBox2.Clear();


            }

        private void button3_Click(object sender, EventArgs e)
        {
            textBox2.Clear();
            textBox1.Clear();
            //Ấn xóa clear hết textbox
        }

        private void button4_Click(object sender, EventArgs e)
        {
            DialogResult stt = MessageBox.Show("Bạn chắc chắn muốn thoát chương trình???", "Đỗ Hữu Toàn - Arduino.vn", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (stt == DialogResult.Yes ) MessageBox.Show("Cảm ơn bạn đã sử dụng chương trình, nhớ Rate Note ủng hộ mình nhé","Đỗ Hữu Toàn - Arduino.vn");
            Close();
        }

        

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Form2 tacgia = new Form2();
            tacgia.ShowDialog();
            // chạy form2 khi ấn nút tác giả ( linklabel1)
        }

        
        
     }
}
    

Form 2

(chỉ là phần logo..k cóa code nhé)

Form 3

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;

namespace nhandulieuCOM
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            //Khi timer làm tươi...tăng 1 đơn vị cho progessBar
            progressBar1.Increment(1);
            if(progressBar1.Value == 100)
            {
            // Nếu ProgessBar = 100..Tức là Max r đó
                timer1.Stop();// thì sop timer..ngừng làm tươi..ngừng tăng processBar
            }

        }
    }
}

III. Kết quả

Trên đây là cách chế tạo Serial Monitor của mình...Các bạn xem và góp ý nhé!!! Chúc các bạn thành công!!!

Các bạn có thể tải về bản solution của mình tại đây nhé.

 

Những hình ảnh về dự án: 
Bài viết truyền cảm hứng: 
lên
26 thành viên đã đánh giá bài viết này hữu ích.
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ả

Giới thiệu về board mạch Arduino Esplora

Hôm nay, mình sẽ giới thiệu về board cực vip, và đặc biệt hỗ trợ cho các dự án robot ...Đó chính là board Arduino Esplora kỳ diệu.

lên
15 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: 

Giao tiếp 2 board Arduino bằng Module Bluetooth

Làm thế nào để giao tiếp 2 board Arduino bằng bluetooth??? Làm thế nào để sử dụng máy tính không có sẵn chức năng bluetooth để điều khiển Arduino thông qua Bluetooth??? Đó là những câu hỏi rất nan giải....Và để trả lời cho những câu hỏi đó, mình đã viết bài này nhé!!!

Vấn đề ở đây đó chính là làm sao để kết nối 2 module bluetooth MASTER và SLAVE...Chỉ cần giải quyết được vấn đề này, thì câu hỏi coi như đã được giải. Khi kết nối được 2 module bluetooth với nhau, bạn có thể giao tiếp 2 board Arduino với nhau, hoặc dùng máy tính giao tiếp với module MASTER...module MASTER giao tiếp vs module SLAVE, để điều khiển Arduino bằng máy tính.

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