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



Teraz jest 3 lut 2025, o 19:28


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 3 wrz 2017, o 23:35 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Dzień dobry wszystkim forumowiczom.
Uruchamiałem silnik krokowy bipolarny. Wszystko działa ale mam problem ze zrozumieniem kodu.
Mam pewne pytanie do kodu z bb:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


1. Co 2 ms sprawdzamy jak się zachowa zmienna dir i załączamy odpowiednie obroty?
2. Zmienna sekundy zwiększają się co 1 s. Więc if( 0 == (sekundy%9) ) dir = lewo; Zmienna jest inicjalizowana 0 więc 0%9=0 czyli dir=lewo i kręci się lewo, potem 1%9=1 więc nic 2%9=2 więc nic dopiero przy 3%9=3 więc załącza się prawo.
Tu mam 3 sekundy...gdzie popełniam błąd?


Proszę forumowiczów o pomoc.



Ostatnio edytowano 4 wrz 2017, o 12:42 przez elektronikq, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 wrz 2017, o 07:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Witam,
2ms to częstotliwość z jaką są zmieniane napięcia na cewkach.
Jeżeli w lewo to w kolejności lewych obrotów.....
Przez pierwsze 3 sek. Kręci w lewo, kolejne 3 w prawo, a kolejne trzy jest w bezruchu.
Jeżeli o to chodziło.

Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 wrz 2017, o 07:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Poza tym edytuj/wklej kod w syntax_c .

Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 wrz 2017, o 12:45 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Daro69 napisał(a):
Witam,
2ms to częstotliwość z jaką są zmieniane napięcia na cewkach.
Jeżeli w lewo to w kolejności lewych obrotów.....
Przez pierwsze 3 sek. Kręci w lewo, kolejne 3 w prawo, a kolejne trzy jest w bezruchu.
Jeżeli o to chodziło.

Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka


Właśnie o to, z mojego toku rozumowania wychodzi 3 sek ale w książce jest zapisane co 2 sek. Jeśli chodzi o 2ms to jeśli dir==lewo to co 2 ms wykonuje się funkcja do lewych obrotów a w dir wpisane jest lewo czyli cyfra 0 przez 3 czy przez 2 sek?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 wrz 2017, o 22:35 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Czy jest co 2 sekundy? Ma to coś z wspólnego z postinkrementacją zmiennej sekundy?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 wrz 2017, o 08:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

acha.. dopatrzyłem się dopiero. :)
Chodzi o słowo w komentarzu ' dwie ' .
Oczywiście co trzy.
Mam komentarz co 2, ale do kodu :
........sekundy%2. .........dir ^= 1....
Pozdrawiam.

Wysłane z mojego Lenovo K33a42 przy użyciu Tapatalka


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 wrz 2017, o 22:05 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Ja mam komentarz z książki: /* równo co dwie sekundy zmieniamy kierunek na przeciwny */



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2018, o 20:35 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Tak jest co 3. Błąd w komentarzu.
Pytanie odnośnie static. Jak static jest przed zmienną to staje się ona jakby lokalną w funkcji w której jest wywołana lub przerwaniu w którym się wywołuje. Dobrze myślę?
A jak stoi przed funkcją?

------------------------ [ Dodano po: 14 minutach ]

I mam pytanie odnośnie działania programu:
0%9=0
1%9=1
2%9=2 ?
Bo jeśli mam:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


To na początku 0==(sekundy%9)==0 to zacznie się wykonywać w lewo
ale po sekundzie mamy:
0==(sekundy%9)==1 a to już nam nie zadziała bo z nawiasu wyjdzie 1.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 sty 2018, o 22:18 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 03 gru 2014
Posty: 18
Pomógł: 3

Cytuj:
To na początku 0==(sekundy%9)==0 to zacznie się wykonywać w lewo
ale po sekundzie mamy:
0==(sekundy%9)==1 a to już nam nie zadziała bo z nawiasu wyjdzie 1.


Zgadza się, ale to, że z nawiasu wyjdzie 1 nic nie zmieni ponieważ nie spełnia to żadnego warunku, dopiero gdy z nawiasu wyjdzie 3 (czyli po 3 sekundach) warunek zostanie spełniony i zmieni się kierunek obrotów.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2018, o 11:54 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Dziękuje.
Mam ostatnie pytanie odnośnie funkcji enum.
W prostym rozumieniu enum możemy liczby zamienić na ciąg znaków?
enum menu_kierunek {stop, lewo,prawo};
czyli stop=0, lewo=1, prawo=2?
enum menu_kierunek jakas_stala=stop;

Czyli na początku w nawias klamrowy wpisujemy ile chcemy pozycji. Numerowanie zaczynamy 0 dla pierwszego elementu.
Potem powołujemy zmienną w tym przypadku jakas_stala którą inicjujemy dowolnym elementem z nawiasu klamrowego.
I ona już na zawsze jest taka zainicjowana jak na początku?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 sty 2018, o 18:19 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 03 gru 2014
Posty: 18
Pomógł: 3

Enum to typ wyliczeniowy, który do pozycji w nawiasie klamrowym przypisuje kolejno liczby domyślnie od 0.

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


Jednak gdy do pozycji stop przypiszemy jakąś wartość np. 2 numerowanie rozpocznie się od wartości 2

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


Myślę, że nie jestem tego w stanie lepiej wytłumaczyć niż jest to w BB na str. 84-86 :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2018, o 08:17 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Mam niebieską książkę i przeczytałem ten dział, może za bardzo chcę to zrozumieć.
Skoro do stop przypisujesz 2 a potem stop = jakas_stala to jak ona będzie równać się dwa?
Mam problem z tą inicjalizacją? Może zapytam się tak: jaką wartością powinniśmy zainicjalizować zmienną z typu ENUM.
W przypadku silnika mamy lewo, stop, prawo a inicjalizujemy od lewo.Dlaczego?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 sty 2018, o 09:50 
Offline
Użytkownik

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

elektronikq napisał(a):
Mam niebieską książkę i przeczytałem ten dział, może za bardzo chcę to zrozumieć.
Skoro do stop przypisujesz 2 a potem stop = jakas_stala to jak ona będzie równać się dwa?
Mam problem z tą inicjalizacją? Może zapytam się tak: jaką wartością powinniśmy zainicjalizować zmienną z typu ENUM.
W przypadku silnika mamy lewo, stop, prawo a inicjalizujemy od lewo.Dlaczego?

Tak będzie się równała 2. Kolega z pośpiechu się pomylił ;-)
Typ wyliczeniowy przypisuje (domyślnie) do elementów wpisanych w nawiasy klamrowe kolejne liczby.
Standardowo zaczynając od 0.
Te liczby można zmieniać.
A zmienną typu enum możesz inicjalizować dowolną wartością jaka jest Ci potrzebna, byle to miało logiczny sens.
Jeżeli zrobisz sobie typ enum
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

to zmienną zapewne zechcesz zainicjować którąś z tych wartości czyli
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i zmienna obroty będzie miała wartość 1
A na pytanie: "Dlaczego?"
odpowiedź jest prosta - Bo tak sobie programista założył, albo tak mu wyszło z tego co potrzebuje osiągnąć w programie.


Autor postu otrzymał pochwałę

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2018, o 22:40 
Offline
Użytkownik

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

Nie, mówi o tym jaką wartość ma ten konkretny element, a następne dostaną kolejne numery.
Poza tym możesz każdej przypisać taki numer jaki Ci pasuje. I taki jaki potrzebujesz.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2018, o 22:41 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

Ale czy zmienna obroty będzie zainicjalizowana stop czyli 1 to ona zawsze będzie miała w sobie tą 1?
Zmienną pod typem wyliczeniowym inicjalizujemy tylko raz i ona się nie zmienia?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lut 2018, o 22:43 
Offline
Użytkownik

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

elektronikq napisał(a):
Ale czy zmienna obroty będzie zainicjalizowana stop czyli 1 to ona zawsze będzie miała w sobie tą 1?
Zmienną pod typem wyliczeniowym inicjalizujemy tylko raz i ona się nie zmienia?

Z tego co mi wiadomo to tylko raz.
Generalnie stosuje się go dla zwiększenia czytelności programu.

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lut 2018, o 14:57 
Offline
Użytkownik

Dołączył(a): 01 lis 2015
Posty: 129
Pomógł: 0

MirkoT napisał(a):
Nie, mówi o tym jaką wartość ma ten konkretny element, a następne dostaną kolejne numery.
Poza tym możesz każdej przypisać taki numer jaki Ci pasuje. I taki jaki potrzebujesz.


Jakie numer ma konkretny element to zależy od wpisania w nawias klamrowy i ewentualnego samego przypisania. To jest jasne. Natomiast mi bardziej chodzi o zmienną pod enum, np. zmienna obroty = stop. Przypisujemy tam 1. I zawsze będzie tam jedynka?
Czy my pod typem enum możemy sobie kilka zmiennych powołać?
np. obroty1=stop
obroty2=lewo
obroty3=prawo
?
A czy musimy powoływać jakąś zmienną? Zmienną możemy sobie deklarować na początku i potem przypisywać jej zmienne z nawiasów {}?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lut 2018, o 18:02 
Offline
Użytkownik

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

elektronikq napisał(a):
MirkoT napisał(a):
Nie, mówi o tym jaką wartość ma ten konkretny element, a następne dostaną kolejne numery.
Poza tym możesz każdej przypisać taki numer jaki Ci pasuje. I taki jaki potrzebujesz.


Jakie numer ma konkretny element to zależy od wpisania w nawias klamrowy i ewentualnego samego przypisania. To jest jasne. Natomiast mi bardziej chodzi o zmienną pod enum, np. zmienna obroty = stop. Przypisujemy tam 1. I zawsze będzie tam jedynka?
Czy my pod typem enum możemy sobie kilka zmiennych powołać?
np. obroty1=stop
obroty2=lewo
obroty3=prawo
?
A czy musimy powoływać jakąś zmienną? Zmienną możemy sobie deklarować na początku i potem przypisywać jej zmienne z nawiasów {}?

To jest tak jak z każdą inną zmienną.
Możesz ich powołać tyle ile potrzebujesz. Jeśli potrzeba więcej niż jedna to będzie ich 2, 5 czy 10.
A wartość przypisujesz taką jaka w danej chwili wynika z logiki i algorytmu programu.
Raz to będzie stop, raz lewo, a w innym momencie działania programu znów stop czy za chwilę prawo.

_________________
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: 18 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


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