ATNEL tech-forum https://forum.atnel.pl/ |
|
Sterowanie pompka, ADC, Klawiatura 4x4 https://forum.atnel.pl/topic21547.html |
Strona 1 z 1 |
Autor: | KampoPampo [ 8 lis 2018, o 12:53 ] |
Tytuł: | Sterowanie pompka, ADC, Klawiatura 4x4 |
Witam. Chce dodać opcje, która będzie uruchamiać / wyłączać pompke przy odpowiednich warunkach. Wpisuje liczbe i od razu włącza mi się pompka (nawet nie zatwierdzę i działa ciągle, nawet jak wracam do głównego menu), a moim celem jest żeby pompka działała zależnie od wilgotności. Kod do pomiaru ADC działa poprawnie, jednak tu mam kłopot. język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Potraficie mi coś doradzić, bo niestety męczę sie nad tym troche? Jak przechodzę do tej pozycji menu, wpisuje liczbe i zatwierdzam to pompka się włącza niezależnie od wskazania czujnika i działa non stop. Próbowałem to jakoś rozwiązać, ale bez skutku. Z góry dziękuję i pozdrawiam. |
Autor: | miki53 [ 9 lis 2018, o 15:11 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
Witaj KampoPampo Nie jestem mocny w te klocki ale postaram się Ci pomóc tak przeglądałem twój kod i wpadł mi w oko pewien fragment twojego kodu język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. nie uważasz że ten if jest dziwny bo oznacza - jeśli result jest większy od 0 i result jest mniejszy lub równy 100 dla mnie to niewiadoma tak jak myślę dla procka również bo jaka ta zmienna ma być albo większa od 0 albo mniejsza lub równa 100 i z czym porównać skoro to ta sama zmienna jak myślisz nie powinno to wyglądać tak if (result>0 || result <=100) co oznacza jeśli result jest większy od 0 lub result jest mniejszy lub równy 100 troszkę więcej w tym sensu jak myślisz? Wybacz za wymądrzanie się początkującego |
Autor: | Marhef [ 9 lis 2018, o 15:51 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
miki53 napisał(a): ak myślisz nie powinno to wyglądać tak if (result>0 || result <=100) Ale ten warunek "łapie" również wartości mniejsze od zera (bo spełniają warunek result <= 100) i większe od 100 (no bo przecież 101 jest większe od 0).co oznacza jeśli result jest większy od 0 lub result jest mniejszy lub równy 100 Tak że ten warunek zapisany przez kolegę @KampoPampo jest dobrze zapisany. Natomiast reszty kodu nie rozumiem... strasznie chaotycznie to napisane... brakuje funkcji check_result(result)... brakuje pętli głównej programu... co to za zmienna liczba? A a? dałoby się uniknąć instrukcji goto (swoją drogą baaardzo zły nawyk)... wielokrotnie zagnieżdżone warunki - i może gdzieś w tym zagnieżdżeniu jest problem, ale nie umiem go znaleźć |
Autor: | Daro69 [ 9 lis 2018, o 18:27 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
prawie 200 wyświetleń i żadnej konkretnej podpowiedzi. Powodem jest mało czytelny kod. nie widzę np. dokąd prowadzi nieszczęsne "goto skok;". nie widać wartości liczba. bardzo ciężko przeanalizować - nawet ze szklaną kulą. |
Autor: | miki53 [ 10 lis 2018, o 02:09 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
Witam kolegę Marhef chciałbym się zapytać czy na pewno ten warunek który napisał kolega KampoPampo w swoim kodzie jest poprawny ? bo jeśli nie to nie przeczytałeś uważnie mojego postu if (result>0 && result <=100) Myślę że w ten sposób nie można porównywać tą samą zmienną z różnymi wartościami ? Ale to tylko moja opinia Tak się pytam dla własnej nauki i wiedzy Reszta kodu jest mało czytelna i fragmentaryczna trudna do przeanalizowania jak wspomniał kolega Daro69 |
Autor: | miki53 [ 10 lis 2018, o 14:34 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
Kolego KampoPampo na samym początku zmień warunek if (result>0 && result <=100) czyli if (result>0 i result <=100) jak widzisz ta sama zmienna jest porównywana nie może przyjąć -- dwóch -- równych wartości w tym samym czasie bo to jest jedna i ta sama zmienna a nie dwie różne zmienne które chcesz porównać warunek zawsze będzie nie spełniony zamień go na warunek if (result>0 || result <=100) czyli if (result>0 lub result <=100) warunek będzie spełniony jeśli zmienna result będzie większa od 0 -- lub -- mniejsza lub równa 100 przyjrzyj się jeszcze warunkowi if ( wilg >= liczba ) jaka jest wartość zmiennej - wilg - i zmiennej - liczba - dlaczego ten warunek Ci przepuszcza i włącza pompkę Na razie tylko tyle mogę pomóc może gdybyś wstawił większy fragment kodu to mógłbym pomóc bardziej |
Autor: | SylwekK [ 10 lis 2018, o 15:40 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
No nie, co za bzdury... Jeśli wstawi tam "lub" to każda wartość łapie się w warunek. |
Autor: | Marhef [ 10 lis 2018, o 20:20 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
kolego miki53, tego, co napisałem wcześniej, jestem w 100% pewny. Zauważ, że sprawdzasz, czy zmienna result jest w przedziale od 0 do 100. Więc sprawdzasz oba warunki z operatorem &&. Tak, żeby przybliżyć: result > 0 && result <= 100: Sprawdźmy dla kilku liczb: 5: 5 > 0 && 5 <= 100 -> wartość logiczna prawda (prawda and prawda = prawda) 99: 99 > 0 && 99 <= 100 -> wartość logiczna prawda (prawda and prawda = prawda) 101 : 101 > 0 && 101 <= 100 -> wartość logiczna fałsz (prawda and fałsz = fałsz) A teraz result > 0 || result <= 100: 5: 5 > 0 || 5 <= 100 -> wartość logiczna prawda (prawda or prawda = prawda) 101: 101 > 0 || 101 <= 100 -> wartość logiczna nadal prawda (prawda or fałsz = prawda) Też tego kiedyś tego nie rozumiałem. Ale tak to działa. I działa dobrze |
Autor: | SylwekK [ 10 lis 2018, o 20:50 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
Albo jeszcze inaczej. Dwa warunki, a pomiędzy nimi "&&" można rozbić na sekwencję jak poniżej czyli warunek zagnieżdżony: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Natomiast w przypadku znaku "||" mamy coś takiego: język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Widać subtelną różnicę? W drugim przypadku każde badanie uruchamia wykonanie "czegoś tam", a w pierwszym tylko jeśli faktycznie jeśli będzie zakres spełniony. Swoją drogą takie rozbijanie warunków "AND" w Bascomie na pojedyncze bardzo zmniejszał kod. Nie wiedzieć czemu normalne użycie AND w jednej linii koszmarnie wydłużał program. |
Autor: | KampoPampo [ 11 lis 2018, o 12:16 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
Dałem ciała i dyskusja poszła w inną stronę, ale nie uważam, że podpowiedzi odnośnie ustawiania warunków są złe. Zacznę od zawarcia kilku istotnych funkcji, które mogą wyjaśnić wam przyczynę mojego problemu, bo tak jak było podane, nawet ze szklanej kuli się tego nie wyczyta.. Czy coś.. Funkcja check_result() język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Rozpisanie działania klawiszy ze zmienną a język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Funkcja read_keypad() sprawdza kolejno wszystkie przyciski klawiatury i zwraca numer pierwszego wciśniętego przycisku, albo zero, gdy żaden przycisk nie został wciśnięty. Jest to instrukcja działania klawiatury matrycowej. Funkcji ADC nie dodaje bo to, sam odczyt z adc jest prawidłowy, jednakże może gdzieś jest problem z wartością wilg. język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Pętla główna język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Zmienne język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Mam nadzieję, że nic nie pominąłem. |
Autor: | miki53 [ 11 lis 2018, o 14:19 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
Dostało mi się ale to nic przynajmniej jakoś się ten post rozruszał Ale i dobrze bo i dla mnie z tego jakaś nauka wypłynie wytłumaczcie mi jak można porównać jedną i tą samą zmienną z nią samą, nawet gdyby zmieniała się jej wartość? dla jasności zmienna result = result wartość z lewej strony będzie się równała wartości z prawej str. dla mnie to wygląda tak mam zmienną resuit o wartości 5 i teraz to porównaj - ale z czym z nią samą jeśli nawet porównam z nią samą to zawsze będzie równa samej sobie - masło maślane gdybym przyjął do porównania result porównaj z result_1 to są dwie różne zmienne które można porównać i to jest OK Czy znowu się mylę? |
Autor: | SylwekK [ 11 lis 2018, o 14:55 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
Zobacz jeszcze raz mój post. Tam nie ma porównania zmiennej samej ze sobą. Te operatory logiczne powodują, że porównania ze zmienną użytą w warunku za każdym razem jest osobnym działaniem. Nie wiem jak Ci to prościej wytłumaczyć. |
Autor: | micky [ 11 lis 2018, o 16:07 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
I pamiętaj że jedno '=' oznacza przypisanie w języku C! |
Autor: | Marhef [ 11 lis 2018, o 20:58 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
Zerknąłem w kod... Po co funkcja check_result? Funkcję read_key można by zrobić na instrukcji switch, mam wrażenie, że byłoby łatwiej. Tak, jak pisałem wcześniej, zrezygnowałbym z instrukcji goto, to zły nawyk. Napisz, jak ma program działać, może napiszemy go w inny sposób? |
Autor: | KampoPampo [ 11 lis 2018, o 21:48 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
Funkcja check_result jest po to, aby wartość wpisana i zatwierdzona na klawiaturze, została zapisana do zmiennej. Przetestowałem tę opcje i działa dobrze. read_key stworzyłem tak, żeby odczytywało wartość z klawiatury, może na switchach byłoby łatwiej ale jakoś się nad tym nie skupiałem, ponieważ nie sądziłem, że może wpływać na opisany przeze mnie problem. Instrukcje goto wiem, że jest beznadziejnym rozwiązaniem, ale użyłem to po to, żeby poruszać się łatwo po menu (powrót do głównego menu oraz powrót do początku wyboru wilgotnosci. Teraz o działaniu programu. Działanie jego ma być następujące. Z głównego menu wybieram opcje A - podlewanie zależne od wilgotnosci. Przechodzę do punktu menu WILGOTNOŚĆ i program prosi mnie o wpisanie wartości wilgotności (wartość zapisuje się do result, czujnik podłączony pod ADC). Zatwierdzam liczbe i program uruchamia pompkę jeśli wartość wilgotności na czujniku jest mniejsza od wpisanej. I tak cały czas do zatrzymania działania. To działa jako wykasowanie danych. język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. A to jest powrót do głównego menu |
Autor: | SylwekK [ 11 lis 2018, o 21:58 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
Porównujesz tam widzę "wilg i liczba", a nie widzę aby result był przepisany do zmiennej liczba. Tak ma być? Sorki, ale strasznie chaotycznie wydaje mi się napisany program i jego analiza jest po prostu koszmarna jak dla mnie. |
Autor: | Daro69 [ 11 lis 2018, o 22:01 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
witam, KampoPampo napisał(a): czy nie chodzilo o język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. trochę miesza mi się. |
Autor: | KampoPampo [ 12 lis 2018, o 10:35 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
Daro69 napisał(a): witam, KampoPampo napisał(a): czy nie chodzilo o język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. trochę miesza mi się. Początkowo było tak i spełniało swoje działanie, ale dodałem zmienna liczba, bo myślałem, że to pomoże jakoś w odczycie wyniku z result. język c Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod. Za bardzo utrudniam. Proszę o wybaczenie |
Autor: | KampoPampo [ 15 lis 2018, o 15:16 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
Próbowałem dodać jakieś usprawnienia, ale problem cały czas jest ten sam, gdyż po zatwierdzeniu jakiejkolwiek wartości z klawiatury (od 1 do 100) pompka włącza się i działa cały czas nie reagując na Zmiany wartości wilgotności. Chciałbym wiedzieć o co chodzi, ale nie wiem. Jest ktoś w stanie podrzucić jakąś wskazówkę, bo na razie nie daje rady tego rozwiązać. Bardzo dziękuję za wcześniejsze odpowiedzi. |
Autor: | SylwekK [ 15 lis 2018, o 15:29 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
Zrób tryb debugowania na lcd. Wyślij tam wszystkie istotne zmienne na czas testów i obserwuj co się dzieje. Ja tak robię z każdym bardziej skomplikowanym programem, a i w prostszych też szybko można zlokalizować błąd - np. jeśli coś pisze pod tiny13 to najpierw pisze to na mega32 z lcd i jeśli algorytm działa dopiero robię konwersję na inny procek. |
Autor: | KampoPampo [ 21 lis 2018, o 11:55 ] |
Tytuł: | Re: Sterowanie pompka, ADC, Klawiatura 4x4 |
SylwekK napisał(a): Zrób tryb debugowania na lcd. Wyślij tam wszystkie istotne zmienne na czas testów i obserwuj co się dzieje. Ja tak robię z każdym bardziej skomplikowanym programem, a i w prostszych też szybko można zlokalizować błąd - np. jeśli coś pisze pod tiny13 to najpierw pisze to na mega32 z lcd i jeśli algorytm działa dopiero robię konwersję na inny procek. Sprawdziłem tym sposobem co się dzieje ze zmiennymi result, wilg i inne. Wartość wpisana z klawiatury jak i z czujnika wpisują się i pokazują poprawnie, więc nie wiem gdzie leży problem z odczytem wartości. Może zapisuje zły warunek, który ma za zadanie działać według wskazań czujnika i zmiennej result. |
Strona 1 z 1 | Strefa czasowa: UTC + 1 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |