Skocz do zawartości

Proste menu w Arduino i obsługa LCD I2C po raz enty...


Pomocna odpowiedź

@Norbert7630 ja Cię proszę, Ty na razie nic nie programuj, nie pisz żadnego kodu, wróć do nauki, a w ramach odskoczni dokładnie rozrysuj, tak jak na moim zdjęciu to co chcesz mieć w menu. Nie pisz, żadnego programu!! Kartka, linijka i długopis i rysujesz i nam wklejasz. 

6 minut temu, Norbert7630 napisał:

Może tak koledzy jeżeli chcecie mi pomóc to prosiłbym żebyście się skupili na tym co ja źle robię

Wszystko robisz źle, poczynając od tego, że nawet nie wiesz co chcesz zrobić bo nie potrafisz tego narysować na kartce, a co dopiero mówić o pisaniu programu bez podstawowej wiedzy. 

8 minut temu, Norbert7630 napisał:

mam do ciebie wielką prośbę, wróć do mojej wypowiedzi w której w której zrobiłem opis instrukcji sterującej switch/case jak ja to rozumie że działa, bo jak znowu odeślesz mnie do kurs to zwariuje 🤪😂 zobacz mój opis działania i napisz gdzie moje myślenie jest błędne.

ja widzę, że nie rozumiesz jak działa więc wracaj do kursu, siedź i myśl, zrób ćwiczenia, ale daruj sobie na razie odcinek ze switchem i zacznij po kolei od pierwszego odcinka. 

Jeszcze raz, nie wklejaj tu teraz żadnego kodu, tylko RYSUNEK z wyglądem i zależnościami twojego menu. 

12 minut temu, Norbert7630 napisał:

Bo np. nie wiem gdzie w tym menu jest ekran początkowy który będzie się wyświetlał po załadowaniu programu na płytkę Arduino.

Ja też nie wiem, to był przykład, w Twoim rysunku na pewno to zaznaczysz:) 

Link to post
Share on other sites

Kurcze to będzie problem bo w zasadzie, to skopiuje twój rysunek hm.....a mogę układ tych ekranów zrobić po swojemu tak jak tłumaczyłem w poprzedniej wypowiedzi? Aha i jak zrobię zdjęcie, to na moim telefonie chyba przekroczy wagę dopuszczalną do wklejenia tutaj czyli może mieć np. więcej jak te 50MB, to trzeba to jakoś skonwertować do mniejszej wagi gdyby przekraczała dopuszczalną?

Ok to już wszystko jasne, a jeśli chodzi o te zadania domowe to wszystkie mam zrobić od pierwszego rozdziału aż do kończącego ten kurs podstawowy?

Link to post
Share on other sites
38 minut temu, Norbert7630 napisał:

Kurcze to będzie problem bo w zasadzie, to skopiuje twój rysunek hm.....a mogę układ tych ekranów zrobić po swojemu tak jak tłumaczyłem w poprzedniej wypowiedzi?

ma być czytelnie

38 minut temu, Norbert7630 napisał:

Aha i jak zrobię zdjęcie, to na moim telefonie chyba przekroczy wagę dopuszczalną do wklejenia tutaj

to przed zrobieniem zdjęcia zmniejsz rozdzielczość w aparacie

39 minut temu, Norbert7630 napisał:

Ok to już wszystko jasne, a jeśli chodzi o te zadania domowe to wszystkie mam zrobić od pierwszego rozdziału aż do kończącego ten kurs podstawowy?

tak

23 minuty temu, Norbert7630 napisał:

Aha czy rozwiązanie zadania wstawiać w komentarze tak jak inni?

jak chcesz się pochwalić, że zrobiłeś to tak, przymusu nie ma, masz umieć

Link to post
Share on other sites
(edytowany)

@Norbert7630  Czy chodzi Ci o menu, czy o zapalenie diody po naciśnięciu przycisku? To co ja Ci napisałem, to był przykład jak mógłby wyglądać napisany przez Ciebie algorytm. Bo jeśli chodzi tylko o zapalenie diody po naciśnięciu przycisku i nic więcej, to nie nazywaj tego "menu". W temacie piszesz o wyświetlaczu, a w tłumaczonym przez Ciebie algorytmie nic takiego nie występuje. Jeśli masz zamiar używać wyświetlacza, to gdzie, kiedy i co chcesz na nim wyświetlić? Jak ma zmieniać się stan wyświetlacza? Jakie napisy mają się na nim pojawić, gdzie to jest opisane?

Nacisnąłeś przycisk A, wykonuje się operacja OA i zapalasz diodę DA. Czy ją gasisz ? Gdzie i kiedy ? Co się ma dziać jeśli zwalniasz przycisk?

Prosiłem, napisz sobie na kartce przykładowe menu. Niech będzie to choćby karta dań. Powiedzmy na początek lista pięciu potraw - istotne by było ich więcej niż przycisków. Co się ma wyświetlać na ekranie gdy włączysz urządzenie. Co gdy naciśniesz przyciski kolejno ABCAAAD? Czy menu jest wielopoziomowe? Ma być możliwość wchodzenia do podmenu? W jakiej sytuacji?

Powtarzam, to co teraz pokazałeś w odpowiedzi na mój post, to zapalenie diody po naciśnięciu przycisku, nawet jej nie gasisz. Tą drogą nie osiągniesz niczego poza miganiem diodami - po jednej na przycisk.

Edytowano przez bjrk
  • Lubię! 1
Link to post
Share on other sites

Rozumie@bjrk  właśnie pracuje nad graficznym przedstawieniem tego mojego menu, tak ogólnie to do projektu używam wyświetlacza LCD 16x2 i 4 przycisków. Tak jak słusznie zwracasz uwagę na to co dokładnie ma to być, więc jest to menu z poziomu którego chciałbym włączyć lub wyłączyć jakieś urządzenie, czy silnik czy żarówkę czy stycznik.....nie ważne jakie teraz to nie ma znaczenia.  Jeśli chodzi o to włączenie diody w tym warunku if to jej zgaszenie to else digitalWrite(nrPinu, LOW);. Pytasz też o stan wyłącznika w przypadku if (digitalRead(9)==LOW){ //jeśli przycisk wciśnięty.......to przykład z jednej lekcji kursu a zwłaszcza ten komentarz, też na początku się zastanawiałem co miał autor na myśli.....co wcisnął przycisk i co dalej, trzymał go wciśniętego?czy od razu puścił? Teraz już wiem że jak wcisnę przycisk i puszczę to dioda się świeci. Ale gdy dopisze else { digitalWrite(nrPinu, LOW); to sytuacja się zmieni, bo teraz po dopisaniu linijki kodu z else działanie będzie  takie: trzymam przycisk wciśnięty dioda świeci puszczam przycisk wykonuje się else bo warunek if nie został spełniony i dioda gaśnie. Kurcze no nie wiem już jak ci to opisać żebyś się kapnął czy ja to dobrze rozumie.

Link to post
Share on other sites
(edytowany)

@Norbert7630

1 godzinę temu, Norbert7630 napisał:

Teraz już wiem że jak wcisnę przycisk i puszczę to dioda się świeci. Ale gdy dopisze else { digitalWrite(nrPinu, LOW); to sytuacja się zmieni, bo teraz po dopisaniu linijki kodu z else działanie będzie  takie: trzymam przycisk wciśnięty dioda świeci puszczam przycisk wykonuje się else bo warunek if nie został spełniony i dioda gaśnie.

Ten kawałeczek który opisałeś, wydaje mi się że załapałeś. 🙂 Ważne - moim zdaniem - abyś zastanowił się, co dokładnie oznacza określenie "nawigacja po menu" oraz "wybór z menu". Nie staraj się pisać w języku programowania, ale pisz po polsku jak się cały ten układ ma zachowywać. Zwróć uwagę, że po naciśnięciu przycisku układ (docelowo) ma się różnie zachowywać w zależności od tego, jakie klawisze wcześniej przycisnąłeś, w jakiej kolejności i ile razy. To wszystko musisz Ty określić. To w tej chwili może Ci się wydać bardzo skomplikowane, ale takie nie jest, pod warunkiem, że masz przyzwoite podstawy. Jednym ze sposobów "ogarnięcia" tego problemu jest wspomniany wcześniej automat skończenie stanowy. Jednym ze sposobów jego przedstawienia, zapisania, jest graf który, jak rozumiem, usiłujesz narysować.

 

Edytowano przez bjrk
  • Lubię! 1
Link to post
Share on other sites

Tak z grubsza przejrzałem ten temat i myślę Norbercie @Norbert7630, że na razie spróbuj usiąść do prostszego zadania i poduczyć się samej składni języka. Pomijając niektóre sarkastyczne komentarze to sens jest taki, żebyś poćwiczył, sprawdził co jak działa i wtedy zauważysz jak można zrobić zadania które sobie wyznaczyłeś. Poświęć  czas na analizę przykładów, przerobienie kursu z kilka godzin i uda Ci się więcej wyciągnąć z porad które dostałeś 😉 a pozostałych zachęcam do cierpliwości i stosowania się do PPF.

Link to post
Share on other sites
(edytowany)

@Norbert7630  Nie przepraszaj, każdy kiedyś zaczynał.

Masz obsłużyć cztery przyciski, więc zawsze muszą być cztery strzałki, a u Ciebie bywa, że jest tylko jedna. Masz na ekranie na przykład:

   Pozycja1
>Pozycja2

napisałeś co robić gdy zostanie naciśnięty przycisk góra, ale co z pozostałymi przyciskami, co jeśli naciśnie się przycisk dół, albo powrót lub wybór ?

Przyjmijmy, że menu składa się z pięciu pozycji. Gdzie są pozycje trzecia, czwarta, piąta?

Inna uwaga, Jaki jest  sens wyboru start/stop na osobnym ekranie ? Silnik (światło, czy co tam chcesz) albo jest włączony albo nie jest. Jeśli jest wyłączony to go włączasz, a jeśli jest włączony to go wyłączasz.

Edytowano przez bjrk
  • Lubię! 1
Link to post
Share on other sites
(edytowany)
Dnia 17.01.2021 o 18:41, Norbert7630 napisał:

Witam wszystkich

Może jednak inna grafika choć podobna do poprzedniej:

 

SCHEMAT.thumb.jpg.fed55fb89d0e5afc596ceefe128b324a.jpg

Tutaj ciągle są dwa połączenia@bjrk z tego co napisałeś mają być 4 bo są 4 przyciski może opiszę możliwie najkrócej jak to menu działa.

W momencie uruchomienia programu na wyświetlaczu LCD pojawiają się opcje setCursor(0, 0);URZĄDZENIE 1 i setCursor(0, 1);URZĄDZENIE 2 czyli te opcje menu znajdują się jedna pod drugą. Dodatkowo przy opcji URZĄDZENIE 1 przed nazwą jest marker....tak wygląda ekran startowy po uruchomieniu programu i do tego momentu wszystkie przyciski śpią, a Arduino sprawdza czy nie są  wciskane. W zależności od tego co chce zrobić np: uruchomić urządzenie 1.......w tym momencie wciskam i puszczam przycisk selekt, program wcześniej zapamiętał że znajduje się w pozycji URZĄDZENIE 1 więc gdy otrzyma sygnał z pinu pod którym jest przycisk SELEKT ma przejść do następnego ekranu i opcji (0, 0); START i (0, 1); STOP (jedna opcja pod drugą), z jednoczesnym ustawieniem markera przy opcji START. Jeżeli wcisnę i puszcze przycisk SELEKT, to Arduino wiedząc że znajduje się przy START( bo zapamiętał tą pozycję, albo raczej program stoi w tym miejscu i sprawdza czy któryś z przycisków nie został wciśnięty ), więc jeżeli otrzymuje sygnał od przycisku selekt, to w tym momencie wprowadza w stan WYSOKI (HIGH) na ustalony wcześniej pin pod który jest podłączony silnik. Jeżeli chce wyłączyć silnik to wciskam przycisk DOWN, Arduino sprawdziło że został wciśnięty przycisk DOWN i pamiętając swoją obecną pozycję, wie że ma przejść do opcji STOP z jednoczesnym przesunięciem markera na tą opcje STOP. Po wykonaniu tej operacji ponownie sprawdza czy nie wciśnięto jakiegoś przycisku. Wciskam więc przycisk SELEKT Arduino sprawdza co to za przycisk i wykonuję operacje w tym przypadku zmienia stan z wcześniej wspomnianego pinu z HIGH na LOW czyli wyłącza silnik. Arduino teraz stoi przy opcji  STOP i sprawdza stan przycisków, gdy teraz wcisnę przycisk DOWN a po niżej tej opcji nie ma żadnej,  Arduino powinno zignorować ten odebrany sygnał z przycisku DOWN i sprawdzać dalej stan przycisków i dopiero wykonać operację gdy otrzyma sygnał z odpowiedniego przycisku np: UP czyli przejdź do opcji START z jednoczesnym przesunięciem markera na opcje START. Analogicznie sytuacja ma się do pozostałych opcji czy to przejścia z URZĄDZENIA 1  do URZĄDZENIA 2, i z powrotem. I tak jak w przypadku poprzednim jeżeli program stoi na opcji URZĄDZENIE 2 a Arduino otrzymało sygnał że został wciśnięty przycisk DOWN, to nie powinna  wykonać się żadna operacja, tylko wciśnięcie przycisku UP lub SELEKT powinno wywołać odpowiednią reakcje. Koniec.

Nie wiem czy dobrze to wytłumaczyłem proszę o podpowiedzi i zwróćcie uwagę na to że temu kolesiowi musicie tłumaczyć łopatologicznie ciemna masa ze mnie jeśli chodzi o te rzeczy i nie wiele mogę na to poradzić😉

@bjrk w momencie kiedy zacząłem pisać to tłumaczenie działania mojego menu nie rozumiałem o co chodzi z tymi 4 przyciskami a konkretnie połączeniami (strzałkami) i ciągle zadawałem sobie pytanie ,, O co Mu chodzi " teraz gdy skończyłem pisać myślę że mniej więcej wiem, chodzi o to że żeby przejść z URZĄDZENIE 1 do 2......to wcisnę przycisk DOWN i idę do 2, gdy wcisnę UP wracam do 1, a co będzie jak będę na 1 i wcisnę UP lub BACK ?....... wtedy nie powinna się wykonać żadna operacja. Ogólnie teraz widzę że to moje menu w zasadzie można obsłużyć 3 przyciskami bo w obecnym układzie przyciski są zdefiniowane, hm.....jak to napisać zrozumiale....o może tak......bardzo osobiście, czyli BACK nie cofnie markera w moim menu z URZĄDZENIA 2 do 1 bo robi to UP.

9 godzin temu, bjrk napisał:

Przyjmijmy, że menu składa się z pięciu pozycji. Gdzie są pozycje trzecia, czwarta, piąta?

A jeśli chodzi o to, to nie wiem o co chodzi z tymi pozycjami, co w moim przykładzie jest pozycją dla Ciebie? Myślę że stan to miejsce w którym obecnie znajduje się program a jest to określone markerem, sam nie wiem ja bym tak to wytłumaczył, jedyną rzeczą a raczej operacją jaka miałaby w tym menu nie istnieć na LCD a jedynie w programie,  to moment uruchomienia silnika lub jego wyłączenia i w zasadzie to też jest stan. A czy stan może być pozycją lub czy pozycja może być stanem w tym przykładzie tego nie wiem. Nie wiem chyba mnie poniosło, miało być krótko a wyszło jak zawsze, dziękuję wszystkim za zainteresowanie i chęć niesienia pomocy ciemniakowi.

Edytowano przez Norbert7630
poprawy tekstu
Link to post
Share on other sites
(edytowany)

Cześć @Norbert7630 To teraz chociaż wiesz co chcesz zrobić;). Ja bym tylko w każdym ekranie dołożył dodatkową funkcję dla klawisza góra i dół. 

Patrz teraz masz tylko dwie pozycje w każsym menu/podmenu, ale kiedy jesteś na pierwszej pozycji i naciskasz "góra" to nic się nie dzieje, a kiedy jesteś na dolnej pozycji i naciskasz "dół" też się nic nie dzieje. 

Pomyśl, jeśli będziesz miał tych pozycji do wyboru np. 15, to chcąc dotrzeć szybko z pierwszej do ostatniej, lepiej jeden raz nacisnąć "góra" niż 14 razy "dół", podobnie będąc na ostatniej pozycji menu i chcąc wrócić do pierwszej, leoiej nacisnąć dół i wskoczyć na pierwszą. Logiczne i pomocne :). 

Więcej zmian bym nie wprowadzał na razie👍. Oczywiście nowy graf przydatny;) 

Jak skończysz kurs, możesz zacząć pisać kod od nowa, możesz się wzorować na tym starym jak będziesz wiedział co tam było skonocone. 

Aha, i pamiętaj, nie ma czegoś takiego jak :

27 minut temu, Norbert7630 napisał:

Arduino teraz stoi 

nie wiem czy to był skrót myślowy, ale w kodzie nie używaj delay(). 🙂

Edytowano przez SOYER
  • Lubię! 1
Link to post
Share on other sites

Cześć @SOYER

Dokładnie tak to tylko skrót myślowy z tym Arduino stoi 😅. W przypadku rozwiązań mojego menu jak zwykle masz racje, i ja też o tym pomyślałem żeby jednak po przejściu do pozycji ostatniej w menu przy pomocy przycisku np. DOWN czyli kolejny raz w dół wracał do początku listy menu, to na wypadek dopisania kolejnych pozycji w menu głównym. Świetne rozwiązanie, tylko że dla mnie oznacza to kolejną linijkę lub więcej kodu, a ja już na poważnie zaczynam się bać że jednak tego nie dam rady zrobić, trochę jak z motyką na słońce. Przerobiłem ten przykład z tą instrukcją sterującą switch/case na  kursie i nie do końca wiem jednak jak to działa. Może tak jak wspomniałem wcześniej byłby ten przykład na ledach zrobiony to szybciej bym zrozumiał ale to odbieranie danych i ten cały UART ech...😅

