Serial. wyszukiwanie i zaciągnie danych - Wersja do druku +- Arduino Polska Forum (https://forum.arduinopolska.pl) +-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino) +--- Dział: Programowanie w Arduino (https://forum.arduinopolska.pl/dzial-programowanie-w-arduino) +--- Wątek: Serial. wyszukiwanie i zaciągnie danych (/watek-serial-wyszukiwanie-i-zaci%C4%85gnie-danych) |
Serial. wyszukiwanie i zaciągnie danych - Burakko - 29-03-2018 Chciałbym wyciągać konkretne informacje z portu szeregowego. Taki podsłuch drukarki. Sypią się informacje co kilka minut. Około 10 stringów do 30 znaków ale nie jest to sztywna ilość. np: 2.5.3:023461289474 2.6.2:2621 2.7.3:2654(*5335) itp... Chciałbym olać wszystko prócz kilku komunikatów. Zacznijmy może na jednym. Chce wyssać wartość po 2.6.2: Kod: String Str1; Jeżeli wypuszczę "2.6.2:2621" na port to otrzymam "2.6.2:2621". A jak wyświetlić wszystko poza "2.6.2:" Rozumiem że jak dam Str1[6] da mi "2" ale jak dać wszystko większe niż znak szósty ? Na pewno jest mądry sposób przecież nie będę wyświetlał Stringa z pętli for. Proszę o podpowiedź RE: Serial. wyszukiwanie i zaciągnie danych - kaczakat - 29-03-2018 Do przechowywania zmiennych tekstowych w arduino służą tablice znaków i stringi. Tablice znaków możemy deklarować na różne sposoby. I jak najbardziej w tablicy właśnie użyłbyś for by pokazać wszystko od znaku 7 do końca tablicy zakończonej zawsze znakiem NULL, 0, '\0' czy tam NEW LINE. Są też funkcje do tablic tekstów jeśli nie znasz długości (wtedy oczywiście szukasz NULL na piechotę gdy nie korzystasz z funkcji), a np. części są rozdzielone znanym znakiem ',' ':' ' ' itp. Te funkcje biorą sobie ten znak jako argument i po kolei porównują komórki tablicy. Jest to upierdliwe bo trzeba pamiętać o dodatkowej komórce na ten NULL i o liczeniu indexu od 0. Stringi jako tekst nie są tablicami i do nich nie należy odwoływać się w taki sposób Str1[6] bo ten zapis leci po kolejnych komórkach pamięci, niekoniecznie zmiennej, a stringi nie muszą być zapisywane w kolejnych. Pół biedy jak odczytasz dane nie będącą twoją zmienną, albo nawet nie będącą w obszarze pamięci Twojego programu (na PC). Najwyżej zobaczysz głupoty w swoim programie. Ale jak zapiszesz tam głupoty (z punktu widzenia innego programu, innych danych Twojego programu) to system dostanie KUKU. Można skrajnie zapisać coś w bity konfiguracyjne procka i go zabić. Powinieneś użyć funkcji do tego przeznaczonej, dla stringa charAt(). Nie mniej jednak akurat w Arduino AVR są to kolejne komórki pamięci, program wyszukuje obszar gdzie może zmieścić całego stringa i teoretycznie nawet w opisie klasy jest pokazane, że oba zapisy są równoważne. Nie nabierałbym jednak takiego nawyku i przejrzał funkcje przeznaczone do stringów - zaraz przejdziesz na PC by sobie dane zapisać do jakieś bazy, pokazać na stronie i zaczniesz się bawić JS, PHP, Java, C#. Dla string Ciebie interesuje funkcja/metoda substring() Kod: Syntax Kod: #define buffsize 32 RE: Serial. wyszukiwanie i zaciągnie danych - Robson Kerman - 29-03-2018 (29-03-2018, 00:43)Burakko napisał(a): Jeżeli wypuszczę "2.6.2:2621" na port to otrzymam "2.6.2:2621". A jak wyświetlić wszystko poza "2.6.2:" Rozumiem że jak dam Str1[6] da mi "2" ale jak dać wszystko większe niż znak szósty ? Na pewno jest mądry sposób przecież nie będę wyświetlał Stringa z pętli for. Proszę o podpowiedź Konkretnie w tym przypadku, to możesz podzielić stringa w miejscu dwukropka funkcją getValue. Na przykład tak: Kod: void loop() { Drugi argument, to znak separatora. Ostatni argument to indeks, określa którą część podzielonego stringa ma zwrócić. Jeśli 0, to część przed znakiem separatora, jeśli 1, to część za tym znakiem. RE: Serial. wyszukiwanie i zaciągnie danych - ArturCz - 02-07-2020 Witam Nawiązuję do posta z względu na funkcję "getValue" Próbuję ją uruchomić w programie i cały czas pojawia się komunikat "exit status 1 'getValue' was not declared in this scope" Program wygląda tak: #include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); //RX, TX void setup() { Serial.begin(9600); mySerial.begin(9600); String getValue(); } void loop() { if(mySerial.available() > 1){ String input = mySerial.readStringUntil('\n'); String UpDown = getValue(input, ':', 0); //wycina ze zmiennej input to co przed dwukropkiem String RightLeft = getValue(input,':',1); //wycina z input to co za dwukropkiem Serial.println("Góra" + UpDown + "Boki" +RightLeft+); } delay(20); } Program dopiero jest pisany, ma służyć do odbioru danych przesyłanych z pilota. W zmiennej "input" jest ciąg znaków składających się z 2 liczb. Jedna wskazuje na wychylenie manipulatora w płaszczyźnie góra/dół i lewo/prawo. Póki co, nie jestem go w stanie skompilować. Ma ktoś jakiś pomysł??? RE: Serial. wyszukiwanie i zaciągnie danych - Robson Kerman - 03-07-2020 Usuń z setup linię Strng getValue(); |