Miczki16 Napisano Luty 5, 2022 Udostępnij Napisano Luty 5, 2022 (edytowany) Dzień dobry, mam pytanie czy można jakoś skrócić ten program? #include <Servo.h> Servo top; Servo bottom; Servo right; Servo left; int pos[3]; unsigned long oldTimer[1]; void setup() { pos[0]=30; pos[1]=90; pos[2]=20; pos[3]=90; top.attach(5); bottom.attach(9); right.attach(10); left.attach(6); } void loop() { top.write(pos[0]); bottom.write(pos[1]); right.write(pos[2]); left.write(pos[3]); delay(1000); cz1: // jedź unsigned long timer1 = millis(); if(timer1 - oldTimer[0] >= 10) { oldTimer[0] = timer1; top.write(pos[0]); bottom.write(pos[1]); left.write(pos[3]); pos[0]++; pos[1]++; pos[3]++; if(pos[0] == 100) top.detach(); if(pos[1] == 180) {top.attach(5); pos[0]=100; pos[1]=180; pos[3]=100; goto cz2;} if(pos[3] == 100) left.detach(); } goto cz1; cz2: // do przodu unsigned long timer2 = millis(); if(timer2 - oldTimer[0] >= 10) { oldTimer[0] = timer2; right.write(pos[2]); pos[2]++; if(pos[2] == 70) {pos[2]=70; goto cz3;} } goto cz2; cz3: // chwyć unsigned long timer3 = millis(); if(timer3 - oldTimer[0] >= 15) { oldTimer[0] = timer3; top.write(pos[0]); pos[0]--; if(pos[0] == 40) {pos[0]=40; goto cz4;} } goto cz3; cz4: // do tyłu unsigned long timer4 = millis(); if(timer4 - oldTimer[0] >= 10) { oldTimer[0] = timer4; right.write(pos[2]); pos[2]--; if(pos[2] == 20) {pos[2]=20; right.detach(); goto cz5;} } goto cz4; cz5: // obrót o 180 unsigned long timer5 = millis(); if(timer5 - oldTimer[0] >= 10) { oldTimer[0] = timer5; bottom.write(pos[1]); pos[1]--; if(pos[1] == 0) {pos[1]=0; right.attach(10); goto cz6;} } goto cz5; cz6: // do przodu unsigned long timer6 = millis(); if(timer6 - oldTimer[0] >= 10) { oldTimer[0] = timer6; right.write(pos[2]); pos[2]++; if(pos[2] == 70) {pos[2]=70; goto cz7;} } goto cz6; cz7: // puść unsigned long timer7 = millis(); if(timer7 - oldTimer[0] >= 15) { oldTimer[0] = timer7; top.write(pos[0]); pos[0]++; if(pos[0] == 100) {pos[0]=100; goto cz8;} } goto cz7; cz8: // do tyłu unsigned long timer8 = millis(); if(timer8 - oldTimer[0] >= 10) { oldTimer[0] = timer8; right.write(pos[2]); pos[2]--; if(pos[2] == 20) {pos[2]=20; goto cz9;} } goto cz8; cz9: // do przodu; unsigned long timer9 = millis(); if(timer9 - oldTimer[0] >= 10) { oldTimer[0] = timer9; right.write(pos[2]); pos[2]++; if(pos[2] == 70) {pos[2]=70; goto cz10;} } goto cz9; cz10: // chwyć unsigned long timer10 = millis(); if(timer10 - oldTimer[0] >= 15) { oldTimer[0] = timer10; top.write(pos[0]); pos[0]--; if(pos[0] == 40) {pos[0]=40; goto cz11;} } goto cz10; cz11: // do tyłu unsigned long timer11 = millis(); if(timer11 - oldTimer[0] >= 10) { oldTimer[0] = timer11; right.write(pos[2]); pos[2]--; if(pos[2] == 20) {pos[2]=20; goto cz12;} } goto cz11; cz12: // obrót do 0 unsigned long timer12 = millis(); if(timer12 - oldTimer[0] >= 10) { oldTimer[0] = timer12; bottom.write(pos[1]); pos[1]++; if(pos[1] == 180) {pos[1]=180; goto cz13;} } goto cz12; cz13: // do przodu unsigned long timer13 = millis(); if(timer13 - oldTimer[0] >= 10) { oldTimer[0] = timer13; right.write(pos[2]); pos[2]++; if(pos[2] == 70) {pos[2]=70; goto cz14;} } goto cz13; cz14: // puść unsigned long timer14 = millis(); if(timer14 - oldTimer[0] >= 15) { oldTimer[0] = timer14; top.write(pos[0]); pos[0]++; if(pos[0] == 100) {pos[0]=100; goto cz15;} } goto cz14; cz15: // do tyłu unsigned long timer15 = millis(); if(timer15 - oldTimer[0] >= 10) { oldTimer[0] = timer15; right.write(pos[2]); pos[2]--; if(pos[2] == 20) {pos[2]=20; goto cz16;} } goto cz15; cz16: // do przodu unsigned long timer16 = millis(); if(timer16 - oldTimer[0] >= 10) { oldTimer[0] = timer16; right.write(pos[2]); pos[2]++; if(pos[2] == 70) {pos[2]=70; goto cz17;} } goto cz16; cz17: // chwyc unsigned long timer17 = millis(); if(timer17 - oldTimer[0] >= 15) { oldTimer[0] = timer17; top.write(pos[0]); pos[0]--; if(pos[0] == 40) {pos[0]=40; goto cz18;} } goto cz17; cz18: // do tyłu unsigned long timer18 = millis(); if(timer18 - oldTimer[0] >= 10) { oldTimer[0] = timer18; right.write(pos[2]); pos[2]--; if(pos[2] == 20) {pos[2]=20; goto cz5;} } goto cz18; } Edytowano Luty 7, 2022 przez Gieneq Cytuj Link do komentarza Share on other sites More sharing options...
99teki Luty 7, 2022 Udostępnij Luty 7, 2022 - goto <etykieta>, co to za język, Pascal ? Cytuj Link do komentarza Share on other sites More sharing options...
Miczki Luty 7, 2022 Udostępnij Luty 7, 2022 C++ Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 7, 2022 Udostępnij Luty 7, 2022 (edytowany) 6 minut temu, 99teki napisał: - goto <etykieta>, co to za język, Pascal ? Normalnie na Ardu tego mozna uzywac, ale raczej wszyscy odradzaja bo ponoc wiecej to problemu robi niz pomaga...zwykle C to ma.. Co do skrocenia kodu to widze ze duzo tablic uzywasz ze "sztywnymi" indeksami...jesli sie da to mozna uzyc petli for i przewinac np. 5 razy to samo zmieniajac indeks i juz bedzie krocej.. Edytowano Luty 7, 2022 przez farmaceuta 1 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
Miczki Luty 7, 2022 Udostępnij Luty 7, 2022 (edytowany) Ok, dzięki za odpowiedź, spróbuję i dam znać. Miłego dnia. Edytowano Luty 7, 2022 przez Miczki Cytuj Link do komentarza Share on other sites More sharing options...
Miczki16 Luty 7, 2022 Autor tematu Udostępnij Luty 7, 2022 15 minut temu, farmaceuta napisał: Normalnie na Ardu tego mozna uzywac, ale raczej wszyscy odradzaja bo ponoc wiecej to problemu robi niz pomaga...zwykle C to ma.. Co do skrocenia kodu to widze ze duzo tablic uzywasz ze "sztywnymi" indeksami...jesli sie da to mozna uzyc petli for i przewinac np. 5 razy to samo zmieniajac indeks i juz bedzie krocej.. Dzięki wszystkim za odpowiedź. Spróbuję coś wymyślić z skróceniem programu. Czym można w takim razie zastąpić instrukcję goto? Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 7, 2022 Udostępnij Luty 7, 2022 9 minut temu, Miczki16 napisał: Czym można w takim razie zastąpić instrukcję goto? Nie uzywaniem jej...😉 Tak musisz rozplanowac kod zeby Ci to nie bylo potrzebne...kod leci z gory do dolu i tak piszesz zeby dobrze bylo ..oczywiscie mozesz tworzyc funkcje, uzywac takich slow jak "return"break"continue"...to duzo upraszcza...a co ten kod wogole robic ma?? Cytuj Link do komentarza Share on other sites More sharing options...
Miczki16 Luty 7, 2022 Autor tematu Udostępnij Luty 7, 2022 1 minutę temu, farmaceuta napisał: Nie uzywaniem jej...😉 Tak musisz rozplanowac kod zeby Ci to nie bylo potrzebne...kod leci z gory do dolu i tak piszesz zeby dobrze bylo ..oczywiscie mozesz tworzyc funkcje, uzywac takich slow jak "return"break"continue"...to duzo upraszcza...a co ten kod wogole robic ma?? Program ma sterować serwami napędzającymi robota. Robot ma wykonywać zaprogramowane ruchy. Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 7, 2022 Udostępnij Luty 7, 2022 3 minuty temu, Miczki16 napisał: Program ma sterować serwami napędzającymi robota. Robot ma wykonywać zaprogramowane ruchy. Ruchy maja byc plynne czy dynamiczne? Rozumiem ze o jakies okreslone czasy tak...i tak w kolko? Cytuj Link do komentarza Share on other sites More sharing options...
_LM_ Luty 7, 2022 Udostępnij Luty 7, 2022 Wywalić etykiety, tablicować warunki, użyć funkcji zamiast makaronu. Będę miał chwilę to zrobię przykład. Cytuj Link do komentarza Share on other sites More sharing options...
Miczki16 Luty 7, 2022 Autor tematu Udostępnij Luty 7, 2022 1 minutę temu, farmaceuta napisał: Ruchy maja byc plynne czy dynamiczne? Rozumiem ze o jakies okreslone czasy tak...i tak w kolko? Ruchy mają być płynne i powtarzać sie. Cytuj Link do komentarza Share on other sites More sharing options...
Miczki16 Luty 7, 2022 Autor tematu Udostępnij Luty 7, 2022 1 minutę temu, _LM_ napisał: Wywalić etykiety, tablicować warunki, użyć funkcji zamiast makaronu. Będę miał chwilę to zrobię przykład. Ok, dzięki 🙂. Bym był wdzięczny za przykład. Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 7, 2022 Udostępnij Luty 7, 2022 1 minutę temu, Miczki16 napisał: Ruchy mają być płynne i powtarzać sie. Hmm...mam taki przyklad do led na millis() dowolna ilosc led/interwalow i po niewielkich modyfikacjach bylo by dla Ciebie...tylko ta plynnosc...jesli serwa ruszaja sie pojedynczo to super, jesli nie to trzeba by do tablicy wrzucic pojedyncze wartosci polozenia serwa a to zezre troche ramu... Cytuj Link do komentarza Share on other sites More sharing options...
Belferek Luty 7, 2022 Udostępnij Luty 7, 2022 Przebieg Twojego programu sterowany jest czasem, może więc to by się przydało: https://starter-kit.nettigo.pl/2016/04/biblioteka-timers-16-4-0/ Cytuj Link do komentarza Share on other sites More sharing options...
Miczki16 Luty 7, 2022 Autor tematu Udostępnij Luty 7, 2022 2 minuty temu, farmaceuta napisał: Hmm...mam taki przyklad do led na millis() dowolna ilosc led/interwalow i po niewielkich modyfikacjach bylo by dla Ciebie...tylko ta plynnosc...jesli serwa ruszaja sie pojedynczo to super, jesli nie to trzeba by do tablicy wrzucic pojedyncze wartosci polozenia serwa a to zezre troche ramu... Problem w tym, że serwa poruszają się kilka na raz. 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!