Switch zawiera zmienną która wcześniej jest zadeklarowana w części globalnej ,, int nazwaZmiennej = wartość zmiennej " , dalej są case które mają warunki do sprawdzenia czy są równe zmiennej w przykładzie z kursu ustawiamy pokrętło potencjometru na losowo wybraną pozycje a następnie wpisując do monitora szeregowego literkę ,,h" otrzymujemy wynik na monitorze danej wartości w postaci heksadecymalnej czy coś takiego, nie wiem czy ja do do końca rozumie. 

Link to post
Share on other sites
(edytowany)
15 godzin temu, Norbert7630 napisał:

Switch zawiera zmienną która wcześniej jest zadeklarowana w części globalnej ,, int nazwaZmiennej = wartość zmiennej " , dalej są case które mają warunki do sprawdzenia czy są równe zmiennej

To teraz popatrz, wyobraź sobie, że każdy osobny ekran to kolejny numer tej zmiennej, nawet jeśli różni się tylko wskaźnikiem przy pierwszej albo drugiej pozycji, każdy osobny ekran to kolejna, o jeden wyższa wartość tej zmiennej. 

int numerEkranu =1;

switch(numerEkranu) {

  case(1):

      lcd_cośtam_ekranpowitalny

 if( cośtam....) {

   zróbcoś;

   numerEkranu=2; // idź do drugiego ekranu

  break;

  case(2):

    itd... cośtam... 

  break;

  itd... 

} 

Teraz to widzisz? 

Edytowano przez SOYER
  • Pomogłeś! 1
Link to post
Share on other sites

Cześć @SOYER 🙂

W miarę przerabiania kursu tuż obok próbowałem dodatkowo pisać kod na nowo, tak wiem mówiłeś żeby najpierw się zająć kursem a potem pisać. Jednak ta moja niecierpliwość wrodzona daje czasem znać o sobie, a dodatkowo chciałem sprawdzić na ile mogę sobie pozwolić już  z tym kodem przy tej wiedzy. No oczywiście że nie na wiele ale trochę napisałem tego kodu ale nie wstawiałem bo jak to z ludźmi zaraz krytyka i ośmieszenie nie którzy podejdą spokojnie, pomogą jak ty czy inni ale są też tacy co postępują inaczej wiadomo. I to co tutaj wstawiłeś było właśnie a raczej jest podobne do tego co ja napisałem, tyle że w innej kolejności w case. U ciebie jest tak jak widać wyżej a ja najpierw wstawiłem że po naciśnięciu button np. down ma się wykonać ta operacja a tuż pod tym warunkiem dałem wyświetlanie na lcd. Tych instrukcji warunkowych  if  jeśli chodzi o przyciski, nie pisałem na nowo tylko skorzystałem z tych w starym kodzie. Całkowicie usunąłem te wszystkie funkcje typu void jak update menu czy action1 itp. zostawiłem zmienną int menu = 1 (globalna) i w funkcji void loop() { zacząłem od instrukcji switch ze zmienną (menu){ a dalej w case 1: właśnie podałem ten warunek if z przyciskiem w down a pod spodem to co ma się wyświetlić na lcd, następnie break; i kolejny case 2: i podobnie warunek if z przyciskiem up i lcd wyświetlanie i.......o dziwo to zadziałało gdy program się załadował do mikro-kontrolera na lcd miałem to co chciałem i w dodatku mogłem już poruszać się markerem z góry na dół i na odwrót . W zasadzie miałem wkleić ten kod i pokazać ale po chwili zastanowienia i analizie tego kodu zrezygnowałem bo tak naprawdę nie do końca go sam rozumiałem, więc pomimo tego że działał to poszedł do kosza 😔 dlatego nawet się nie wygłupiałem z tym żeby to wklejać tutaj i się błaźnić. Napiszę ci tak na szybkiego co było zagadką :

if (!digitalRead(downButton)){
    menu++;
    updateMenu();
    delay(100);
    while (!digitalRead(downButton));

Niby wiem że po przyciśnięciu buton down ma się wykonać warunek menu++; czyli przejście w tym wypadku w dół do drugiej opcji menu poniżej i updateMenu???? Nie wiem co konkretnie ta linijka robi w tym kodzie no i ta pętla while( warunek); i nic dalej żadnego działania w przypadku kiedy ten warunek w pętli while jest no po swojemu to nazwę prawdziwy czyli się wykona. To tak jakby pętla zatrzymała się na chwilę bo warunek jest a reakcji na ten warunek spełniony żadnej. Nie wiem nie bardzo to rozumie i w dodatku te znaki negacji na początku  przed digitalRead? Gdybyś mógł mi podać jakiś prosty przykład z tymi znakami i wytłumaczyć byłbym wdzięczny. Jeśli chodzi o kolejną rzecz to właśnie to:

int menu = 1;

W moim kodzie to była zmienna globalna czyli była widziana cały czas przez mikro-kontroler po załadowaniu programu tak jak int menu rozumie czyli typ zmiennej i jej nazwa tak z tą jedynką to już nie bardzo, wiem tylko ze do zmiennej int o nazwie menu przypisałem cyfrę 1 która jest w pamięci i będzie wywoływana za każdym razem gdy na tej zmiennej będzie wykonywa jakaś operacja i teraz wracając do tego warunku if powyżej jest linijka menu ++; dodanie o 1? Nie wiem, ale tak coś mi się kojarzy, no i to co najbardziej mnie zastanawia linijka:

updateMenu();

ani to funkcja która nie zwraca niczego np. void, ani to instrukcja warunkowa bo bez if na początku, ani dyrektywa #define bo tego brak na początku tej linijki no i znajduje się w części lokalnej void setup(){ czyli uruchomi się raz. Nie wiem coś musiałem przegapić w kursie. Znalazło by się troszkę więcej ale nie chce cię zanudzać, wiem jakie to męczące powtarzać w kółko to samo, gdybyś chciał mi z tym pomóc lub ktoś inny by się dołączył to byłoby super. Pozdrawiam.

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.