1

Visual Studio 2010 C#コード:

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 YamanPonics
{
    public partial class Form1 : Form
    {
        string RxString;

        //Default SerialPortStatus equals TRUE when first starting up
        Boolean serialPortDisconnected = true;

        public Form1()
        {
            InitializeComponent();

            //Add available Serial COM ports to combobox
            foreach (string ports in System.IO.Ports.SerialPort.GetPortNames())
            {
                //MessageBox.Show("Serial port avialible" + " " + ports);
                comPortCmbBox.Items.Add(ports);
            }
        }

        private void DisplayText(object sender, EventArgs e)
        {
            serialMsgViewerRchTxt.AppendText(RxString);
            MessageBox.Show("Displayed Serial Text!");
        }

        private void serialPort1_DataReceived (object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {   
            RxString = serialPort1.ReadExisting();
            this.Invoke(new EventHandler(DisplayText));
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            //If SerialPort1 IsOpen
            if (serialPort1.IsOpen)
            {
                //Close SerialPort1 communication
                serialPort1.Close();
            }
        }


        private void connectDisconnectBtn_Click(object sender, EventArgs e)
        {
            //Set arduinoComPort value to COM Port value
            string arduinoComPort = comPortCmbBox.Text;

            //if SerialPortStatus boolean equals FALSE then
            if (serialPortDisconnected &&  (arduinoComPort != ""))
            {

                //Set serialPort1 BaudRate value to default value of 38400(required for atlas-scientific sensors)
                serialPort1.BaudRate = 38400;

                //Set serialPort1 Read and Write timeout values
                serialPort1.ReadTimeout = 250;
                serialPort1.WriteTimeout = 250;

                //Set serialPort1 DataBits value
                serialPort1.DataBits = 8;

                //Open serialPort1 communication
                serialPort1.Open();

                //Change connectDisconnectBtn text to Disconnect
                connectDisconnectBtn.Text = "Disconnect";

                //Set serialPortDisconnected to FALSE
                serialPortDisconnected = false;

            }
            else //if SerialPortStatus bollean equals TRUE
            {
                //Close SerialPort1 communication
                serialPort1.Close();

                //Set connectDisconnectBtn text to Connect
                connectDisconnectBtn.Text = "Connect";

                //Set serialPortDisconnected to TRUE
                serialPortDisconnected = true;
            }
        }

        private void SendBtn_Click(object sender, EventArgs e)
        {
            //if serialPort1 IsOpen then
            if (serialPort1.IsOpen)
            {
                serialPort1.Write("{ph}");
            }
        }
    }
}

そのコードは、単純なシリアル接続/切断および送信/受信アプリケーションです。接続、切断、送信は正しく機能します。私のarduinoがコマンドを受信すると、応答を送り返します。2010 C#アプリケーションがリッチテキストボックスで応答を受信して​​おらず、その理由がわかりません。別のシリアルターミナルプログラムを使用すると応答を受信できるので、データが送信されていることを確認できます。応答を正常に受信するために何をしていませんか?

4

1 に答える 1

2

serialPort1.DataReceived イベントが正しく配線されていますか? ハンドラー メソッドがあるように見えますが、イベントをサブスクライブしているようには見えません。

これをどこかに置く必要があります:

serialPort1.DataReceived += serialPort1_DataReceived;
于 2012-06-25T23:12:44.683 に答える