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



Teraz jest 24 lut 2025, o 17:35


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 20 maja 2017, o 09:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 mar 2016
Posty: 30
Pomógł: 0

Witam

Pisze program, który będzie sterował servem za pomocą micro switcha.

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


Chcę przekazać wartosc zmiennej pozycja do funkcji servo przy wcisnieciu klawisza ale nie mogę nie wiem co źle robię myśle że jakis mały błąd.

A tutaj wklejem definicje funkcji Przycisk:

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


Myśle że problem leży w tym kawałku kodu, będę analizował to dalej, może ktoś wie co jest nie tak?

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 maja 2017, o 11:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1033
Lokalizacja: Trójmiasto
Pomógł: 190

OskarQ1 napisał(a):
Myśle że problem leży w tym kawałku kodu, będę analizował to dalej, może ktoś wie co jest nie tak?

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


Piszesz "tu jest błąd" - ale to twoje osobiste spostrzeżenie czy ten błąd wywala kompilator? A jeśli wywala to jaki?
Widzisz wklejasz fragmenty kodu więc jak ktoś ma Ci pomóc nie znając nawet szczegółów błędu. Nie mając całego kodu nawet nie można tego wrzucić do kompilatora i sprawdzić...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 maja 2017, o 11:19 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27359
Lokalizacja: Szczecin
Pomógł: 1042

xentis napisał(a):
Piszesz "tu jest błąd" - ale to twoje osobiste spostrzeżenie czy ten błąd wywala kompilator? A jeśli wywala to jaki?
Widzisz wklejasz fragmenty kodu więc jak ktoś ma Ci pomóc nie znając nawet szczegółów błędu. Nie mając całego kodu nawet nie można tego wrzucić do kompilatora i sprawdzić...


Podsumowując, zawsze jest tak, że aby otrzymać dobrą i szybką podpowiedź - warto przemyśleć jak dobrze zadać pytanie, nie zaś tworzyć zagadki i domyślać się, że inni będą zgadywać jakie błędy ty widzisz w kompilatorze.

Tak jak kolega wyżej pisze, uzupełnij że pan swoje pytanie i na przyszłość pamiętaj o tej jakże prostej zasadzie zadawania pytań na forum, poproszę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 maja 2017, o 12:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 mar 2016
Posty: 30
Pomógł: 0

Racja panowie, za mało informacji podałem już to naprawiam ;)

Jestem w trakcie pisania programu do sterowania servem (Tower Pro SG92R) mikro servo, za pomocą micro switcha,

Oto cały kod:

Main.c:

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


Funkcje.c:

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


Funkcje.h:

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


Tak jak pisałem wyżej błąd kompilator pokazuje mi właśnie w tej linijce:

if(kfun) kfun(poz);

Opis błędu:

../Funkcje.c: In function 'Przycisk':
../Funkcje.c:48:17: error: 'poz' undeclared (first use in this function)
../Funkcje.c:48:17: note: each undeclared identifier is reported only once for each function it appears in

Jest źle zadeklarowany ten argument, strwierdzam tak ponieważ gdy wpisuję w wywołanie funkcji przycisk, funkcje bez argumentu to działa jak chcem, ale w funkcji użytkownika muszę mieć już wpisaną wartośc pozycji.

Z góry dzięki za pomoc pozdrawiam ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 maja 2017, o 13:26 
Offline
Użytkownik

Dołączył(a): 26 lip 2015
Posty: 269
Pomógł: 34

Jak zmienna jest w funkcji to musi mieć definicję . Niezagłębiałem się w kod ale chodzi o to:
uint16_t poz;
zamienić na
uint16_t poz = 0;
nie patrzyłem na założenia projektu jak to ma działać itd. Aby warn znikł trzeba przypisać jakąś wartość obojętnie jaką . ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 maja 2017, o 16:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1033
Lokalizacja: Trójmiasto
Pomógł: 190

Asem we wskaźnikach nie jestem (choć bardzo rozjaśniającym był wykład na Warsztatach z Yellowbookiem) ale to co udało mi się przetestować:
W deklaracji funkcji "Przycisk" jako czwarty argument masz wskaźnik na funkcję, a w pętli głównej programu próbujesz przemycić samą funkcję a przecież jak wskaźnik to tylko i wyłącznie adres. Tak samo jak owy wskaźnik nie przeniesie ci samego argumentu wskazywanej funkcji.
Moim zdaniem do definicji funkcji "Przycisk" powinieneś dodać dodatkowy argument w postaci zmiennej uint16_t i to za pomocą tej zmiennej przekazać argument dla funkcji na którą wskazuje wskaźnik kfun. A w pętli głównej przy wywołaniu funkcji "Przycisk" w miejscu gdzie ma być podany wskaźnik na funkcje wpisujesz samą nazwę funkcji bez nawiasów przez co dasz do zrozumienia kompilatorowi że przekazujesz adres do funkcji.
Dodatkowo nie powinieneś wewnątrz funkcji "Przycisk" definiować zmiennej lokalnej o nazwie takiej samej jak argument funkcji.
Tak więc powinno to wszystko wyglądać tak:

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


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


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


