Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Dodanie polecenia do szkicu/Uno

maniolx 10 Sty 2017 18:18 675 17
  • #1 10 Sty 2017 18:18
    maniolx
    Poziom 14  

    Zrobiłem termometr czterokanałowy na bazie arduino , który służy mi do pomiaru temperatur kotła co . Wszystko chodzi dobrze , lecz parę razy zagotowałem wodę i chciałbym dodać do posiadanego skecza fragment kodu który przy zadanej temperaturze włączałby na parę minut buzer .Mój skecz wygląda tak

    Kod: actionscript
    Zaloguj się, aby zobaczyć kod


    A chciałbym aby po osiągnięciu zadanej temperatury buzer odtwarzał taki sygnał

    Kod: actionscript
    Zaloguj się, aby zobaczyć kod


    Oczywiście zamiast funkcji delay trzeba tu użyć milis() z czym nie potrafię sobie poradzić . Proszę o pomoc , jak przerobić ten sygnał syreny na funkcję z milis() aby ją wstawić do mojego skecza .

    Moderowany przez tmf:

    Temat poprawiłem - skecze zwykle mamy w kabaretach.

  • #3 12 Sty 2017 20:09
    markolsrz
    Poziom 9  

    Możesz spróbować czegoś takiego:
    dodaj zmienne globalne:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    a na końcu loop taką sekwencję (wcześniej sprawdź czy użyłem właściwej temperatury w pierwszym if(...)!!!):

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Zmienna alarm stanowi licznik zliczający cykle po 2048ms, za tą wartość odpowiada stała maska=1024.
    Przestudiuj kwestię operatorów binarnych jeśli chcesz ją zmieniać. (Raczej nie ustawiaj mniejszej wartości, bo sam pomiar temperatury trwa 750ms, jeśli nie przestawiłeś rozdzielczości termometrów).
    wartość 120 w pierwszej linii określającą czas w cyklach możesz swobodnie zamienić na dowolną w zakresie 1...32767.

  • #4 12 Sty 2017 23:01
    maniolx
    Poziom 14  

    Z tym przestudiowaniem to raczej nie . Niestety głowa za słaba na to . Ale z tymi wstawkami co tu zapodałeś na pewno popróbuję . Myślałem że z tą zamianą delay na millis to będzie jakaś prosta sprawa a tu jednak nie tak łatwo . Wprawdzie załączanie buzera przy określonej temperaturze udało mi się jakoś dodać , lecz jest to dzwięk o jednej częstotliwości :

    Kod: actionscript
    Zaloguj się, aby zobaczyć kod


    A ja właśnie chcę ten :
    Kod: actionscript
    Zaloguj się, aby zobaczyć kod

    A tu już niestety trzeba kombinować aby nie było delay . Jutro może znajdę czas to trochę popróbuję . Bardzo dziękuję za pomoc .

  • #5 13 Sty 2017 11:46
    maniolx
    Poziom 14  

    Niestety po wstawieniu tych wstawek buzzer milczy (podstawiłem odpowiednią temperaturę alarmową ) Może zrobię tak : Wstawię jeszcze raz mój skecz , tym razem z działającym buzzerem przy określonej temperaturze (jedna częstotliwość pracy buzzera )

    Kod: actionscript
    Zaloguj się, aby zobaczyć kod

    A ty jeżeli możesz pomógłbyś zamiast tego wstawić sygnał o dwóch częstotliwościach i z wykorzystaniem millis:
    Kod: actionscript
    Zaloguj się, aby zobaczyć kod


    Mój skecz z działającym buzzerem przy zadanej temperaturze wygląda tak:

    Kod: actionscript
    Zaloguj się, aby zobaczyć kod

  • #6 13 Sty 2017 17:17
    emarcus
    Poziom 34  

    maniolx napisał:
    Myślałem że z tą zamianą delay na millis to będzie jakaś prosta sprawa a tu jednak nie tak łatwo .


    Stosowanie pomiaru czasu wykorzystując millis() jest relatywnie proste; - robisz to czesto (wiele razy dziennie!!!), posługując się zwykłym zegarem (moze nawet ściennym), przy odmierzaniu przedziału czasu.
    Jeżeli chcesz odmierzyc przykładowo 5 min to nie ustawiasz zegara na 12:00 i 12:05 byłoby te szukane 5 min. (?)
    Zwykle zapamiętujesz od jakiego czasu jest brany pomiar odcinka czasu i gdy nowy czas jest o 5 minut większy od zapamiętanego to jest te szukane te 5 min upływu czasu.
    Nieprawdaż?

    W rzeczywistości arduino: 4-bajtowa (long) wewnętrzna zmienna millis() reprezentuje jego unikalny zegar, który mierzy czas od momentu włączenia zasilania albo reset processora i jest incrementowana co 1 milisecundę. Ponieważ ta zmienna jest 4-bajtowa, której sam nie mozesz wyzerowac, to przepełnienie jej nastąpi po około 49 dniach (!), co nie przeszkadza bo mierzysz tylko róznicę, podobnie jak jest z zegarem w przykładzie powyżej, który zeruje się co 12 godzin i to też nikomu nie przeszkadza.
    Zatem jezeli chcesz posłużyc się tym unikalnym zegarem musisz stosowac metodę podaną w przykładzie z zegarem ściennym, czyli zapamiętywac aktualny czas i traktowac go w rachunkach jako czas poprzedni w nowym momencie.

    W praktyce programowania, zamiast dodawania oczekiwanego odcinka czasu do wartości poprzedniej, stosuje się raczej odwrotna metodę; obserwuje sie: czy różnica zegara millis() i poprzedniego odczytu jest równa lub mniejsza od zadanego interwału czasu, co oznaczałoby na czekanie aż nastąpi zrównanie - jakoby sygnał do podjęcia/uruchomienia kolejnej funkcji.

    W przykładach arduino [examples/Digital/blinkWithoutDelay] i internecie znajdziesz wiele przykładów stosowania tej funkcji, więc porównaj z wyjaśnieniem i zastosuj u siebie.
    To nie jest wcale takie trudne!!!

    e marcus

  • #7 14 Sty 2017 02:23
    markolsrz
    Poziom 9  

    Mam pytanie bo okazuje się, że trochę doradzam w ciemno.
    Jak długo trwa u ciebie 1 wykonanie pętli loop?
    Obawiam się, że chcesz uzyskać impulsy krótsze niż ten czas, co będzie wymagało przerwań.
    Poza tym na którym pinie masz podłączony buzzer?
    Podajesz na przemian A3 i A5.
    Częstotliwość też podajesz różne (1000, 4000) .

  • #8 16 Sty 2017 00:49
    maniolx
    Poziom 14  

    markolsrz napisał:
    Mam pytanie bo okazuje się, że trochę doradzam w ciemno.
    Jak długo trwa u ciebie 1 wykonanie pętli loop?

    No nie wiem za bardzo o co ci chodzi . Myślałem że wynika to ze skecza

    markolsrz napisał:
    Poza tym na którym pinie masz podłączony buzzer?
    Podajesz na przemian A3 i A5.

    Tu to zwykłe przejęzyczenie . W orginalnym przykładzie było 2X A5 a u mnie na A5 jakoś dziwnie chodziło więc wpiąłem na A3 na którym dobrze chodzi .
    Powinno to wyglądać tak :
    Kod: actionscript
    Zaloguj się, aby zobaczyć kod

  • #9 16 Sty 2017 05:05
    emarcus
    Poziom 34  

    maniolx napisał:


    Tu to zwykłe przejęzyczenie . W orginalnym przykładzie było 2X A5 a u mnie na A5 jakoś dziwnie chodziło więc wpiąłem na A3 na którym dobrze chodzi .

    Niezupenie!..
    Stosując funkcję ‘tone’ nie ma znaczenia na który pin wyślesz sygnał, pod warunkiem jednak że nie ma kolizji z resztą programu.
    Zwróc uwagę na syntax tej funkcji:
    Jezeli wpisujesz w nawiasie dwa argumenty na przykład ‘tone(3, 1000); oznacza ton ciągły o częstotliwości 1000Hz na pinie 3. Wyjście sygnału możesz zmieniac dowolnie, począwszy od pin2 do pin19. Równie możesz zmieniac częstotliwośc w zakresie od 91Hz do granicy pasma słyszalności ucha ludzkiego czyli ok. 20kHz. (niektórzy słyszą gorzej).
    Dla uzyskania sygnału przerywanego nie musisz też stosowac delay aby wyłączyc tone. Wystarczy dodac trzeci parametr - czas trwania tonu; na przykład: tone(3, 1000, 100); - otrzymasz krótki burst sygnału trwający 100 milisec.
    Poniżej masz przykład do wytestowania tej funkcji z wykorzystaniem funkcji millis().
    Mozesz dowolnie zmieniac częstotliwosc mrugania diody 13 a z tym zsynchronizowany sygnał ‘bzykania’
    W sketchu tym zmieniaj parametry:
    - interval- odpowiedzialny za cykl diody i ‘bzyku’; wstępnie ustawiony na 1 sec. = 1000 msec
    - w funkcji: tone(7, 500, 100); - wstępnie port ustawiony na pin7;(po zmianie portu nie zapomnij przepiąc przewód buzzera pod wybrany pin portu.
    - częstotliwośc – wstepnie przyjęta 500 (robi mniej hałasu w nocnych testach; najgłośniej słyszy się sygnały w okolicy 4-5 kHz)
    - wartośc 100 – czas trwania ‘bzyku’
    Zmieniając parametry zwróc uwagę aby nie przekroczyc czasu trwania bzyku ponad interval; czyli czas cyklu (*X).
    Czas cyklu (interval) w tym przykładzie możesz traktowac jako abstrakcyjny czas obsługi pętli lub delay, zatem rzeczywisty czas obsługi pętli wpłynie na częstotliwośc cyklu; wszak w tej metodzie odpytujesz aktualny stan licznika millis() tylko wtedy gdy 'nadarzy się sposobnośc; czyli w kolejności realizacji pętli.
    Jezeli czas obsługi pętli jest bardzo krótki to możesz miec do czynienia z przypadkiem (*X) - wtedy dodatkowa zwłoka z funkcją millis() może byc pomocna dobierając odpowiednio wartośc intervału.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    emarcus

  • #10 16 Sty 2017 14:06
    maniolx
    Poziom 14  

    Najlepszy efekt zbliżony do tego co chciałem mieć uzyskałem zmieniając interval=200
    i tone(7, 4000, 80);
    Cały twój skecz wygląda teraz tak:

    Kod: actionscript
    Zaloguj się, aby zobaczyć kod

    Niestety problemy mam z wstawieniem tego pod mój skecz , a konkretnie pod polecenie :
    Kod: actionscript
    Zaloguj się, aby zobaczyć kod

  • #11 16 Sty 2017 17:58
    emarcus
    Poziom 34  

    maniolx napisał:
    Najlepszy efekt zbliżony do tego co chciałem mieć uzyskałem zmieniając interval=200
    i tone(7, 4000, 80);

    Niestety problemy mam z wstawieniem tego pod mój skecz , a konkretnie pod polecenie :
    Kod: actionscript
    Zaloguj się, aby zobaczyć kod

    Jest to tylko pierwsza częśc funkcji warunkowej..
    W odpowiedzi na ten warunek 'przywołaj' tamtą funkcję 'bzykania', podobnie jak w niżej przykładzie wywołuje to stan przycisku na pinie 2
    Kod: c
    Zaloguj się, aby zobaczyć kod


    e marcus

  • #12 16 Sty 2017 22:59
    maniolx
    Poziom 14  

    Niby to wsadziłem do skecza , lecz to nie to co powinno być . Gdy wgrywam twój przykład który przerobiłem to dzwięk jest głośny , szybkie pikania , a jak to wstawiłem do mojego skecza to dzwięk jest jakby cichszy i pikanie dużo wolniej idzie (przerwy pomiędzy piknięciami ok 1 s , a to gorzej brzmi ) To cały mój skecz. Może jeszcze coś żle zrobiłem.

    Kod: actionscript
    Zaloguj się, aby zobaczyć kod

  • Pomocny post
    #13 17 Sty 2017 17:55
    emarcus
    Poziom 34  

    maniolx napisał:

    ........ a jak to wstawiłem do mojego skecza to dzwięk jest jakby cichszy i pikanie dużo wolniej idzie (przerwy pomiędzy piknięciami ok 1 s , a to gorzej brzmi )...

    ...bo masz zbyt długą pętlę, która wprowadza dodatkowe opóźnienie odczytu aktualnego stanu zegara millis().
    Jeżeli czas wykonania pętli jest większy niż przyjęty interval, to moment odczytu zegara millis() jest opóźniony, mimo to jest zgodne z warunkiem:
    (if (currentMillis - previousMillis >= interval) {)_
    if ((millis() - poprzedniStan) >= interval) {
    w wyrażeniu tym zależnośc (>=) spełnia postawiony warunek, lecz wprowadza niedokładnośc bo nie zwracamy uwagi ‘o ile ta róznica jest większa’. Akceptujemy gdy ta róznica ‘nie jest mniejsza’.
    Wprowadzając delay(1000) w pętli przykładowego sketcha testowego, który ci podałem, możesz zasymulowac podobny efekt.
    Wyjściem byłoby usunąc z pętli głównej nabardziej czasochłonne obsługi do oddzielnych bloków/funkcji i wywoływac je tylko wtedy gdy są potrzebne, lub w sensownych interwałach czasowych. Na przykład nie ma potrzeby ciągłej obsługi LCD- wystarczyłoby to robic co kilka sekund. Również odczyty temperatur, nie muszą następowac wszystkie po sobie w trybie natychmiastowym – mogą byc troche rozciagnięte w czasie aby twoja pętla mogła ‘oddychac’.
    Temperatury mierzonych objektów nie sa krytyczne i nie sądze abyś nie mógł ich odczytywac w sekwencji kilku sekundowych odstępów.
    Aby dokładnie zmierzyc faktyczny czas wykonywania określonych sekwencji , lub całej pętli możesz posłużyc się własnie metodą funkcji millis().

    e marcus

  • #14 18 Sty 2017 22:21
    maniolx
    Poziom 14  

    emarcus napisał:

    ...bo masz zbyt długą pętlę, która wprowadza dodatkowe opóźnienie odczytu aktualnego stanu zegara millis().
    Jeżeli czas wykonania pętli jest większy niż przyjęty interval, to moment odczytu zegara millis() jest opóźniony, mimo to jest zgodne z warunkiem:
    (if (currentMillis - previousMillis >= interval) {)_
    if ((millis() - poprzedniStan) >= interval) {
    w wyrażeniu tym zależnośc (>=) spełnia postawiony warunek, lecz wprowadza niedokładnośc bo nie zwracamy uwagi ‘o ile ta róznica jest większa’. Akceptujemy gdy ta róznica ‘nie jest mniejsza’.
    Wprowadzając delay(1000) w pętli przykładowego sketcha testowego, który ci podałem, możesz zasymulowac podobny efekt.
    Wyjściem byłoby usunąc z pętli głównej nabardziej czasochłonne obsługi do oddzielnych bloków/funkcji i wywoływac je tylko wtedy gdy są potrzebne, lub w sensownych interwałach czasowych. Na przykład nie ma potrzeby ciągłej obsługi LCD- wystarczyłoby to robic co kilka sekund. Również odczyty temperatur, nie muszą następowac wszystkie po sobie w trybie natychmiastowym – mogą byc troche rozciagnięte w czasie aby twoja pętla mogła ‘oddychac’.
    Temperatury mierzonych objektów nie sa krytyczne i nie sądze abyś nie mógł ich odczytywac w sekwencji kilku sekundowych odstępów.
    Aby dokładnie zmierzyc faktyczny czas wykonywania określonych sekwencji , lub całej pętli możesz posłużyc się własnie metodą funkcji millis().

    e marcus


    No to niestety nasze batalie z tym buzzerem poszły na marne . Ja na to głupstwo straciłem kilkadziesiąt godzin a ty też trochę popodpowiadałeś . Ponieważ z tym skróceniem pętli to sobie nie poradzę , a nawet już nie mam sił na to , to wymyśliłem sobie że pójdę na wielkie skróty i zaprzęgnę do działania drugie arduino w którym będzie siedział tylko dzwięk buzzera a pierwsze arduino tylko zasteruje to drugie podając sygnał na jakiś pin tego drugiego . Muszę jeszcze dołożyć przycisk którym będę mógł wyłączyć ten buzzer na parę minut by w domu nie oszaleć jak zagotuję piec . Tobie należą się wielkie podziękowania bo próbowałeś mi pomóc i na pewno trochę się nauczyłem (i nie myśl sobie że czekałem tylko na twoje odpowiedzi ) Sam dziennie siedziałem nad tym parę godzin , ale ja już tego całego nigdy nie opanuję . Za dużo komend , za dużo można walnąć błędów przy skeczu . A tu wystarczy brak jednego przecinka i - błąd kompilacji , i znowu szukanie . Jeszcze raz dziękuję .

  • #15 20 Sty 2017 05:06
    emarcus
    Poziom 34  

    maniolx napisał:
    , to wymyśliłem sobie że pójdę na wielkie skróty i zaprzęgnę do działania drugie arduino w którym będzie siedział tylko dzwięk buzzera a pierwsze arduino tylko zasteruje to drugie podając sygnał na jakiś pin tego drugiego .

    To już jest jakieś rozwiązanie.
    Czy optymalne? – Nie powiedziałbym...!
    Pozwól, ze posłużę się trochę abstrakcyjnym przykładem z pewnego rodzaju analogią:
    Załóżmy że wybierasz się z żona na urlop wakacyjny (nie ważne jak długi).
    Wszystko zostało spakowane w walizki i na końcu pakowania okazuje się że jedna z walizek nie mieści się w bagażniku auta. Przepakowanie walizek i weryfikacja co jest potrzebne a co zbędne, nie wchodzi w rachubę.
    Zatem, pierwszym z brzegu pomysłem jest koncept: Ty pojedziesz jednym autem, a żona weźmie drugie i zabierze tą pozostałą walizkę, - gdy tymczasem na dachu twojego auta jest bagażnik, na którym mieściłaby się ta dodatkowa walizka. Potrzebne byłyby tylko paski do jej zamocowania...


    Wracając do tematu projektu:
    Sygnał ‘tone’ jest przeznaczony do zasilania przetworników dźwiękowych nie posiadających wbudowanego drivera (elementy piezo albo zwykły głośnik radiowy), chociaż ten ostatni wymaga jakiegoś wzmacniacza z uwagi na zbyt małą rezystancję nie pozwalającą na bezpośrednie podłączenie do pinu Arduino. Ponieważ sygnał ten jest z natury prostokątny (praktycznie ON, OFF) nadaje się także aby zasilic buzzer z driverem, - pod warunkiem ze zakres napięcia i pobieranego prądu nie przewyższa wydajności Arduino. Różnicą okaże się brak możliwości regulacji częstotliwości, co w przypadku alarmu nie jest argumentem znaczącym.
    Możnaby taki buzzer podłączyc pod dowolne wyjście, strowane poziomem temperatury, lecz jako alarm uzyskamy sygnał ciąły; a ty potrzebujesz przerywany (pulsujący).
    Z drugiej strony wiemy że sygnał ‘tone’ jest ‘produkowany‘ przez Timer2, wbudowaną funkcją w arduino, który w połączeniu z odmierzaniem stosownych interwałów czasowych dawałby w wyniku zamierzony effekt sygnału przerywanego.

    Możesz wykorzystac ten sam Timer2 lecz skonfigurowany dla funkcji pulse (zamiast tone) z wynikowym parametrem czas trwania impulsu i zastosowac buzzer z wbudowanym driverem jak większośc ‘piszczków ‘ spotykanych w handlu (byc może taki posiadasz).
    Najłatwiej, do tego celu potrzebowałbyś wykorzystac/ (doinstalowac) bibliotekę ‘MsTimer2’ z ustawionym parametrem ‘period =’ powiedzmy 200 do 500; ( czas trwania impulsu w msec. - dobrac doswiadczalnie wg uznania). W pakiecie tej biblioteki jest stosowny przykład, Wystarczy go nieco zmodyfikowac; - dopisac warunki startu i stopu timera2 w zależności od temperatury; i masz niezależny sygnał alarmowy. Możesz także dopisac funkcję uzbrojejnia alarmu (sygnalizowane diodą) i jego manualne wyłączenie (kasowanie tymsamym przyciskiem).
    http://playground.arduino.cc/Main/MsTimer2


    e marcus

  • #16 20 Sty 2017 11:02
    maniolx
    Poziom 14  

    emarcus napisał:

    To już jest jakieś rozwiązanie.
    Czy optymalne? – Nie powiedziałbym...!

    Napisałem że poszedłem na wielkie skróty hihi . Co do nowej biblioteki to zainstalowałem ją oczywiście . Wypróbowałem , pozmieniałem trochę ten parametr co napisałeś i też można osiągnąć nawet ciekawe efekty (tak mam buzer z generatorem) . Ale ....... Chcąc aby buzer zadziałał przy określonej temperaturze to bym na pewno mógłbym wykorzystać tą bibliotekę Lecz ma być dodany jeszcze przycisk który po naciśnięciu podawałby np. stan wysoki na jakiś określony pin co automatycznie "zamrażałoby" działanie buzera na powiedzmy 5 minut. A do tego musiałbym użyć funkcji dellay (bo na pewno millis nie dałbym rady zastosować) a to znowu zakłóciłoby pracę buzera albo pomiary temperatur .

  • #17 20 Sty 2017 18:15
    emarcus
    Poziom 34  

    maniolx napisał:
    A do tego musiałbym użyć funkcji dellay (bo na pewno millis nie dałbym rady zastosować) a to znowu zakłóciłoby pracę buzera albo pomiary temperatur .


    Tu też nie masz racji.
    Funkcję millis możesz używac do woli, ile razy zechcesz i kidykolwiek potrzebujesz stosowac w programie. Posługujesz się tym ‘zegarem’ dokładnie taksamo jak tym ściennym, metodą/analogią wyjaśnioną w którymś z poprzednich postów.
    Dla każdego innego pomiaru musisz stosowac odmienny interwał. Dla przykładu: jeżeli odmierzasz jeden przedział czasu o długości trwania 1 sec to interval_1 będzie równy1000 ; (1000*1), natomiast dla odmierzenia innego 5 minut, - interval_2 będzie równy 300000; (1000*60*5) . Analogicznie potrzebujesz zapamietywac aktualny stan startu pomiaru odpowiednio w innej zmiennej; poprzedni_1 oraz poprzedni_2.
    Wtedy kolejny odczyt millis() analizujesz z jednym i drugim kompletem zmiennych (poprzedni_x , oraz interval_x).
    Aby program miał właściwą zwartośc i ciągłośc, posługuj się dodatkowo operatorami logicznymi (3) (na przykład: && - zwraca true - jeżeli oba warunki spełnione, albo | | - jeżeli którykolwiek z 2 warunków jest spełniony), oraz dodatkowymi zmiennymi, które przy pewnych wydarzeniach lub ich kombinacji byłyby kasowane lub uaktywniane, przez co pomiary długości czasów byłyby jednorazowe lub cykliczne. To samo odnosi się do metody uzbrojenia alarmu, lub jego kasowania (tymczasowego na pewien okres czasu, czy permanentnego).
    Odnośnie obawy o opóźnienia:
    Dopóki nie wydłużysz pętli programu z jakimiś delay(), to maxymalne odczekanie na załączenie lub wyłączenie alarmu lub reakcji na przycisk będzie nie większe niż czas obrotu pętli i jezeli te wydarzenia będą traktowane jako zwykła kolejnośc (bez zadnego priotytetu). Skojarzenie tych wydarzeń z interruptem spowoduje reakcję natychmiastową.
    Czas trwania pętli nie wpłynie na cykl pracy timera2 (- częstotliwośc pulsowania - ‘pośrednio’ regulowana długością impulsu), jednak jej wydłużenie, może byc zaobserwowane pewną opieszałością w reakcji na start lub stop.

    e marcus

  • #18 20 Sty 2017 23:19
    maniolx
    Poziom 14  

    Co z tego że ty mi tu tłumaczysz jak dziecku jak ja i tak nie daję tego rady wstawić do mojego szkicu . Każdy pisze że to proste i daje przykłady a mnie i tak to nie wychodzi . Nikt nie śmiał wstawić tych trzech , czterech linijek do mojego szkicu aby to działało , bo przecież jak piszą - nikt mi nie napisze gotowca . Dzisiaj znowu lekko zagotowałem wodę w piecu bo nie mam żadnego powiadomienia . Jeżeli ktoś uważa że prawie dwa tygodnie po parę godzin dziennie to za mało na dodanie funkcji warunkowej i przycisku do działającego szkicu to mało , to trudno .Ja już na to siły i umiejętności nie mam . Szkoda moich nerwów i waszego straconego czasu . Zamykam ten temat bo nie widzę możliwości rozwiązania go z mojej strony . Dziękuję wszystkim za pomoc w szukaniu .