Skocz do zawartości

Jak odnieść się z pętli loop() dd innych pętli.


Pomocna odpowiedź

Napisano

Cześć, chciałbym sterować czterema silnikami za pomocą joysticka tylko nie potrafię napisać poprawnie w funkcji loop żeby np: Jeśli joystick zostanie przesunięty w górę to odwoła się do funkcji void forward(), a jeśli w dół to do funkcji void backward().

Czyli w prostych słowach jak odnieść się z pętli loop() do innych pętli (np forward abo backward) po zmianie wartości joysticka/potencjomentru. Jak to ustawić? Może są jakieś spece od joysticków 😃

C++

const int joystick_x =0;
int val = 0;


const int motor11 = 2; //silnik lewy przód
const int motor12 = 4;

const int motor21 = 7; //silnik lewy tył
const int motor22 = 8;

const int motor31 = 12; //silnik prawy przód
const int motor32 = 13; 

const int motor41 = 3; //sinik prawy tył
const int motor42 = 6;
const int enablePin = 5; //pin do zmiany prędkości
int sspeed;
int odczyt_x;
void setup()
{
 Serial.begin(9600);
 //ustawiam silniki jako wyjścia
 pinMode(motor11, OUTPUT);
 pinMode(motor12, OUTPUT);
 pinMode(motor21, OUTPUT);
 pinMode(motor22, OUTPUT);
 pinMode(motor31, OUTPUT);
 pinMode(motor32, OUTPUT);
 pinMode(motor41, OUTPUT);
 pinMode(motor42, OUTPUT);
}

void loop()
{
 val=analogRead(joystick_x);
 val=map(val,0,1023,101,200);
 speed




}
//pętla dla pojazdu w bezruchu
void stopp()
{
 digitalWrite(motor11, LOW);
 digitalWrite(motor12, LOW);
 digitalWrite(motor21, LOW);
 digitalWrite(motor22, LOW);
 digitalWrite(motor31, LOW);
 digitalWrite(motor32, LOW);
 digitalWrite(motor41, LOW);
 digitalWrite(motor42, LOW);
}

//pętla dla pojazdu jadącego do przodu
void forward(int sspeed)
{
 digitalWrite(motor11, HIGH);
 digitalWrite(motor12, HIGH);
 digitalWrite(motor21, LOW);
 digitalWrite(motor22, LOW);
 digitalWrite(motor31, HIGH);
 digitalWrite(motor32, HIGH);
 digitalWrite(motor41, LOW);
 digitalWrite(motor42, LOW);
 analogWrite(enablePin, sspeed); //pin do zmiany prędkości
}

//pętla dla pojazdu jadącego do tyłu
void backward(int speed)
{
 digitalWrite(motor11, LOW);
 digitalWrite(motor12, LOW);
 digitalWrite(motor21, HIGH);
 digitalWrite(motor22, HIGH);
 digitalWrite(motor31, LOW);
 digitalWrite(motor32, LOW);
 digitalWrite(motor41, HIGH);
 digitalWrite(motor42, HIGH);
 analogWrite(enablePin, sspeed); //pin do zmiany prędkości
}

Przenieś deklaracje funkcji nad funkcje setup() i loop().

A działanie zależne od stanu joysticka to chyba będzie coś takiego, co?

#define JOYSTICK_ADC_CHANNEL A0
val = analogRead(JOYSTICK_ADC_CHANNEL);
if(val < 400) {
 backward(255);
} else if(val > 600) {
 forward(255);
} else {
 stop();
}

Podane progi dla ruszania są przykładowe.

No i podjąłeś jakiś wysiłek żeby spróbować znaleźć problem czy oczekujesz że zacznę z Ciebie wyciągać dodatkowe informacje?

EDIT: jak coś to zmieniłem teraz zmienną wskazującą na kanał ADC z joystick_x na JOYSTICK_ADC_CHANNEL, myślałem że pod joystick_x masz wpisany kanał ADC do którego podpiąłeś joystick. Oczywiście ustaw kanał w define tak jak masz połączenia w układzie.

Spokojnie nie czekam na gotowce, chciałbym żeby robotyka zostałą moją pasją na zawsze więc moim celem jest nauka, a na forum piszę jak już jestem w kropce.(ale czasem jak się dostanie rozwiązanie to też można się nauczyć). Ogólnie dostałem dużo hejtu na innych forach i wrzucili mnie do jednego worka z tymi co mają słomiany zapał no ale... trudno. Wypociłem coś takiego.

void loop()
{

val=analogRead(joystick_x);

if(val<400)//jeśli stan z pinu będzie mniejszy niz 400 to idz do funkcji forward
{

forward();

}

(tam wszedzie te sspeedy pousuwalem)

i tak dla backward i stopp teraz będę miał egzaminy więc będę miał troche mniej czasu ale jeszcze muszę zrobić skręcanie w lewo i w prawo jak nie zapomne to sie podziele ale to chyba i tak juz nie będzie potrzebne tutaj.

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...