Pobieranie danych z portu szeregowego i zapisanie ich w tablicy char

0

Witam. Jestem kompletnie zielony w C# a muszę w nim napisać program do robota na projekt. Nie ogarniam jeszcze tych klas, obiektów, jak używać wbudowanych funkcji.

Problem wygląda tak: Z Arduino w robocie mają przychodzić do mnie dane po SerialPorcie (komunikacje mam ogarniętą), ja chcę stringa, którego otrzymam zapisać w tablicy (o wymiarach odpowiadających długości stringa). Z komunikatu z Arduino potrzebuje 4,5,6 oraz 8,9,10 znak. Będą to cyfry, najlepiej żeby te 3 znaki zamieniać na liczbę 3 cyfrową.

Solucja się składa z 3 projektów, są one ze sobą powiązane. W jednym projekcie jest pętla Main, w drugim mam wszystkie funkcje dotyczące Seriala w 3 jest mój program sterujący robotem.

Sprawa jest bardzo nagła, przez całą noc będę odświeżał forum oczekując na jakąkolwiek pomoc :). Dzięki za pomoc!

0

W C# string to tablica charów więc w czym problem?

string str = "12345";
Console.WriteLine(str[2]);

Output: 3

Aha, i jeśli chcesz zamienić 4,5,6 znak na int to tak:

 string str = "0001112222";
 int i = Int32.Parse(str.Substring(3, 3)); 
0

W .Net istnieje klasa SerialPort która ma właściwość BaseStream. Możesz z niej odczytywać kolejne bajty - metoda Read. Odczytywanie napisów jest bardziej złożone musisz użyć klasy StreamReader, z odpowiednim kodowaniem (zakładam że Arduino będzie wysyłał tekst w ASCII). StreamReader może też odczytać tablicę znaków jeżeli tak ci wygodniej przykład pokazuje jak mniej więcej oczytać 9 znaków z portu COM.

SerialPort port = new SerialPort("COM1");
StreamReader sr = new StreamReader(port.BaseStream, Encoding.ASCII);
char[] tab = new char[10];
sr.Read(tab, 0, 10); 

Czy twoja aplikacja ma mieć graficzny interfejs użytkownika(okienka)? Jeżeli tak to będziesz musiał trochę przemyśleć swoje podejście (pętla w main raczej odpada).

0

Dzięki za odpowiedzi.

W C# string to tablica charów więc w czym problem?
string str = "12345";
Console.WriteLine(str[2]);

Output: 3

Aha, i jeśli chcesz zamienić 4,5,6 znak na int to tak:
string str = "0001112222";
int i = Int32.Parse(str.Substring(3, 3));

Tylko chodzi o to, że mój string nie jest określony z góry. Otrzymuję go z SerialPortu, chciałem użyć funkcji do konwersji ze stringa na char ale mam problem z odpowiednim używaniem ich...

0

Nigdy nie bawiłem się serialportem ale napisałeś że komunikacje z nim masz ogarniętą i że otrzymanego stringa chcesz przekonwertować na tablicę. To ci napisałem jak to zrobić.
Nie rozumiem co znaczy że string nie jest z góry określony.

chciałem użyć funkcji do konwersji ze stringa na char

Jakich funkcji?

0

@dam1an pewnie chodzi o metodę toCharArray

1 użytkowników online, w tym zalogowanych: 0, gości: 1