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

Masz problem, z którym nie możesz sobie poradzić? Pisz śmiało!
ODPOWIEDZ
marcelh2o
Majsterkowicz
Posty: 103
Rejestracja: 8 wrz 2013, 11:18

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

Post autor: marcelh2o » 30 sie 2016, 16:29

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 w funkcji loop() odowałać się do innych pętli. Jak to ustawić? Może są jakieś spece od joysticków Big Grin dodam że moja funkcja loop jest totalnie źle napisana więc do zmiany :p

Kod: Zaznacz cały

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
}

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


marcelh2o
Majsterkowicz
Posty: 103
Rejestracja: 8 wrz 2013, 11:18

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

Post autor: marcelh2o » 30 sie 2016, 17:07

coś takiego? :D chyba nie ogarnąłem:p


void loop()
{
val=analogRead(joystick_x);
val=map(val,0,1023,101,200);
forward(0)
backward(1023)
stop(509)


}
marcelh2o
Majsterkowicz
Posty: 103
Rejestracja: 8 wrz 2013, 11:18

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

Post autor: marcelh2o » 30 sie 2016, 17:33

Niestety też nie działa.
napisałem coś takiego jeszcze ale też nie poszło:
void loop()
{
val=analogRead(joystick_x);

if(val==1023)
{

backward(sspeed);

}

Wydaje mi się że to musi być coś w stylu "Jeśli wartość z analog 0 == 1023 to wykonaj backward() a jeśli analog 0 ==0 to forward"
a kod pisałem sam na bazie kodów z siecii i książki Arduino w akcji. Dopiero się uczę.

A i jeszcze co do zmiany prędkości CHYBA jest funkcja map. Czyli val = map(val, 0, 1023, 0, 100) ale ni cholere nie wiem co oznaczają te liczby. Mogę się domyślać że pierwsze dwie to zakres joysticka ale w sumie nie wiem:p
marcelh2o
Majsterkowicz
Posty: 103
Rejestracja: 8 wrz 2013, 11:18

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

Post autor: marcelh2o » 31 sie 2016, 11:25

Dzięki za te słowa krytki, chociaż robie to od kilkunastu dni to liczyłem na więcej wyrozumienia. Poradziłęm już sobie z tym kodem i wszystko działa mimo że tutaj i na innym forum pisaliście mi że tego się tak "nie da" zrobić. Serio nie wiem po co tyle goryczy :) w każdym razie dzięki za pomoc. Chce się uczyć ale nie znam dobrych źródeł (poza kanałem pasja programowania c++) żeby uczyć się tego języka, jak pisałem na forach jakie książki polecacie to jest cisza. Możecie sobie hejtować ja i tak się tego naucze tylko potrzebuje czasu. Pozdrawiam i dzięki jeszcze raz za kilka objaśnień na pewno mi się przydadzą.
Awatar użytkownika
Slawek
Starszy majsterkowicz
Posty: 448
Rejestracja: 29 mar 2015, 15:05

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

Post autor: Slawek » 31 sie 2016, 13:01

I tak trzymaj , nie poddaj sie :)
Awatar użytkownika
viciu
Młodszy majsterkowicz
Posty: 4
Rejestracja: 11 gru 2015, 13:29
Kontakt:

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

Post autor: viciu » 31 sie 2016, 14:09

marcelh2o pisze: void loop()
{
val=analogRead(joystick_x);

if(val==1023)
{

backward(sspeed);

}
Generalnie dobrze kombinowałeś. map - zgadłeś do czego służy, map(x,0,1023,0,100) zwróci liczbę z przedziału 0-100 w zależności jak x ma się do przedziału 0-1023.

Ale tutaj map nie był potrzebny, zamiast val==1023 musisz użyć np val > 900 Czemu? Bo rzadko analogRead zwróci Ci skrajne wartości, zwłaszcza ze masz jeszcze rezystor z dzielnika napięcia. Musisz dobrać wartość eksperymentalnie czy to będzie 800 czy 900 czy jeszcze coś innego. Coś jak:
if (val > 800 ) { forward();};
if (val <= 800 && val > 300) { stop();}
if (val <=300) {backward();}

Zwróć tylko uwage na to by pokryć dokładnie zakres, czyli ostre/nieostre nierówności. Jak zrobisz val > 800 w jednym if a w drugim val < 800 to żaden if 'nie odpali' jak będzie val dokładnie 800.
Awatar użytkownika
Slawek
Starszy majsterkowicz
Posty: 448
Rejestracja: 29 mar 2015, 15:05

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

Post autor: Slawek » 31 sie 2016, 16:23

Krapi, niestety nie kazdy ma taka wiedze jak ty a jakos moze kiedys do tego dojdzie, albo i nie, ale kazdy z nas zaczynal od zera i nikt sie nie urodzil z zaimplementowanym C++ (a szkoda :D) - trzeba dac szanse :)
marcelh2o
Majsterkowicz
Posty: 103
Rejestracja: 8 wrz 2013, 11:18

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

Post autor: marcelh2o » 31 sie 2016, 20:35

Karpi musisz być bardzo sfrustrowaną osobą w życiu codziennym skoro musisz się tak spinać, a ja tylko poprosiłem o pomoc nie o GOTOWCA bo chce się czegoś nauczyć jak pytam o książki to jest cisza ale już sobie coś tam ogarnąłem. 3 lata temu założyłem konto na majsterkowo(jak kupiłem arduino i poźniej długo leżało w szufladzie bo poświęciłem się innej branży i teraz chce wrócić), a od kilkunastu dni zacząłem cokolwiek z programowania. No ale widze że poza niesamowitymi umiejętnościami koderskimi jesteś także jasnowidzem :)
podpowiedź 3: co robi w głównej pętli linijka "speed"? (przecież program się nawet nie skompiluje)
PS. proszę nie odpisywać - szkoda wątku, a i ja z osobami, które kłamią w żywe oczy nie będę dyskutował
Może warto coś wziąć na pamięć, skoro najpierw piszesz że mi się nie skompiluje, a później nazywasz mnie kłamcą bo napisałem że Ty napisałeś że nie zadziała....

Ogólnie dzięki Ci za pomoc bo gdyby nie Ty to bym tego kodu nie napisał, szkoda tylko że błędnie interpretujesz to co chciałem uzyskać pisząc ten temat.(chciałem pomoc w jednej pętli, wskazówki, a nie napisania gotowca) Troche przykre że z góry wrzucasz mnie do worka z innymi ze słomianym zapałem i jeszcze nazywasz kłamcą mimo że wyżej pokazałem że jednak miałem racje. W przyszłości jeszcze pokażę że potrafię coś zrobić i się tym podzielę na forum. Temat skończony.
Sławek dzięki za wsparcie.
Viciu dokładnie tak to zrobiłem :)
ODPOWIEDZ

Strony partnerskie: