最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于C#實(shí)現(xiàn)一個(gè)溫濕度監(jiān)測(cè)小工具

 更新時(shí)間:2023年01月12日 08:23:46   作者:Vector_LI  
這篇文章主要為大家詳細(xì)介紹了如何基于C#實(shí)現(xiàn)一個(gè)溫濕度監(jiān)測(cè)小工具,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下

概述

這一章節(jié),我們主要實(shí)現(xiàn)的功能是為軟件增加實(shí)時(shí)顯示曲線。

winform在4.x版本的時(shí)候,還有charts組建,到了5.0時(shí)代,沒(méi)有了原生的charts組件

我這邊選擇第三方曲線包。ScottPlot

安裝插件包

比較簡(jiǎn)單,已經(jīng)提了很多次了。工具,nuget包管理。搜索scottplot,之后點(diǎn)擊安裝

注意安裝的是scottplot.winform

修改界面,增加曲線顯示

在表格下方,增加一個(gè)曲線。在工具欄中搜索plot

如果沒(méi)有搜索到,可以重新啟動(dòng)一下vs修改完畢的界面如圖

修改代碼

增加曲線初始化

具體的曲線配置我們可以參考scottplot的demo,這里我直接給出code

本次窗口比較小,因此我禁止了x軸的顯示

        /// <summary>
        /// 初始化曲線
        /// </summary>
        private void InitPlot()
        {
            //line
            formsPlot1.Plot.Style(Style.Seaborn);
            formsPlot1.Plot.Title("數(shù)據(jù)曲線");
            //不顯示x軸
            formsPlot1.Plot.XAxis.Ticks(false);
            formsPlot1.Plot.XAxis.Line(false);
            formsPlot1.Plot.YAxis2.Line(false);
            formsPlot1.Plot.XAxis2.Line(false);
        }

增加曲線刷新

scottplot的刷新目前沒(méi)有找到合適的辦法

使用了比較笨的辦法,就是先clear然后重新賦值

有什么好的辦法,歡迎交流

        /// <summary>
        /// 刷新曲線
        /// </summary>
        private void RefreshLine(DataTable ThisData)
        {
            try
            {
                if (ThisData.Rows.Count < 1)
                    return;
                //清空
                formsPlot1.Plot.Clear();
                //溫度
                string[] data = ThisData.AsEnumerable().Select(d => d.Field<string>("溫度")).ToArray();
                double[] ys = Array.ConvertAll<string, double>(data, s => double.Parse(s));
                //濕度
                string[] data2 = ThisData.AsEnumerable().Select(d => d.Field<string>("濕度")).ToArray();
                double[] ys2 = Array.ConvertAll<string, double>(data2, s => double.Parse(s));
                formsPlot1.Plot.AddSignal(ys);
                formsPlot1.Plot.AddSignal(ys2);
                formsPlot1.Refresh();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.StackTrace);
                MyLogger._.Error(ex.Message + "\r\n" + ex.StackTrace);
            }
        }

修改load函數(shù),增加曲線初始化

        /// <summary>
        /// 界面加載函數(shù)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            MyLogger._.Debug("程序啟動(dòng)");
            //掃描串口
            string[] comlist = ComPort.V_ScanPort();
            if (comlist.Length < 1)
            {
                MessageBox.Show("沒(méi)有掃描到串口,請(qǐng)檢查硬件連接");
                return;
            }
            else 
            {
                foreach (string name in comlist)
                {
                    this.comboBox1.Items.Add(name);
                }
                //默認(rèn)
                this.comboBox1.Text = comlist[0];
            }
            //波特率初始化
            this.comboBox2.Items.Add("4800");
            this.comboBox2.Items.Add("9600");
            this.comboBox2.Items.Add("115200");
            //默認(rèn)
            this.comboBox2.Text = "9600";
            //默認(rèn)地址
            this.textBox1.Text = "01";
            //默認(rèn)背景色
            this.button1.BackColor = Color.LightGreen;
            //初始化數(shù)據(jù)
            InitDataTable();
            InitDataGrid();
            InitPlot();
        }

修改定時(shí)器函數(shù),增加曲線實(shí)時(shí)刷新

 /// <summary>
        /// 定時(shí)器回調(diào)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (Runport.IsOpen)
            {
                //獲取地址
                byte addr = byte.Parse(this.textBox1.Text);
                string ret = THSensor.ReadTHDataFromSensor(Runport, addr);
                if (!string.IsNullOrEmpty(ret))
                {
                    string temp = ret.Split('&')[0];
                    string humi = ret.Split('&')[1];
                    //入庫(kù)操作
                    DB_SerAPI.SaveTHData(temp, humi);
                    //刷新列表
                    string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                    if (DataBuffer != null)
                    {
                        Index++;
                        DataRow row = DataBuffer.NewRow();
                        row["ID"] = Index.ToString();
                        row["時(shí)間"] = time;
                        row["溫度"] = temp;
                        row["濕度"] = humi;
                        DataBuffer.Rows.Add(row);
                    }
                    //刷新曲線
                    RefreshLine(DataBuffer);
                }
                else
                {
                    MessageBox.Show("無(wú)數(shù)據(jù),請(qǐng)檢查配置參數(shù)");
                }
            }
        }

