radek123 Napisano Marzec 29, 2022 Udostępnij Napisano Marzec 29, 2022 Witam jestem nowym w świecie arduino i potrzebuję pomocy w jednym zagadnieniu. Zastanawia mnie jak mogę wykonać żeby servo ciągle się obracało gdy jest przycisk wciśnięty bez konieczności ciągłego jego wciskania . Oto mój kod steruje nim ramię robota i teraz gdy wcisnę przycisk obraca się servo o daną wartość w daną stronę. Dziękuję za wszelką pomoc:) #include <Keypad.h> #include <Servo.h> int pozycja = 120; int pozycja1 = 120; int pozycja2 = 120; int pozycja3 = 120; int zmiana = 5; const byte rows = 4; const byte columns = 4; char buttons[rows][columns] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowP[rows] = {13, 12, 11, 10}; byte columnsP[columns] = {9, 8, 7, 6}; Keypad pad = Keypad( makeKeymap(buttons), rowP, columnsP, rows, columns ); Servo myServo; Servo myServo1; Servo myServo2; Servo myServo3; void setup(){ Serial.begin(9600); myServo.attach(5); myServo1.attach(4); myServo2.attach(3); myServo3.attach(2); } void loop(){ char key = pad.getKey(); if(key == '1') { if (pozycja < 90) { pozycja = pozycja + zmiana; Serial.print( pozycja); myServo.write(pozycja);} } if(key == '2') { if (pozycja > 0){ pozycja = pozycja - zmiana; Serial.print(pozycja); myServo.write(pozycja); } } if(key == '4') { if (pozycja1 < 140 ){ Serial.print(pozycja1); pozycja1 = pozycja1 + zmiana ; myServo1.write(pozycja1);} } if(key == '5') { if (pozycja1 > 0){ Serial.print(pozycja1); pozycja1 = pozycja1 - zmiana; myServo1.write(pozycja1); } } if(key == '7') { if (pozycja2 < 140 ){ Serial.print(pozycja2); pozycja2 = pozycja2 + zmiana; myServo2.write(pozycja2);} } if(key == '8') { if (pozycja2 > 0){ Serial.print(pozycja2); pozycja2 = pozycja2 - zmiana; myServo2.write(pozycja2); } } if(key == '*') { if (pozycja3 < 140){ Serial.print(pozycja3); pozycja3 = pozycja3 + zmiana; myServo3.write(pozycja3); } }if(key == '0') { if (pozycja3 > 0){ Serial.print(pozycja3); pozycja3 = pozycja3 - zmiana; myServo3.write(pozycja3); } } if (pozycja1 > 140){; pozycja1 = pozycja1 - zmiana; } if (pozycja1 < 0){; pozycja1 = pozycja1 + zmiana; } if (pozycja > 95){; pozycja = pozycja - zmiana; } if (pozycja < 55 ){; pozycja = pozycja + zmiana; } if (pozycja2 > 140){; pozycja2 = pozycja2 - zmiana; } if (pozycja2 < 0){; pozycja2 = pozycja2 + zmiana; } if (pozycja3 > 60){; pozycja3 = pozycja3 - zmiana; } if (pozycja3 < 0){; pozycja3 = pozycja3 + zmiana; } } Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Marzec 30, 2022 Udostępnij Marzec 30, 2022 18 godzin temu, radek123 napisał: Zastanawia mnie jak mogę wykonać żeby servo ciągle się obracało gdy jest przycisk wciśnięty bez konieczności ciągłego jego wciskania . To najlepiej zrobic sobie jakas flage i zmieniac jej stan przycisnieciami guzika...cos takiego (pomijam poprawnosc) key = getkey() if (key == "k") { flaga = 1; } if (flaga == 1) { servo.write(pozycja) pozycja++ delay(30) } I cos jeszcze trzeba do zresetowania flag...jakas gwiazdka czy cos, ktora zatrzyma serwa Cytuj Link do komentarza Share on other sites More sharing options...
radek123 Marzec 31, 2022 Autor tematu Udostępnij Marzec 31, 2022 Czyli ten kod będzie działa, że jak ścianę przycisk to serwis będzie się kręciło do póki jego nie odcisnę czy do momentu kiedy nie ścianę go ponownie żeby się zatrzymało ? I dziękuję za odpowiedź Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Marzec 31, 2022 Udostępnij Marzec 31, 2022 (edytowany) 6 minut temu, radek123 napisał: Czyli ten kod będzie działa, że jak ścianę przycisk to serwis będzie się kręciło do póki jego nie odcisnę czy do momentu kiedy nie ścianę go ponownie żeby się zatrzymało ? Nie...ten kod dziala tak ze jak nacisniesz "k" to ten if sie wykonuje dopuki nie zresetujesz "flaga" key = getkey() if (key == "k") { flaga = !flaga; } if (flaga == 1) { servo.write(pozycja) pozycja++ delay(30) } Twraz masz tak jak pisales...naciskasz k i kreci aie, naciskasz ponownkie k i zatrzymać je serwo...i takie cos dla kazdego serwa...delay(30) decyduje o predkosci obrotu serwa Edytowano Marzec 31, 2022 przez farmaceuta Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
farmaceuta Marzec 31, 2022 Udostępnij Marzec 31, 2022 Sprawdz co zwraca funkcja jak nic nie jest wcisniete, i co zwraca gdy klawisz wcisniety dlugo...(na starcie jakis znak, wiadomo, ale co jest dalej?) Cytuj Link do komentarza Share on other sites More sharing options...
radek123 Kwiecień 5, 2022 Autor tematu Udostępnij Kwiecień 5, 2022 Przepraszam że mi zajęło tak długo na odpowiedź. Lecz mam jeszcze jedno pytanie co jeżeli chce żeby serwo obracało się tylko wtedy gdy przycisk jest wciśnięty ? Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Kwiecień 5, 2022 Udostępnij Kwiecień 5, 2022 (edytowany) bool flaga = 0; Edytowano Kwiecień 5, 2022 przez farmaceuta Cytuj Link do komentarza Share on other sites More sharing options...
radek123 Kwiecień 5, 2022 Autor tematu Udostępnij Kwiecień 5, 2022 i jeszcze jedno pytanie. Jak zadeklarować flage? Cytuj Link do komentarza Share on other sites More sharing options...
radek123 Kwiecień 5, 2022 Autor tematu Udostępnij Kwiecień 5, 2022 1 minutę temu, farmaceuta napisał: No nie wierze....jako jedyny Ci pomoglem/odpowiedzialem w temacie, podalem Ci przyklady rozwiazania, zapytalem co zwraca funkcja jak nic nie wcisniete a ty dajesz mi negatywa??? Wczesniej nie dalo aie podziekowac bo sie nie chcialo ale negatywa to juz sie nauczyles dawac?? O ty bezczelny czlowieku! Bardzo cię przepraszam przez przypadek kliknąłem przepraszam to nie byłospecjalnie Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Kwiecień 5, 2022 Udostępnij Kwiecień 5, 2022 (edytowany) No chyba ze tak...😉 Uraz mi chyba zostal po takim jednym... Edytowano Kwiecień 5, 2022 przez farmaceuta 1 Cytuj Link do komentarza Share on other sites More sharing options...
radek123 Kwiecień 5, 2022 Autor tematu Udostępnij Kwiecień 5, 2022 dziękuje za wyrozumiałość Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Kwiecień 5, 2022 Udostępnij Kwiecień 5, 2022 38 minut temu, radek123 napisał: Przepraszam że mi zajęło tak długo na odpowiedź. Lecz mam jeszcze jedno pytanie co jeżeli chce żeby serwo obracało się tylko wtedy gdy przycisk jest wciśnięty ? Tak jak pisalem, musisz sprawdzic co jest zwracane jak guzik jest caly czas wcisniety, ja tego nie wiem i doradzic Ci nie moge... Chodzi o to czy znak jest zwracany tylko raz czy ciagle, to wazna sprawa...jezeli ciagle to dobrze, jezeli jednorazowo to gorzej..trzeba wiedziec co zwraca funkcja jak nic nie jest wcisniete...serial monitor do tego sluzy.. key = getkey(); Serial.println(key); (Oczywiscie musisz w setup() wpisac Serial.begin(9600); Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Kwiecień 5, 2022 Udostępnij Kwiecień 5, 2022 Ta biblioteka zwraca zmianę stanu. 1 Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Kwiecień 5, 2022 Udostępnij Kwiecień 5, 2022 1 minutę temu, ethanak napisał: Ta biblioteka zwraca zmianę stanu. No to lipa..to chyba bez grzebania w bibliotece nie da sie zrobic tego co autor chce... Cytuj Link do komentarza Share on other sites More sharing options...
radek123 Kwiecień 5, 2022 Autor tematu Udostępnij Kwiecień 5, 2022 czyli to jest nie możliwe żeby wykonać to bez używania osobnych przycisków? Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!