Skocz do zawartości

Programowanie sekwencji ruchów manipulatora


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.

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 😉

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?

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.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...