|
Is the data coming into the port delimited? Have you tried using seriport.ReadLine(), then parsing out the line?
|
|
|
|
|
i have 6 datas.and each of data between 0-255 (just one byte).if i use serialport.readline() so how can i separate my datas in visual c#?
for example my datas:
10
245
100
12
250
8
when i use serialport_readline() so how can i seperate these_another question is that will i get datas with arranged?
|
|
|
|
|
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:
<br />
String[] data;<br />
data = seriport.ReadLine().Split(System.Convert.ToChar(":"));<br />
|
|
|
|
|
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:
<br />
private void seriport_DataReceived(object sender, SerialDataReceivedEventArgs e)<br />
{<br />
string[] data;<br />
data = comport.ReadLine().Split(System.Convert.ToChar(":"));<br />
FunctionCall();<br />
}<br />
|
|
|
|
|
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?
|
|
|
|
|
Can you post the portion of the code you are having problems with?
|
|
|
|
|
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
|
|
|
|
|
What errors are you getting? Are you simply trying to set the .Text value of a textbox?
|
|
|
|
|
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:
<br />
try<br />
{<br />
if (comport.IsOpen)<br />
comport.Close();<br />
else<br />
{<br />
comport.BaudRate = int.Parse(Settings.Default.BaudRate.ToString());<br />
comport.DataBits = int.Parse(Settings.Default.DataBits.ToString());<br />
comport.StopBits = (StopBits)Settings.Default.StopBits;<br />
comport.Parity = (Parity)Settings.Default.Parity;<br />
comport.PortName = Settings.Default.PortName.ToString();<br />
<br />
try<br />
{<br />
comport.Open();<br />
}<br />
catch { }<br />
}<br />
}<br />
catch (Exception ex)<br />
{<br />
log.Write("ERROR: " + ex.Message, "InitializePort");<br />
}<br />
|
|
|
|
|
soon before i see blue screen on DOS it must be dangerous error?.now i ll try your code.
|
|
|
|
|
what is the "log" in your programme?
log.write(.....)
i mean this log. i try to write
|
|
|
|
|
You can take that out, its a class I wrote for logging errors.
|
|
|
|
|
my friend my computer will die soon second time my computer closed itself.
i just want to sequence my 6 datas.
|
|
|
|
|
Im not sure what else to tell you without seeing the code as a whole. What I have posted should work. Com ports are pretty easy to work with, just make sure its opened correctly, then read the data and do what you need to do with it.
|
|
|
|
|
i have done it many times.my problem is that:
i have a simulation project in wpf.so my serial datas will will simulate my robot arm s axises.for example:i send from microcontrolor to computer this:
for(;;)
{
delay_ms(1);
putc(value1);
putc(':');
putc(value2);
putc(':');
putc(value3);
putc(':')
putc(value4);
putc(':');
putc(value5);
putc(':');
putc(value6);
}
so i must get datas like this: "value1" for "axis 1","value2" for "axis2" ....
now could i explain my problem?
|
|
|
|