serial port and data sequencing problem...?
-
If you are not using a delmiting character, such as a comma or colon, then you would not be able to seperate the values. What does the string look like when it is sent to the port?
-
i use "putc(value)".i use microcontrolor.i use 6 times putc(value); putc(value1); putc(value2); . . . or i can use: printf("%03u %03u "%03u %03u "%03u %03u ",value1,value2,...); i must solve this problem.cause my greduation work must be finish:(
Can you insert a delimiter between the values using the printf? If so, then you can use ReadLine() on the serialport, and you would know that they are in the order you sent them. When you get the value, you can use .Split() on it, and put the values into a string array. Somthing like this:
String[] data; data = seriport.ReadLine().Split(System.Convert.ToChar(":"));
-
Can you insert a delimiter between the values using the printf? If so, then you can use ReadLine() on the serialport, and you would know that they are in the order you sent them. When you get the value, you can use .Split() on it, and put the values into a string array. Somthing like this:
String[] data; data = seriport.ReadLine().Split(System.Convert.ToChar(":"));
-
will i send ":" at the last of 6 values or between each of variable will be ":" 1)value1:value2:value3:value4:value5:value6: like this? 2)value1value2value3value4value5value6: or like this?
-
Like this: value1:value2:value3:value4:value5:value6 You dont need one after value6, but you'll need one in between each of the other values.
-
can i ask you different question? when i programme goes to serialport_datareceived(..) so how can i break this.and i want to call another function how can i do it?
I'm not sure I understand what you are asking. You should be able to call a function from with the data_recieved() function. Like this:
private void seriport_DataReceived(object sender, SerialDataReceivedEventArgs e) { // This method will be called when there is data waiting in the port's buffer string[] data; data = comport.ReadLine().Split(System.Convert.ToChar(":")); FunctionCall(); }
-
I'm not sure I understand what you are asking. You should be able to call a function from with the data_recieved() function. Like this:
private void seriport_DataReceived(object sender, SerialDataReceivedEventArgs e) { // This method will be called when there is data waiting in the port's buffer string[] data; data = comport.ReadLine().Split(System.Convert.ToChar(":")); FunctionCall(); }
-
i mean that must i break this thread?i tried to write serial data in serialport_datareceived();function but i didnt do it. must i use some "invoke" code and "break" like break codes?
-
i mean that must i break this thread?i tried to write serial data in serialport_datareceived();function but i didnt do it. must i use some "invoke" code and "break" like break codes?
-
i ll try:) did u write anything in this function?i mean did u try to write this data do textboxes in serialport_datareceived(..)?i tried but i didnt do it:)
-
yes.i cant remember now. now i try "readline" :).but my variables come very frequently.so must i clear "string[] data" ?my data will come every milisecond
-
yes.i cant remember now. now i try "readline" :).but my variables come very frequently.so must i clear "string[] data" ?my data will come every milisecond
-
Yes, once you parse the recieved data, you can clear the array that holds it. Another option would be to close the port until you need it opened again. To clear the array, I think this should work: Array.Clear(data, 0, data.Length);
-
"cause of thread output or an application I/O prossesing was canceled" i get this warning:)i didnt get serial datas:) i think i must write invoke but how:)
-
Do you get any errors when you open the port? Also, can you post the code within the data_recieved event handler?
-
string[] data; private void serialPort1_DataReceived(object sender,System.IO.Ports.SerialDataReceivedEventArgs e) { //problemhere//data=serialPort1.ReadLine().Split(System.Convert.ToChar(":")); serialPort1.Close(); write(); }
Hmm, how are you opening the port? I can run the line where you are getting the error. Here is how I open mine:
try { if (comport.IsOpen) comport.Close(); else { // Set the port's settings comport.BaudRate = int.Parse(Settings.Default.BaudRate.ToString()); comport.DataBits = int.Parse(Settings.Default.DataBits.ToString()); comport.StopBits = (StopBits)Settings.Default.StopBits; comport.Parity = (Parity)Settings.Default.Parity; comport.PortName = Settings.Default.PortName.ToString(); // Open the port try { comport.Open(); } catch { } } } catch (Exception ex) { //no com port may be present log.Write("ERROR: " + ex.Message, "InitializePort"); }
-
Hmm, how are you opening the port? I can run the line where you are getting the error. Here is how I open mine:
try { if (comport.IsOpen) comport.Close(); else { // Set the port's settings comport.BaudRate = int.Parse(Settings.Default.BaudRate.ToString()); comport.DataBits = int.Parse(Settings.Default.DataBits.ToString()); comport.StopBits = (StopBits)Settings.Default.StopBits; comport.Parity = (Parity)Settings.Default.Parity; comport.PortName = Settings.Default.PortName.ToString(); // Open the port try { comport.Open(); } catch { } } } catch (Exception ex) { //no com port may be present log.Write("ERROR: " + ex.Message, "InitializePort"); }
-
Hmm, how are you opening the port? I can run the line where you are getting the error. Here is how I open mine:
try { if (comport.IsOpen) comport.Close(); else { // Set the port's settings comport.BaudRate = int.Parse(Settings.Default.BaudRate.ToString()); comport.DataBits = int.Parse(Settings.Default.DataBits.ToString()); comport.StopBits = (StopBits)Settings.Default.StopBits; comport.Parity = (Parity)Settings.Default.Parity; comport.PortName = Settings.Default.PortName.ToString(); // Open the port try { comport.Open(); } catch { } } } catch (Exception ex) { //no com port may be present log.Write("ERROR: " + ex.Message, "InitializePort"); }