Skocz do zawartości

Programowanie sekwencji ruchów manipulatora


Spwrt

Pomocna odpowiedź

To że działa o niczym nie świadczy - pierwsza sprawa, to pomyśl jak zastąpić while przez if i dlaczego to ważne.

Jak już to zrobisz to popatrz na kod i zauważ że nie zwracasz wartości z funkcji jeśli warunek nie jest spełniony.

[ Dodano: 25-04-2018, 15:37 ]

Poza tym zmieniłeś układ programu - miał być tylko jeden delay i to w pętli głównej.

Link do komentarza
Share on other sites

Oczywiście jest babol jak stąd do Miami - ale po kiego grzyba przejmować się ostrzeżeniami kompilatora, najlepiej je wyłączyć i udawać że się jest mądry

Tymczasem porządny kompilator ustawiony na naksymalną optymalizację (a tak jest ustawiony w Arduini IDE) wywali tę funkcję do kosza razem z jej wywołaniem.

Do autora: pomyśl dlaczego.

@Elvis: nie podpowiadaj 😉

Link do komentarza
Share on other sites

Jezu, nie mam pojęcia jak to zrobić naprawdę próbuje i próbuje i nie wiem, zrobiłem takie coś ale to się nie trzyma kupy, jak ma wyglądać ten kod ? w loopie ma być tylko funkcja i delay ?

A funkcja ma za zadanie ruszaniem wszystkich 6 serw czy tylko jednego, bo juz serio się zamotałem i nie wiem gdzie jest ten cholerny błąd.

int funkcja()
{
for(int pozycja=0;pozycja < 100;pozycja++)
{
if(pozycja <60)
serwomechanizm_6.write(pozycja);
if(pozycja < 100)
serwomechanizm_5.write(pozycja)
}
void loop()
{
funkcja();
delay(25);
}

[ Dodano: 27-04-2018, 12:01 ]

Elvis, pomożesz?

Link do komentarza
Share on other sites

Teraz wygląda to dużo gorzej. Chodziło mi o poprawienie tej wcześniejszej wersji z 1 serwem. Dodawanie kolejnych to późniejszy etap. Coś mnie-więcej takiego:

#include <Servo.h> //Biblioteka

Servo serwomechanizm_6;// Odwołanie do serwa nr 6
int pozycja_6 = 0;

void setup()
{
 Serial.begin(9600);
 serwomechanizm_6.attach(11); // serwo nr 6 podłączone do pinu 11
}

int funkcja_zwracajaca_pozycje_serwa_6()
{
 if (pozycja_6 < 180)
 {
   pozycja_6++;
   Serial.print(pozycja_6, DEC); // Dla zobrazowania czy pętla działa poprawnie
   Serial.println("[pozycja_6]\t");
 }
 return pozycja_6;
}

void loop() 
{
 pozycja_6 = funkcja_zwracajaca_pozycje_serwa_6();
 serwomechanizm_6.write(pozycja_6);
 delay(50);
}

Starałem się trochę poformatować kod - to poprawia czytelność. Zamiast while wstawiłem if - ale nadal nie jestem pewien czy rozumiesz czym to się różni.

No i return jest zawsze wywoływany, żeby funkcja zwracała coś sensownego.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.