• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Odwołanie się do innej funkcji w funkcji loop()

Object Storage Arubacloud
0 głosów
695 wizyt
pytanie zadane 30 sierpnia 2016 w Mikrokontrolery przez Marceltck Nowicjusz (160 p.)

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(). Jak to ustawić? Może są jakieś spece od joysticków :D

#define joystick_x A0


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()
{
odczyt_x = analogRead(joystick_x);

if(odczyt_x < 507)
{
stopp();
}
if(odczyt_x > 511)
{
  forward(sspeed);
}
}
//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
}

 

komentarz 30 sierpnia 2016 przez niezalogowany
popracuj nad wcięciami
komentarz 30 sierpnia 2016 przez Michał Kazula Pasjonat (19,540 p.)
Jaka wartość ma zmienna sspeed?
komentarz 30 sierpnia 2016 przez Marceltck Nowicjusz (160 p.)
Nie wiem jak to dokładnie wytłumaczyć ale zmienna sspeed ma być jakoś połączona z enablePin czyli z regulacją prędkości. np.: analog Write(enablePin, sspeed). Jestem początkujący w programowaniu i nie wiem jeszcze z czym to się je:p
komentarz 30 sierpnia 2016 przez Marceltck Nowicjusz (160 p.)
Wydaje mi się że kod jest bardzo czytelny poza pętlą void loop() która i tak jest zła i jest do zmiany.
1
komentarz 30 sierpnia 2016 przez Michał Kazula Pasjonat (19,540 p.)

Brak podstawowej wiedzy widzę.

Ustaw tak:

int sspeed = 20;

 

komentarz 30 sierpnia 2016 przez Marceltck Nowicjusz (160 p.)
Skoro napisałem że jestem początkujący w tych tematach to dziwne by było gdybym wszystko potrafił.

Kolega w linku poniżej też nie zadeklarował żadnej wartości do sspeed i wszstko działało więc wygląda na to że Tobie także widza uleciała.

https://majsterkowo.pl/robot-inspekcyjny-sterowany-przy-pomocy-modulow-nrf24l01/

i po trzecie jakbyś czytał ze zrozumieniem to doczytałbyś że potrzebuje pomocy w funkcji loop. Możesz sobie schować w kieszeń takie cwaniackie komentarze:)
komentarz 31 sierpnia 2016 przez Michał Kazula Pasjonat (19,540 p.)
edycja 31 sierpnia 2016 przez Michał Kazula

W zasadzie za takie potraktowanie osoby która chce Ci pokazać gdzie jest błąd oraz naprowadza Cię na rozwiązanie nie powinienem nic więcej pisać.

Roszczeniowe zachowanie dzisiejszej młodzieży (już kiedyś to pisałem) nic pozytywnego nie przyniesie ...

Wracając do mojego braku wiedzy.

  1. Nie podałeś źródła na samym początku!
  2. Łączysz w jednym kodzie dwa oddzielne kody (nadajnik oraz odbiornik) i to w dodatku nieumiejętnie!
  3. W podanym przez Ciebie źródle autor nie definiuje wartości zmiennej "sspeed" ponieważ ją przekazuje przy pomocy RF - kto ma problemy z czytaniem ze zrozumieniem przypomnij?

Nadajnik:

val_1 = analogRead(potpin_1); val_1 = map(val_1, 0, 1023, 101, 200); msg[0] = val_1; radio.write(msg, 1);  
val_2 = analogRead(potpin_2); val_2 = map(val_2, 0, 1023, 0, 100); msg[0] = val_2; radio.write(msg, 1); 
val_3 = analogRead(potpin_3); val_3 = map(val_3, 0, 1023, 201, 255); msg[0] = val_3; radio.write(msg, 1);

Odbiornik:

if (msg[0] >55 && msg[0] <100){data = msg[0]; sspeed = map(data, 100, 55, 255, 50); left(sspeed);} 

Dla utrwalenia, przypisanie wartości do zmiennej "sspeed" - odbiornik:

sspeed = map(data, 100, 55, 255, 50);

 

Może się przyda:

Arduino - Built-In Examples

Arduino - Map 

Forbot - kurs Arduino

ARDUINO - podstawy języka - funkcje

 

Przepraszam że chciałem pomóc.

 

Znalezione dzisiaj rano - link. Kolega Krapi pięknie Ci podsumował!

komentarz 31 sierpnia 2016 przez Marceltck Nowicjusz (160 p.)
Bardzo mi miło że mnie Pan odmładza do młodieży ale to Pan na początku zaczął wywyższając że nie mam podstawowej wiedzy bo fakt nie mam jej (robie to od kilkunastu dni), ale chyba zapomniał wół jak cielęciem był. Jakbym potrafił programować to bym się tutaj nie zgłaszał z takim błachym problemem. Poza tym Pański komentarz zgodnie z regulaminem nic nie wniósł do mojego problemu. Rozwiązałem sobie już samodzielnie problem i wszystko mi fajnie działa więc jednak mimo że jest Pan programistą z niesamoiwitą wiedzą nie potrafił pan mi pomóc.

Ps. dziękuje za podane linki może coś wyciągne z nich dla siebie.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 159 wizyt
pytanie zadane 19 maja 2022 w Offtop przez JacekWacekPlacek Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 114 wizyt
pytanie zadane 18 listopada 2020 w Sprzęt komputerowy przez manager96 Bywalec (2,050 p.)

92,568 zapytań

141,424 odpowiedzi

319,634 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...