Finalnie kompilator się uspokoił 8-)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 maja 2017, o 10:43 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 mar 2016
Posty: 30
Pomógł: 0

xentis - wielkie dzięki za analize kodu, faktycznie problem polegał na tym że to był wskaźnik na funkcje a ja próbowałem całą funkcje z argumentem przekazać.

Po poprawie kodu kompilator się uspokoił a co najważniejsze servo ustawia się pod określonym kątem opisanym długościa impulsu po naciśnięciu przycisku i po resecie wraca na początkową pozycje czyli środek. Wstawiam fotkę z oscyloskopu.

Obrazek

Dla zmiennej:

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 maja 2017, o 14:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 mar 2016
Posty: 30
Pomógł: 0

Hej ;)

Wszystko działa jak założyłem ale przydałaby mi się jescze zmienna licznik która za każdym kliknieciem aktualizowałaby zamienną pozycja o określoną wartość w wyniku tego serwo za każdym kliknieciem zmieniałoby kąt.

Myśle jak zabrać się to tego, utworzyć nową funkcje która będzie aktualizować mi zmienna poycja czy może da się to zrobić na istniejącej już funkcji Przycisk?

Na chwile obecną utworzyłem zmienną licznik która liczy mi kliknięcia i do funkcji Przycisk wpisałem pętlę for która po każdym kliknięciu aktualizuje mi zmienną pozycja hmm wszystko działa jak chcem servo po każdym kliknieciu zmienia kąt, ale te rozwiązanie myśle że mało elegandzkie i myślę dalej ;)


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



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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 maja 2017, o 14:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 mar 2016
Posty: 30
Pomógł: 0

Witam ;)

Robie sterowanie servem za pomocą dwóch micro-switch, pierwszy switch kręci servem w lewo a drugi w prawo, napisałem dwie oddzielne funkcje dla przycisków, oraz utworzyłem zmienną globalną która zainicjowana jest wartoscia 1500 (ustawia servo w pozycji srodkowej) Problem który próbuje rozwiącać jest następujący: Otóż chcem aby na moją zmienna globalną miały wpływ dwie funkcje w takim sensie że gdy chcem skręcić w prawo to dodaję ustaloną wartość do zmiennej pozycja, servo skręca w prawo i już ma wartość (początkowa 1500 + wartośc ustalona dla pojedynczego wcisniecia switcha) okey ładnie się obraca ale gdy chcem skręcić teraz w lewo wciskam switcha nr 2 okey servo skręca w lewo ale odejmuje określoną wartość od początkowej 1500 - wartość ustalona dla przycisku 2.

oto kod:

main:

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


Funkcje.c:

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


Funkcje.h:

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


Pisząc krótko nie aktualizuje mi wartość pozycja, pracuje dalej i z góry dzięki za pomoc ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 maja 2017, o 14:26 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1167
Lokalizacja: Kraków
Pomógł: 93

Moja sugestia to tylko pomysł, nie mam jak sprawdzić. Spróbuj przekazać wskaźnik na zmienną poz, a nie zmienną (znaczy, z &)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 maja 2017, o 14:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 mar 2016
Posty: 30
Pomógł: 0

Marhef gdy próbuję przekazać wsaźnik na zmienna poz servo mi nie opowiada zero reakcji ;/

Dla przycisku1:

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


Hmm Pytanie brzymi dlaczego zmienna globalna jaką jest pozycja przyjmuje wartość początkową gdy odpalam funkcje nr 2 przecież zmienna globalna jest widziana przez te dwie funkcje



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 maja 2017, o 07:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1167
Lokalizacja: Kraków
Pomógł: 93

OskarQ1 napisał(a):
Hmm Pytanie brzymi dlaczego zmienna globalna jaką jest pozycja przyjmuje wartość początkową gdy odpalam funkcje nr 2 przecież zmienna globalna jest widziana przez te dwie funkcje
Chyba nie do końca. Z tego, co pamiętam ze szkoły, w ten sposób tworzysz kopię zmiennej poz na potrzeby danej funkcji. Ale mogę się mylić.
Chociaż, moja teoria się chyba sprawdza ;) Popatrz, wywołujesz funkcję servo z parametrem pozycja -200 (na przykład). Ale nie zmieniasz wartości zmiennej pozycja (globalnej zmiennej).
Dobrze byłoby, gdyby Mirek podpowiedział. On jest lepszy w te klocki ;) Mi się pomysły skończyły :(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 maja 2017, o 15:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 mar 2016
Posty: 30
Pomógł: 0

Hej, problem rozwiązałem, zbędna okazała się pętla for w funkcjach teraz działa jak chciałem zmienna pozycja jest aktualizowana wartością z dwuch funkcji ;)

dzięki za pomoc ;)

oto zmieniony kod funkcji:

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


Rozwijam projekt dalej, pozdrawiam ;)



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: 13 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO