Skocz do zawartości

Wrona

Użytkownicy
  • Zawartość

    93
  • Rejestracja

  • Ostatnio

Reputacja

5 Neutralna

O Wrona

  • Ranga
    4/10

Informacje

  • Płeć
    Mężczyzna

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. @ethanak Nie ma znaczenia. Nie potrafisz skupić się na konkretnym problemie. Już ci napisałem że jest sobie nadajnik i odbiornik. Nie ma dla nas znaczenia jako one się komunikują i czy się rozumieją. Zapewne się rozumieją skoro całość działa bez zarzutu. Dane przekazywane przez nadajnik są prawidłowo odczytywane i przetwarzane przez odbiornik. Cokolwiek się dzieje w pierwotnej wersji tego urządzenia to dzieje się tak jak ma się dziać. Teraz na scenę wchodzę ja "Janusz Hakerstwa". Dzięki sile i godności osobistej rozkręcam obudowę i podpinam swoje Arduino Uno jako "podsłuch" czyli mamy pierwotny odbiornik ale jest też dodatkowy czyli mój. Stworzyliśmy nową linie komunikacji jednostronnej i to na tym trzeba się skupić. Mam więc dostęp do tego stringa i go widzę swymi "paczałkami". Znamy więc jako strukturę i nic nie jest tutaj tajemnicze. Mimo że starasz się pisać tak by nic nie napisać, to moja skromna osoba (która więcej nie wie, niż wie bo nadal raczkuje przed komputerem) wywnioskowała że ma pokombinować tak by: 1. Do pierwotnego nadajnika musze się dobrać i dopisać tam fragment który będzie dodatkowo wysyłał "ciąg znaków" 2. Muszę przekopać internety za jakaś konkretna funkcją która już w odbiorniku/podsłuchu zamieni mi ten ciąg znaków tablicę czy vektor automatycznie rozpoznając gdzie zaczynają się i kończą kolejne zmienne np. rozpoznając kolejne '\t' Dziękuje za poświęcony czas ale widzę że nic z tego nie będzie więc w poszanowaniu tego czasu zakończę w tym miejscu. Raz jeszcze dziękuje i pozdrawiam EDIT: Gdyby tu trafiła przypadkiem, taka jak ja "programistyczna sierota" to pragnę zakomunikować że cały problem rozwiązuje odpowiedz zawierająca się w krótkim - "sprawdź se string.indexOf()"
  2. @ethanak Jakiś nadajnik wysyła do odbiornika poprzez UART stringa z wynikami. Nie ma dla nas znaczenia czy tamten odbiornik go rozumie i jak go rozumie. Nie wnikamy w to. Ktoś tak to zaprogramował i to działa i jest sprawne i to nie nasza sprawa. Nie to jest rozpatrywana kwestią i o tym nie ma sensu dyskutować. Ja natomiast na drodze stawiam "podsłuch" z Arduino i mam dostęp do tego stringa. Widzę go np. jako 2020-11-02 10:05:24 24.54 24.55 25.84 25 23 24 28 21 24 25 Tak UwagaNaKota Nie WezParasol na końcu jest '\n' bo docelowy odbiornik czyta przekaz do tego znaku Teraz potrzebuje go rozebrać na części by każdą z nich przypisać do moich nowych zmiennych. Bez ingerencji w oryginalny projekt zrobiłem to substringami ale to działa tylko w przypadku liczb do czasu aż temperatury są zawsze powyżej 10oC. Testuje więc możliwość że oryginalny projekt będzie miał dodatkowo (pierwotny string zostanie taki jaki jest i poleci sobie tam gdzie ma docelowa polecieć) możliwość wysłania tablicy stringów zawierającej te same informacje co pierwotny string zbiorczy. Dzięki temu mogę odwoływać się do poszczególnych "szufladek" zamiast określać bezwzględną pozycje początku i końca każdego wyniku. Poszczególne elementy tablicy wysyłam bez problemu np. Serial.println(Tablica[0]) czy Serial.println(Tablica[0]+Tablica[1]) Ja bym chciał wysłać całą tablice w całości by po stronie podsłuchu mieć odebraną jedną konkretną tablicę i korzystać z "szufladek" tablicy. Pierwszy raz podchodzę do tematu tablic więc szukam konkretnej informacji na zasadzie "nie da się i musisz to zrobić inaczej" lub "da się i obczaj sobie komendę taką a taką".
  3. @ethanak Bo tam są również wysyłane komunikaty tekstowe a nie tylko wyniki pomiarów. Gdybym miał najpierw zakodować te teksty na liczby a potem odpowiednio je rozkodować na powrót w teksty to by było trochę karkołomne. Oczywiste dla zmiennych dychotomicznych lub o wąskim zakresie możliwych wyników byłoby to rozsądne rozwiązanie. Gorzej z wynikami daty i czasu bo trzeba by je porozkładać na czynniki pierwsze a data i czas mają stałą szerokość i doskonale można je "ekstrahować" string.substring(x,y). Generalnie jest tak że te cały długi string jest wysyłany w innym celu i do innego urządzenia. Dlatego kombinuje by w niego jak najmniej ingerować, tak by nadal służył temu do czego został zaprojektowany przez innego "wynalazcę". Ja go tylko po drodze przechwytuje i chce podzielić na części składowe. Korzystanie z substrinów pozwala mi całkowicie pozostawić oryginalny projekt takim jakim jest a ja jedynie podsłuchuję transmisje i rozwijam poboczny projekt. No ale skoro to się nie sprawdzi w praktycznym zastosowaniu to szukam innego rozwiązania.
  4. Mam pomiary z 10 czujników temperatury i kilka zmiennych typu String. Wszystko to scaliłem w jeden String i wysłałem za pośrednictwem UART z jednego Arduino UNO do drugiego. Po stronie odbiornika chciałem powyciągać z tego Stringa kilka informacji. Dla takiego szczawika programowania, najprostszym rozwiązaniem było użycie string.substring(x,y). Działa, ale działać będzie jedynie do czasu gdy całość prototypu stoi na biurku i wskazuje temperatury dwucyfrowe. W praktyce pewne czujniki temperatury mogą mieć odczyty jednocyfrowe a wtedy ustawione na sztywno pozycje x i y przestaną mieć sens. Wolałbym uniknąć kombinowania polegającego na tym że gdy temperatura jest jednocyfrowa to dodaje przed nią "0". W efekcie dostałbym stringa o stałej "długości", ale to ostateczność. Uwagę mą zwróciła możliwość zapisywania wyników w postaci jednowymiarowej tablicy stringów bo wtedy odwołuje się do kolejnego numeru i nie trzeba się martwić tym czy są tam dwie czy jedna cyfry i jakie długie są dane tekstowe. Teraz konkretny problem na którym utknąłem, czyli jak przepchnąć taką tablice przez UART by po stronie odbiornika wesolutko odwoływać się do zmiennych po ich indeksach? Jeśli jednak "to se nedá" to może powinienem kombinować z dwuwymiarową tablicą char'ów? Poradźcie coś.
  5. @marek1707 No właśnie coś tam się kiełbasiło. Nawet jeśli kręciłem tylko w jedna stronę to liczby nie zawsze narastały a czasem malały. Już do tego nie wrócę by Ci to zademonstrować bo musiałem uporządkować biblioteki Enkodera. Przerwania nie pomagały a właściwie zaprzepaszczały sens stosowania enkodera. Na razie serdecznie dziękuje za dotychczasową pomoc. W międzyczasie zająłem się kolejnym problemem do rozwiązania. Jak coś znów spierniczę to się odezwę Dzięki.
  6. @marek1707 Próbowałem dzielenia przez 4 i robił się syf w kolejności cyfr. Na spokojnie ogarnę to później. Natomiast faktycznie bibliotekę musiałem zmieniać. Dotychczasowa nie rozumiała co właściwie chce jej przekazać i dopiero nowa z linku jaki podałeś rozumiała o co chodzi z tym ENCODER_DO_NOT_USE_INTERRUPTS. Na razie dzięki. Muszę przemyśleć swoje priorytety, bo być może najlepszym rozwiązaniem będzie zamiana enkodera na potencjometr i przycisk.
  7. @marek1707 Dzięki, faktycznie zmieniam bibliotekę enkodera na tą która wskazałeś, by nie działać na przerwaniach. Uruchomiłem przykład: #define ENCODER_DO_NOT_USE_INTERRUPTS #include <Encoder.h> Encoder myEnc(2, 3); void setup() { Serial.begin(9600); Serial.println("Basic NoInterrupts Test:"); } long position = -999; void loop() { long newPos = myEnc.read(); if (newPos != position) { position = newPos; Serial.println(position); } } Krótkie pytanko? Dlaczego jeden krok enkodera daje w efekcie czterokrotne zliczanie? Przykładowo startujemy od 0. Obracam enkoder o jeden "krok a na monitorze mam od razu 1, 2, 3 i 4, kolejny krok i od razu 5, 6, 7 i 8.
  8. Zamierzam skomunikować dwie płytki Arduino poprzez programowy Serial. Nadajnik ma dodatkowo regulacje częstotliwości wysyłania danych zaprogramowaną na Enkoderze. Problem w tym że obie biblioteki się "pogryzły" (o ile dobrze rozumiem poniższy błąd). Arduino:1.8.13 (Windows 10), Płytka:"Arduino Uno" libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin): In function `SoftwareSerial::read()': (.text+0x0): multiple definition of `__vector_5' libraries\Encoder\Encoder.cpp.o (symbol from plugin):(.text+0x0): first defined here collect2.exe: error: ld returned 1 exit status exit status 1 Błąd kompilacji dla płytki Arduino Uno. Czy jakaś ingerencja w biblioteki pomoże? Jeśli tak, to co mam w nich pozmieniać?
  9. @marek1707 Dzięki za wyczerpujące informacje i potwierdzenie moich przypuszczeń że ten przelicznik H2 na CO2 to nie jest jakieś równanie oparte na przemianach chemicznych zachodzących w powietrzu. Jeszcze wczoraj na próbę zamówiłem ten sensor z ostatniego liku jaki podałeś, choć oczywiście w cenie dwukrotnie wyższej gdyż w polskim sklepie. Wydał mi się to jakimś sensownym kompromisem między ceną i jakością (podobno ma spory rozrzut ale mierzy to co ma mierzyć). Potestuje to się przekonam. Raz jeszcze dzięki.
  10. Jak wiadomo czujniki CO2 są droższe niż CO. Atrakcyjny cenowo wydaje się być czujnik oparty o SGP30, który jednak nie dokonuje pomiaru CO2 a H2 i potem szacuje eCO2 na podstawie H2. Szukam i nie mogę znaleźć literatury na ten temat. Czujniki wodoru są w cenie adekwatnej do moich możliwości. Szukam konkretnych formuł przeliczenia wyniku H2 na oszacowanie eCO2.
  11. @ethanak Oczywiście nie obyło się jeszcze bez kilku drobnych problemów i kilku na tyle poważnych że przeszło mi przez myśl by "dać se spokój" ale wytrwałem i oficjalnie przyznaje że biblioteka FTP_Client dla ESP8266 zadziałała i na serwer FTP wysyła dane pomiarowe. Przypuszczam że w tej bibliotece nie zadziała ftp.appendFile() bez wcześniejszego ftp.newFile() w setapie (co jest zbędne np. w bibliotece dla FTP_Client dla ESP32). Jednak nie sprawdzałem tego poprzez analizę kodu a jedynie empirycznie metodą prób i błędów. Dzięki @ethanak nauczyłem się dziś stosować mójstring.c_str() co jest wartością dodaną i upraszcza mój karkołomny kod. Za to i za resztę raz jeszcze Ci dziękuje.
  12. Dzisiejszy dzień mogę uznać za zły. Co to znowu jest? Czym teraz musze się zająć by ugasić nowy pożar? c:/users/wrona/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: libraries\FTP_Client-master\example.cpp.o:C:\Program Files (x86)\Arduino\libraries\FTP_Client-master/example.cpp:11: multiple definition of `ftp'; sketch\TEST.ino.cpp.o:C:\Users\wrona\Desktop\TEST/TEST.ino:24: first defined here c:/users/wrona/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: libraries\FTP_Client-master\example.cpp.o:C:\Program Files (x86)\Arduino\libraries\FTP_Client-master/example.cpp:6: multiple definition of `ftp_server'; sketch\TEST.ino.cpp.o:C:\Users\wrona\Desktop\TEST/TEST.ino:15: first defined here c:/users/wrona/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: libraries\FTP_Client-master\example.cpp.o:C:\Program Files (x86)\Arduino\libraries\FTP_Client-master/example.cpp:7: multiple definition of `ftp_user'; sketch\TEST.ino.cpp.o:C:\Users\wrona\Desktop\TEST/TEST.ino:16: first defined here c:/users/wrona/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: libraries\FTP_Client-master\example.cpp.o:C:\Program Files (x86)\Arduino\libraries\FTP_Client-master/example.cpp:8: multiple definition of `ftp_pass'; sketch\TEST.ino.cpp.o:C:\Users\wrona\Desktop\TEST/TEST.ino:17: first defined here c:/users/wrona/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: libraries\FTP_Client-master\example.cpp.o: in function `setup': C:\Program Files (x86)\Arduino\libraries\FTP_Client-master/example.cpp:3247: multiple definition of `setup'; sketch\TEST.ino.cpp.o:C:\Users\wrona\Desktop\TEST/TEST.ino:30: first defined here c:/users/wrona/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: libraries\FTP_Client-master\example.cpp.o: in function `loop': C:\Program Files (x86)\Arduino\libraries\FTP_Client-master/example.cpp:3306: multiple definition of `loop'; sketch\TEST.ino.cpp.o:C:\Users\wrona\Desktop\TEST/TEST.ino:38: first defined here collect2.exe: error: ld returned 1 exit status exit status 1 Błąd kompilacji dla płytki NodeMCU 1.0 (ESP-12E Module). Rozumiem że gdzieś jest podwójna definicja ustawień ftp oraz pętli loop i setup. Kod dla Arduino taki jak poprzednio, bibliotek ta sama. Gdzie "grzebać"? EDIT: Wywaliłem example z biblioteki FTP_Client i błąd zniknął
  13. @ethanak Z płytka sobie chyba poradziłem po wszystko poszło gładko. Jednak gdzie szukać przyczyny że nie mogę zainstalować paczki ESP8266 powyżej 2.3.0 czy ten adres jest nieaktualny http://arduino.esp8266.com/stable/package_esp8266com_index.json ? Coś zrobić ręcznie? Na razie reinstaluje całe arduino IDE bo podjąłem tyle różnorodnych prób że sam nie wiem co pozamieniałem na co i gdzie. EDIT: Reinstalacja całości pomogła i mam już najnowszą wersje paczki dla ESp8266
  14. @ethanak Jak chcesz to potrafisz być miły Z tego co kojarzę czeka mnie aktualizacja oprogramowania ESP8266. Nie robiłem tego jeszcze ale chyba nadszedł ten dzień. O to chodzi?
  15. @ethanak Tak, naprawdę to sułtańskiego haremu (w obiegowym tego słowa znaczeniu). Natomiast wracając do potyczek z kodem. 1. Kod od jakiego zacząłem jest taki a nie inny bo taki jest w przykładzie dołączonym do tej konkretnej biblioteki. Skopiowałem go by przetestować ale nie działa więc próbujemy dojść do tego dlaczego tak jest. W tym mi pomagasz i jestem wdzięczny. 2. To że się u Ciebie kompiluje to żaden argument bo zastanów się chwilkę. Po co miałbym Cię oszukiwać pisząc o błędach gdyby mi się kompilowało? Skąd wziąłbym opisy błędów kompilacji? Skoro ich nie rozumiem to raczej ich nie wymyśliłem. Po co miałbym robić to wszystko? Droczę się z Tobą? Podrywam Cię? To ważna informacja że u Ciebie się skompilowało ale to żaden argument za tym że u mnie też tak jest. Najwidoczniej gdzieś jest inny problem.
×
×
  • Utwórz nowe...