4
Reply

Serial port not read data

Arjun Walmiki

Arjun Walmiki

Dec 4 2012 2:05 AM
2.6k
Dear All
 
i was receive project read data from com port using the console application and save same out put at desktop in txt file the com port we r using is way bridge comport
my code are as blew pls let me know wt change i do than i will read data from com port.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
using System.Threading;
using System.IO;
 
namespace PortChat
{
    public class PortChat
    {
       // private static StreamWriter sw = new StreamWriter("filename.txt");
        static bool _continue;
        static SerialPort _serialPort;
        
        public static void Main(string[] args)
        {
            string name;
            string message;
            //string path = "";
            //// Write
            //string path = "example.txt";
            //string[] myMenu = { "A", "B", "C" };
            //File.WriteAllLines(path, myMenu);

            //// Read
            //string[] readMenu = File.ReadAllLines(path);
            StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
            Thread readThread = new Thread(Read);
            
            // Create a new SerialPort object with default settings.
            _serialPort = new SerialPort();
 
            // Allow the user to set the appropriate properties.
            _serialPort.PortName = SetPortName(_serialPort.PortName);
            _serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate);
            _serialPort.Parity = SetPortParity(_serialPort.Parity);
            _serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);
            _serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);
            _serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);
 
            // Set the read/write timeouts
            _serialPort.ReadTimeout = 500;
            _serialPort.WriteTimeout = 500;
 
            _serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
            _serialPort.Open();
            _continue = true;
            readThread.Start();
 
            //_serialPort.WriteLine("$");//Command to start Data Stream
            //// Wait for data or user input to continue.
            //Console.ReadLine();
           // Console.WriteLine("FILEPATH");
           // path = Console.ReadLine();
            Console.Write("Name: ");
            name = Console.ReadLine();
            Console.WriteLine("Type QUIT to exit");
            while (_continue)
            {
                message = Console.ReadLine();
 
                if (stringComparer.Equals("quit", message))
                {
                    _continue = false;
                }
                else
                {
                    _serialPort.WriteLine(
                        String.Format("<{0}>: {1}", name, message));
                }
            }
 
            readThread.Join();
            _serialPort.Close();
        }
        static void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort _serialPort = (SerialPort)sender;
            Console.WriteLine(_serialPort.ReadExisting());
        }
 
        public static void Read()
        {
            while (_continue)
            {
                try
                {
        
                    string message = _serialPort.ReadLine();
                    Console.WriteLine(message);
                }
                catch (TimeoutException) { }
            }
        }
        public static string SetPortName(string defaultPortName)
        {
            string portName="";
 
            Console.WriteLine("Available Ports:");
            foreach (string s in SerialPort.GetPortNames())
            {
                Console.WriteLine("   {0}", s);
                portName = s;
            }
            //my code
            _serialPort.PortName = portName;
            defaultPortName = portName;
            Console.Write("COM port({0}): ", defaultPortName);
            portName = Console.ReadLine();
 
            if (portName == "")
            {
                portName = defaultPortName;
            }
            return portName;
        }
        public static int SetPortBaudRate(int defaultPortBaudRate)
        {
            string baudRate;
 
            Console.Write("Baud Rate({0}): ", defaultPortBaudRate);
            baudRate = Console.ReadLine();
 
            if (baudRate == "")
            {
                baudRate = defaultPortBaudRate.ToString();
            }
 
            return int.Parse(baudRate);
        }
        public static Parity SetPortParity(Parity defaultPortParity)
        {
            string parity;
 
            Console.WriteLine("Available Parity options:");
            foreach (string s in Enum.GetNames(typeof(Parity)))
            {
                Console.WriteLine("   {0}", s);
            }
 
            Console.Write("Parity({0}):", defaultPortParity.ToString());
            parity = Console.ReadLine();
 
            if (parity == "")
            {
                parity = defaultPortParity.ToString();
            }
 
            return (Parity)Enum.Parse(typeof(Parity), parity);
        }
        
        public static int SetPortDataBits(int defaultPortDataBits)
        {
            string dataBits;
 
            Console.Write("Data Bits({0}): ", defaultPortDataBits);
            dataBits = Console.ReadLine();
 
            if (dataBits == "")
            {
                dataBits = defaultPortDataBits.ToString();
            }
 
                return int.Parse(dataBits);
        }
        public static StopBits SetPortStopBits(StopBits defaultPortStopBits)
        {
            string stopBits;
 
            Console.WriteLine("Available Stop Bits options:");
            foreach (string s in Enum.GetNames(typeof(StopBits)))
            {
                Console.WriteLine("   {0}", s);
            }
 
            Console.Write("Stop Bits({0}):", defaultPortStopBits.ToString());
            stopBits = Console.ReadLine();
 
            if (stopBits == "")
            {
                stopBits = defaultPortStopBits.ToString();
            }
 
            return (StopBits)Enum.Parse(typeof(StopBits), stopBits);
        }
        public static Handshake SetPortHandshake(Handshake defaultPortHandshake)
        {
            string handshake;
 
            Console.WriteLine("Available Handshake options:");
            foreach (string s in Enum.GetNames(typeof(Handshake)))
            {
                Console.WriteLine("   {0}", s);
            }
 
            Console.Write("Handshake({0}):", defaultPortHandshake.ToString());
            handshake = Console.ReadLine();
 
            if (handshake == "")
            {
                handshake = defaultPortHandshake.ToString();
            }
 
            return (Handshake)Enum.Parse(typeof(Handshake), handshake);
        }
    }
}
 

the ouput are as below
when press enter
1 st output Available port name.
2nd out when press enter bound rate 9600.
3rd out when press enter Available parity.parity.
4th Data bite 8.
4th out when press enter Available stop bite.
5th out when press enter Available Handshake.
6th Name
7th Quit to exit

Answers (4)