Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 29 sie 2026, o 09:43


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 28 gru 2015, o 11:33 
Offline
Nowy

Dołączył(a): 06 gru 2015
Posty: 7
Pomógł: 0

Witam
Chciałbym zwrócić się z prośbą o pomoc w obsłudze czujnika odległosci w jezyku C.
W Arduino IDE jest wręcz banalne:

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

Ustawienie poszczególnych pinów oraz opóżnień w C jest dosyć łatwe, natomiast chodzi mi o realizacje funkcji pulseIn czyli funkcji odpowiedzialnej za pomiar długości impulsu.

Posiadam: Atmega328p oraz zewnętrzny rezonator 16Mhz - czyli po prostu programuje arduino pisząc program w C.
Ogólnie chciałbym skorzystać z przerwania zewnętrznego, dlatego też echo pin podłączyłem do INT1.

Obecny kod jest następujący:


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

Program wykorzystuje przerwania od INT1 i w momencie wykrycia zbocza narastającego, odblokowywane jest przerwanie od timera2, które występuje co 100us, zwiększając licznik. Następnie zachodzi zmiana reakcji ze zbocza narastającego na opadające i w momencie jego wykrycia jest zatrzymywany timer.

Zastosowałem dodatkową zmienna impuls, która przedstawia "proces impulsu"
Jeśli impuls=0, to znaczy, że jeszcze nie wystąpił impuls.
Jeśli impuls=1, to znaczy, że wystąpiło zbocze narastające, czyli impuls trwa dalej i się jeszcze nie zakończył.
Jeśli impuls=2, to znaczy, że wystąpiło zbocze opadające i impuls zakończył się.

Od owej zmiennej uwarunkowałem funkcję sondująca odpowiedzialna za sygnał sondujący, oraz funkcję pomiar, która wysyła informacje tylko w odpowiednich momentach, czyli w momencie kiedy wystąpiło już zbocze opadające echa i sygnał się zakończył.

Niestety program posiada jakieś niedociągnięcia, ale myślę, że idea programu jest dobra.
Z góry dziękuję za pomoc



Ostatnio edytowano 28 gru 2015, o 12:31 przez szejkop, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2015, o 11:58 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Wstaw odpowiednio kod. Będzie się lepiej czytać.
Druga sprawa to chyba piszesz to w arduino a nie w C
Wnioskuję to po
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2015, o 12:19 
Offline
Nowy

Dołączył(a): 06 gru 2015
Posty: 7
Pomógł: 0

Zgadza się pierwszy kod jest napisany w języku Arduino, który przerabiam na czysty C i z tym kodem mam problem, stąd moja prośba o pomoc.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2015, o 12:25 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

kod wstaw według tego: http://forum.atnel.pl/topic7402.html
Na prawdę będzie o 1000000000 razy czytelniejszy

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2015, o 12:32 
Offline
Nowy

Dołączył(a): 06 gru 2015
Posty: 7
Pomógł: 0

Edytowane :)

------------------------ [ Dodano po: 29 minutach ]

Zauważyłem, że zamiast wykonania instrukcji warunkowej, program podstawia za impuls wartość 2, niestety to nie jedyny problem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 gru 2015, o 14:01 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

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

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


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

Wtedy jak się pomylisz w ilości znaków "=" dostaniesz o tym informację ;-)

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 gru 2015, o 20:43 
Offline
Nowy

Dołączył(a): 06 gru 2015
Posty: 7
Pomógł: 0

Dziękuję za odpowiedź :) Też to zauważyłem i niestety po zmianie program nie działa prawidłowo (nie wysyła nawet informacji do monitora szeregowego).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 gru 2015, o 20:50 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Tak trochę masz ten program po kociemu napisany :-(
Deklaracje funkcji wyrzuć przed main
definicje daj za główną pętlę.
Program zrobi się czytelniejszy i łatwiejszy do analizy.
Czy kompiluje się bez błędów i ostrzeżeń?

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2015, o 14:08 
Offline
Nowy

Dołączył(a): 06 gru 2015
Posty: 7
Pomógł: 0

Program został zmodyfikowany tak jak mówiłeś. Funkcje są zadeklarowane przed mainem, a ich definicja oraz definicja przerwań, są poniżej - całość reprezentuje się tak:

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


Kompiluje owy program przez arduino i nie widzę żadnych errorów ani warringów.
Zauważyłem,że funkcja sonda (odpowiedzialna za wysyłanie sygnału trwajacego 10us) nie jest aktywowana, tak jakby nie był spełniony warunek if(impuls==0), stąd też reszta programu nie ma szansy zadziałać. W czym tkwi ten problem ?

Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2015, o 19:59 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Masz jeszcze błędy w przypisanie vs. porównanie w
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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

bo coś mi z tym nie pasuje

------------------------ [ Dodano po: 1 minucie ]

gdybyś używał eclipse to te błędy z przypisaniem zamiast porównania by Ci wyszły...

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 gru 2015, o 20:20 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

Staraj się może w ten sposób formatować kod

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

Na prawdę będzie czytelniejszy i dla Ciebie i dla innych

------------------------ [ Dodano po: 31 minutach ]

A przy okazji jakbyś nie zauważył zaznaczyłem Ci gdzie masz te błędy

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 4 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO