SOYER Napisano Styczeń 26, 2020 Udostępnij Napisano Styczeń 26, 2020 Cześć, jak wiadomo z tego tematu ,pracuję nad przeróbką tej biblioteki. Mamy w tej bibliotece funkcję smsRead String GSMSim::smsRead(uint8_t index) { this->print("AT+CMGR="); this->print(index); this->print(",0\r"); _buffer = _readSerial(); String durum = "INDEX_NO_ERROR"; if (_buffer.indexOf("+CMGR:") != -1) { String klasor, okundumu, telno, zaman, mesaj; klasor = "UNKNOWN"; okundumu = "UNKNOWN"; if (_buffer.indexOf("REC UNREAD") != -1) { klasor = "INCOMING"; okundumu = "UNREAD"; } if (_buffer.indexOf("REC READ") != -1) { klasor = "INCOMING"; okundumu = "READ"; } if (_buffer.indexOf("STO UNSENT") != -1) { klasor = "OUTGOING"; okundumu = "UNSENT"; } if (_buffer.indexOf("STO SENT") != -1) { klasor = "OUTGOING"; okundumu = "SENT"; } String telno_bol1 = _buffer.substring(_buffer.indexOf("\",\"") + 3); telno = telno_bol1.substring(0, telno_bol1.indexOf("\",\"")); // telefon numarası tamam String tarih_bol = telno_bol1.substring(telno_bol1.lastIndexOf("\",\"") + 3); zaman = tarih_bol.substring(0, tarih_bol.indexOf("\"")); // zamanı da aldık. Bir tek mesaj kaldı! mesaj = tarih_bol.substring(tarih_bol.indexOf("\"") + 1, tarih_bol.lastIndexOf("OK")); mesaj.trim(); durum = "FOLDER:"; durum += klasor; durum += "|STATUS:"; durum += okundumu; durum += "|PHONENO:"; durum += telno; durum += "|DATETIME:"; durum += zaman; durum += "|MESSAGE:"; durum += mesaj; } return durum; } Chcę w programie odczytać czy sms przyszedł z właściwego numeru i poznać jego treść. Teraz moje pytanie czy dobrze kombinuję. Czy jeśli "wyciągnę" z biblioteki tą linijkę: String klasor, okundumu, telno, zaman, mesaj; i wstawię ją jako zmienne globalne w głównym programie (oczywiście mogę zmienić nazwy tych zmiennych, tylko wtedy w bibliotece też muszę je pozmieniać) to w ten sposób uzyskam wszystkie potrzebne mi informacje tzn. numer telefonu, treść i czas z datą? Czy dobrze kombinuję czy nie bardzo?? Niestety dalej nie wiem o co chodzi z tym index-em w: smsRead(uint8_t index) ?? Link do komentarza Share on other sites More sharing options...
ethanak Styczeń 26, 2020 Udostępnij Styczeń 26, 2020 6 minut temu, SOYER napisał: Czy dobrze kombinuję czy nie bardzo?? Jak kulawy Icek pod górkę. Po co masz wyciągać z biblioteki jakieś dumdurumy, jeśli funkcja bardzo ładnie Ci je zwraca wkomponowane w jeden string? Próbowałeś w ogóle przeczytać ten kod czy po prostu skopiowałeś go tutaj, przy okazji skrzętnie usuwając formatowanie żeby było trudniej zgadnąć? Kogo jak kogo, ale Ciebie o takie coś nie podejrzewałem... Pierwszy raz widzę na oczy tę bibliotekę, nawet nie mam żadnego modułu żeby coś sprawdzić ale rzut oka na funkcję smsRead pozwala mi stwierdzić, że funkcja zwraca string w postaci rekordów oddzielonych znakami '|' w postaci <etykieta>:<wartość> - czyli trzeba sobie po prostu z tego co zwróciła owe rekordy wyciągnąć. Ja bym nie bawił się w żadne funkcje na String, wziąłbym po prostu c_str(), a potem strtok, strncmp, strchr i takie tam... doczytasz sobie w string.h. 18 minut temu, SOYER napisał: Niestety dalej nie wiem o co chodzi z tym index-em w: Hm... wpisanie do googla AT CMGR conieco może wyjaśnić, np. to: Cytat index is an integer specifying the location of the SMS message to be read from the message storage area. Podepnij moduł, naskrob kawałek prostego programu, wyślij do niego sms-a i próbuj przeczytać. Link do komentarza Share on other sites More sharing options...
ethanak Styczeń 26, 2020 Udostępnij Styczeń 26, 2020 28 minut temu, SOYER napisał: Widziałem co zwraca ta funkcja, dlatego wymyśliłem co wymyśliłem. 🙂 Może ja dzisiaj ciężko myślę ale nie bardzo łapię. Widziałeś, że funkcja zwraca wszystko czego potrzebujesz więc zamiast to wykorzystać postanowiłeś przerobić funkcję tak, aby korzystała z jakichś szemranych zmiennych globalnych? w BIBLIOTECE??? <tu powinien być emoticon ale nie znam takiego który przedstawia moją szczękę leżącą na podłodze trzy pietra niżej> 29 minut temu, SOYER napisał: więc się doedukuję... Warto choćby z tego powodu, że jeśli będziesz się bawić w String i podobne pochodne malloca to za chwilę Ci ramu zabraknie. 30 minut temu, SOYER napisał: 51 minut temu, ethanak napisał: AT CMGR nie wiedziałem, że to coś ważnego Hm... chcesz powiedzieć, że bierzesz się za przerabianie biblioteki operującej na komendach AT nie wiedząc, do czego one służą??? Link do komentarza Share on other sites More sharing options...
SOYER Styczeń 26, 2020 Autor tematu Udostępnij Styczeń 26, 2020 Zgadza się :), dlatego założyłem nowy temat bo w tamtym mnie nikt nie naprowadził... :)) Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
ethanak Styczeń 26, 2020 Udostępnij Styczeń 26, 2020 Bo pytałeś o gryzienie biblioteki, zamiast o to co powinieneś (np. "jak ze stringu o takiej to a takiej postaci wyciągnąć takie to a takie informacje"). Dawno byś wiedział i pewnie miał gotowy program. Jak mniemam, teraz już wiesz (albo przynajmniej wiesz co zrobić żeby wiedzieć bez zawracania głowy pytaniami o tabliczkę mnożenia)? 🙂 Link do komentarza Share on other sites More sharing options...
SOYER Styczeń 26, 2020 Autor tematu Udostępnij Styczeń 26, 2020 Prosiłem o pomoc w wykorzystystaniu konkretnych funkcji. Dalej nie wiem o co biega z tym indexem, coś mam wpisać w argumentach tej funkcji? Link do komentarza Share on other sites More sharing options...
ethanak Styczeń 26, 2020 Udostępnij Styczeń 26, 2020 1 minutę temu, SOYER napisał: Prosiłem o pomoc w wykorzystystaniu konkretnych funkcji. Tak, zamiast o pomoc w interpretacji wyników. Gdybyś zatytułował ten wątek nieco inaczej (np. podał że chodzi tu o GSM) to bym nawet tu nie zajrzał, bo temat jest mi raczej obcy - podobnie jak i pewnie paru osobom, które C++ znają lepiej ode mnie, stringi parsują na śniadanie, a z modemami GSM nie mają nic wspólnego. Sztuka zadawania pytań... 4 minuty temu, SOYER napisał: Dalej nie wiem o co biega z tym indexem, coś mam wpisać w argumentach tej funkcji? Prawdopodobnie tak bo funkcja tego wymaga... pewnie trzeba podać co chcesz przeczytać. Funkcja zaczyna się od wydania komendy CMGR z parametrem, którym jest właśnie ten nieszczęsny index (fajnie że po turecku też się index nazywa). Sprawdź co ten parametr oznacza - tylko może nie w tutorialach do Arduino lecz albo w dokumentacji modułu, albo w spisie komend AT. Tu niestety nie pomogę. 1 Link do komentarza Share on other sites More sharing options...
SOYER Styczeń 26, 2020 Autor tematu Udostępnij Styczeń 26, 2020 Pytanie: Czy nie prościej wyciągnąć dwie zmienne do globalnych i ich użyć wedle potrzeb, zamiast używać tych wszystkich c_str(), a potem strtok, strncmp, strchr i takie tam...?? A o tym index poczytam w kontekście tej knkretnej komendy AT. Poczytam też co to te AT komendy... 😉 Link do komentarza Share on other sites More sharing options...
ethanak Styczeń 26, 2020 Udostępnij Styczeń 26, 2020 (edytowany) 31 minut temu, SOYER napisał: Czy nie prościej wyciągnąć dwie zmienne do globalnych i ich użyć wedle potrzeb Nie. Masz za dużo pamięci w swoim Arduino? Będziesz pamiętał, żeby zwolnić pamięć po wykorzystaniu? Rozumiem, że znasz ograniczenia związane z malloc() na AVR-ach i wiesz, jak uniknąć pułapek? Czy może za jakiś czas będziesz pisał rozpaczliwe posty w stylu "czemu mój program się zawiesza po odebraniu 53 SMS-a?" Tych takich tamów dzisiaj nie znasz i wydają się bardzo tajemnicze (przypominam, że kiedyś nie wiedziałeś co to automat skończony) - jak poznasz to będziesz wiedział jak te takie tamy zastosować nie tylko przy odbieraniu SMS-a, ale przy fafnastu innych sprawach związanych z przetwarzaniem tekstu. Zmienne globalne zastosujesz raz w jednym programie, biblioteka przestanie być biblioteką (bo będzie wymagała istnienia konkretnych zmiennych globalnych) albo - co gorsze - sama sobie takie zmienne zdeklaruje. A teraz wyobraź sobie, że Pan Turek odkrył krytyczny błąd w swojej bibliotece, albo w jakiś sposób ja ulepszył... nieważne w sumie co tam zrobił ale coś takiego, że fajnie by było mieć nową wersję... każdy normalny człowiek po prostu ściąga nową wersję biblioteki i przekompilowuje program bez żadnych zmian. Ty będziesz siedział i nogi w balei moczył, bo Pan Turek zupełnie zmieni tę funkcję i takich zmiennych już tam nie będzie... Poza tym do zwracania wyników funkcji nie służą zmienne globalne. Jest mnóstwo innych prawidłowych sposobów (ze zwracaniem wartości poprzez return na czele). A zmienne globalne owszem, do wielu rzeczy służą, ale przede wszystkim potrzebne są wtedy, gdy do danej zmiennej musisz dostać się z wielu różnych miejsc programu. Po co jakiejkolwiek funkcji niezwiązanej z uzbrojeniem/rozbrojeniem alarmu wiedza o tych zmiennych? 31 minut temu, SOYER napisał: Poczytam też co to te AT komendy... A nie zaszkodzi - bo może się okazać, że biblioteka Pana Turka wcale nie jest najlepszym rozwiązaniem i napisanie tego po swojemu według własnych potrzeb może być dużo lepszym rozwiązaniem. Edytowano Styczeń 26, 2020 przez ethanak 1 1 Link do komentarza Share on other sites More sharing options...
AdamSamborski Styczeń 27, 2020 Udostępnij Styczeń 27, 2020 Proponuje stworzyć strukturę opisującą numer, treść, datę itp oraz osobną funkcję która na podstawie zwróconego stringa z funkcji smsRead wypełni wszystkie pola w strukturze. Będzie czysto i przejrzyście. Do cięcia stringa użyj jak radzą wyżej c_str(), a potem strtok, strncmp, strchr. 1 Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »