After sending a string that is a command keyword to my Arduino via the serial port, I am trying to get values in an application in C #, and a certain string and puts them in two different arrays using regular expressions, however this giving the following error in the red mark in the code below: "The input string was not in an incorrect format." Follow the code below: If you can help, thank you.
void SerialPort1DataReceived(object sender, SerialDataReceivedEventArgs e) {
RxString += serialPort1.ReadExisting(); //le o dado disponível na serial.Sempre recebe os dados adicionandono final do buffer
if (RxString.StartsWith("@")) {
this.Invoke(new EventHandler(trataDadoRecebidoComandSimples)); //chama outra thread para escrever o feedback de comando realizado com sucesso no text box
}
if (RxString.StartsWith("#")) {
this.Invoke(new EventHandler(trataDadoRecebidoComandDistancia)); //chama outra thread para escrever o feedback de comando realizado com sucesso no text box
}
}
public void limpaStringComandos() {
}
public void trataDadoRecebidoComandSimples(object sender, EventArgs e) {
//depois de receber os dados verifica se possui uma mensagem completa nele, ou seja, o feedback do arduino que o comando foi realizado com sucesso. Ex: Navio 01 Leme a vante executado com sucesso - (OKNULAV)
//devemos fazer isso em um loop pois pode acontecer de chegar mais de uma mensagem ao mesmo tempo
int identificador = 0;
while ((identificador = RxString.IndexOf('@')) >= 0) {
txtMonitor.Text = RxString;
//separamos a primeira mensagem do identificador sem o delimitador
string mensagem = RxString.Substring(0, identificador);
//tratamos ela da forma que for necessário, no caso, alimentar o txtDistancia com a informação limpa de acumulos de dados.
txtStatus.Text = mensagem;
//por fim removemos ela do buffer
RxString = RxString.Substring(identificador + 1);
}
}
public void trataDadoRecebidoComandDistancia(object sender, EventArgs e) {
int identificador = 0;
while ((identificador = RxString.IndexOf('#')) >= 0) {
string patternDistancia = @ "^\#[A-Z]{1,7}\r\n\#[A-Z]{1,9}\#"; //Retira os caracteres excedentes e deixa no array somente "numero#" ex.: 17#17#18#...
string patternDistanciaRetorno = @ "^\#[A-Z]{1,7}([0-9]{1,3}\#){10}"; //Retira os caracteres excedentes e deixa no array somente "#feedback do Arduino#" ex.: #OKNUSAPRO#
Match m = Regex.Match(RxString, patternDistancia);
while (m.Success) {
m = m.NextMatch();
}
string[] SDistancia = Regex.Split(RxString, patternDistancia, RegexOptions.IgnoreCase);
string[] SRetorno = Regex.Split(RxString, patternDistanciaRetorno, RegexOptions.IgnoreCase);
string SString = string.Concat(SDistancia);
string SStringRetorno = string.Concat(SRetorno);
String[] SVetor = SString.Split('#');
int cont = 0;
int media = 0;
int soma = 0;
for (int n = 0; n <= 9; n++) {
cont = cont + 1; * * int caracter = Int32.Parse(SVetor[n]); // aqui ocorre o erro**
soma += Convert.ToInt32(caracter);
}
media = soma / cont;
txtDistancia.Text = media.ToString();
txtMonitor.Text = RxString;
//separamos a primeira mensagem do identificador sem o delimitador
string mensagem = SStringRetorno.Substring(0, identificador);
//tratamos ela da forma que for necessário, no caso, alimentar o txtDistancia com a informação limpa de acumulos de dados.
txtStatus.Text = mensagem;
//por fim removemos ela do buffer
SStringRetorno = SStringRetorno.Substring(identificador + 1);
}
}