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ả

Chế tạo Radar với Arduino

Xin chào các bạn!!! Hôm nay, qua bài viết này mình muốn giới thiệu cho các bạn về một khả năng thần kì của Arduino. Đó là “ Chế tạo một hệ thống Radar “ – Một chức năng có trong Kbot Wifi Robot của anh Ngô Huỳnh Ngọc Khánh. Với chức năng này, các bạn có thể giúp Robot của mình có thể quét địa hình, phát hiện chướng ngại vật, hỗ trợ Robot di chuyển một cách đơn giản hơn…..Mà lại còn rất ngầu nữa heart. Vậy còn chần chừ gì nữa, chúng ta hãy bắt tay ngay vào việc thôi!!!!

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

Kết nối Raspberry và máy tính qua cổng Serial

Trong bài chia sẻ này, mình sẽ chia sẻ cách kết nối, điều khiển Raspberry Pi 2 qua cổng Serial. Ưu điểm của cách kết nối này là có thể đồng thời cấp nguồn cho Pi của bạn và không cần bàn phím, chuột hay màn hình kết nối và làm việc với Pi. Bạn sẽ cần cài đặt phần mềm mô phỏng thiết bị đầu cuối ( ở đây là Putty) nếu bạn sử dụng Windows, ngoài ra còn cần cài đặt Driver cần thiết. Raspberry Pi được tích hợp sẵn cổng giao tiếp nối tiếp Serial cho phép các thiết bị kết nối tới giao diện điều khiển dòng lệnh, đăng nhập và làm việc như một User. Chúng ta cũng nên tìm hiểu một cách tương tự để kết nối với Pi qua mạng nội bộ sử dụng SSH theo bài viết sau của bác raspi: tại đây

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