測(cè)試

到目前為止,我們做的功能都是基于一個(gè)固定不變的小窗口驅(qū)完成。

后續(xù),我們?yōu)榱私o工具增加歷史數(shù)據(jù)查詢(xún),報(bào)警設(shè)置等基本的功能。需要對(duì)界面進(jìn)行重新的布局和設(shè)計(jì)。

下一節(jié),我們將主要修改布局,是窗體可以自適應(yīng)分辨率。

到此這篇關(guān)于基于C#實(shí)現(xiàn)一個(gè)溫濕度監(jiān)測(cè)小工具的文章就介紹到這了,更多相關(guān)C#溫濕度監(jiān)測(cè)工具內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Unity 如何獲取鼠標(biāo)停留位置下的物體

    Unity 如何獲取鼠標(biāo)停留位置下的物體

    這篇文章主要介紹了Unity 如何獲取鼠標(biāo)停留位置下的物體,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • C#獲取字符串后幾位數(shù)的方法

    C#獲取字符串后幾位數(shù)的方法

    這篇文章主要介紹了C#獲取字符串后幾位數(shù)的方法,實(shí)例分析了C#操作字符串的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • c# winform多線程的小例子

    c# winform多線程的小例子

    c# winform多線程的小例子,需要的朋友可以參考一下
    2013-04-04
  • C#并發(fā)編程之Task類(lèi)詳解

    C#并發(fā)編程之Task類(lèi)詳解

    Task是建立在線程池之上的一種多線程技術(shù),它的出現(xiàn)使Thread成為歷史。其使用方法非常簡(jiǎn)單,本文就來(lái)通過(guò)幾個(gè)示例為大家講講它的具體使用吧
    2023-03-03
  • Unity攝像機(jī)移至某物體附近觀察此物體

    Unity攝像機(jī)移至某物體附近觀察此物體

    這篇文章主要為大家詳細(xì)介紹了Unity攝像機(jī)移至某物體附近,觀察此物體,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C#實(shí)現(xiàn)多線程下載文件的方法

    C#實(shí)現(xiàn)多線程下載文件的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)多線程下載文件的方法,實(shí)例分析了C#多線程及文件傳輸?shù)南嚓P(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • C#觀察者模式(Observer Pattern)實(shí)例教程

    C#觀察者模式(Observer Pattern)實(shí)例教程

    這篇文章主要介紹了C#觀察者模式(Observer Pattern),主要以一個(gè)實(shí)例的形式講述了C#觀察者模式的實(shí)現(xiàn)過(guò)程,詳細(xì)講述了接口的定義、通知及動(dòng)作的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2014-09-09
  • C# 使用Word模板導(dǎo)出數(shù)據(jù)的實(shí)現(xiàn)代碼

    C# 使用Word模板導(dǎo)出數(shù)據(jù)的實(shí)現(xiàn)代碼

    最近接到個(gè)需求,使用word模板導(dǎo)出數(shù)據(jù),怎么實(shí)現(xiàn)這個(gè)需求呢,今天小編通過(guò)實(shí)例代碼給大家介紹C# 使用Word模板導(dǎo)出數(shù)據(jù)的方法,感興趣的朋友一起看看吧
    2021-06-06
  • C#使用WebClient實(shí)現(xiàn)上傳下載

    C#使用WebClient實(shí)現(xiàn)上傳下載

    這篇文章介紹了C#使用WebClient實(shí)現(xiàn)上傳下載的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • WPF自定義Panel的示例詳解

    WPF自定義Panel的示例詳解

    WPF中默認(rèn)的拖放操作可能并不是那么好用,為了解決這個(gè)問(wèn)題,我們可以自定義一個(gè)?Panel?來(lái)實(shí)現(xiàn)更簡(jiǎn)單的拖拽操作,下面我們就來(lái)看看具體實(shí)現(xiàn)方法吧
    2024-03-03

最新評(píng)論

临沧市| 丰台区| 余庆县| 宣武区| 成安县| 杂多县| 辽阳县| 康保县| 休宁县| 吕梁市| 安新县| 彝良县| 蕲春县| 梅河口市| 平阳县| 新巴尔虎左旗| 瓦房店市| 普陀区| 体育| 喀喇沁旗| 临沧市| 龙岩市| 长治市| 鄂州市| 鸡泽县| 云梦县| 台湾省| 得荣县| 苏尼特右旗| 万全县| 麦盖提县| 冕宁县| 库伦旗| 新津县| 南投县| 六盘水市| 鹿泉市| 华安县| 自治县| 永丰县| 奉节县|