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.

Składnia: [ Pobierz ] [ Ukryj ]
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. :oops: :oops:

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

Składnia: [ Pobierz ] [ Ukryj ]
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)
co oznacza jeśli result jest większy od 0 lub result jest mniejszy lub równy 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).
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:  Daro69 [ 10 lis 2018, o 09:13 ]
Tytuł:  Re: Sterowanie pompka, ADC, Klawiatura 4x4

Witam,
Podpowiem.
if( a > 0 && a <=100) // zamień operator logiczny && na wyraz 'jednocześnie, oraz, także..'. oba przyrównanie muszą być spełnione jednocześnie.
if( a > 0 || a < 100) // zamień operator na wyraz ' albo, lub, ewentualnie'. musi być spełnione co najmniej jedno przyrównanie, mogą oba.
Pozdrawiam
.........................................20:10.10/11/2018..................................
dopiszę jeszcze w tym poście bo szkoda miejsca.
w pierwszym if'ie, warunek jest spełniony dla 'a' większego od '0' ale nie większego od '100'. !!!
w drugim if'ie, warunek jest spełniony zawsze. (tak jak niżej napisał kolega "SylwekK" ). ponieważ każda wartość jest albo większa od 0, albo mniejsza równa 100. a ten if sprawdza czy a > 0(czy jest liczbą dodatnią). Jeżeli nawet nie jest, to jeszcze sprawdza bo być może jest mniejsze równe 100.
@miki53, napisz wartość która nie jest większa od 0 i jednocześnie nie jest mniejsza równa od 100. :idea:

Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka
.........................................21:17 10/11/2018...................................
żeby nie zaśmiecać wątku - konsekwentnie w tym poście dografuję, może pomoże. choć to i tak off top wątku. :roll:
Obrazek

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:

Składnia: [ Pobierz ] [ Ukryj ]
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:


Składnia: [ Pobierz ] [ Ukryj ]
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ś.. :oops:

Funkcja check_result()
Składnia: [ Pobierz ] [ Ukryj ]
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
Składnia: [ Pobierz ] [ Ukryj ]
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.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pętla główna
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Zmienne

Składnia: [ Pobierz ] [ Ukryj ]
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.

Składnia: [ Pobierz ] [ Ukryj ]
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

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

czy nie chodzilo o
Składnia: [ Pobierz ] [ Ukryj ]
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):
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

czy nie chodzilo o
Składnia: [ Pobierz ] [ Ukryj ]
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.

Składnia: [ Pobierz ] [ Ukryj ]
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 :cry:

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/