jak powinien wyglądać program na arudino

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
marcelh2o
Majsterkowicz
Posty: 103
Rejestracja: 8 wrz 2013, 11:18

jak powinien wyglądać program na arudino

Post autor: marcelh2o » 18 sie 2016, 14:19

Cześć wszystkim :) Robię projekt (pojazd sterowany joystickiem) Mam 4 silniki i koła do nich no i ten nieszczęsny moduł joystick ( adafruit motor shiled żebym mógł sterować tymi silnikami) ale problem mam zawsze w napisaniu programu do tego. Przyznam szczerze że niby jak widze kody innych to tak mniej więcej wiem o co chodzi ale jak mam napisać kod pod swoje potrzeby no się zastanawiam czy sobie nie znaleźć innego hobby...

Widzialiście może albo sami potraficie napisać kod do takiej konstrukcji? za każdą pomoc/naprowadzenie dziękuję bo już nie wiem od czego mam zacząć.

Oczywiście chciałybym po posunięciu joysticka do przodu jechał do przodu; joy do tyłu koła do tyłu; no i skręcanie odbywało się tak że lewe koła w przód to prawe w tył i odwrotnie.
Kolejne pytanie czy lepiej zamówić adafruit motor shield czy sam mostek h TB6612 ?

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


Awatar użytkownika
ethanak
Złota rączka
Posty: 767
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: jak powinien wyglądać program na arudino

Post autor: ethanak » 18 sie 2016, 16:08

Jak powinien wyglądać program?
Po pierwsze czytelnie - musisz rozumieć wszystko co napisałeś.
Po drugie czytelnie - jeśli po roku będziesz chciał coś w programie zmienić/poprawić to nie masz się zastanawiać do czego służy zmienna x12 i co robi funkcja y1().
Po trzecie... Jak już opanujesz poprzednie to nie będziesz potrzebować pomocy.
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
marcelh2o
Majsterkowicz
Posty: 103
Rejestracja: 8 wrz 2013, 11:18

Re: jak powinien wyglądać program na arudino

Post autor: marcelh2o » 18 sie 2016, 19:34

A możecie polecić jakąś książke, w której będą jakieś praktyczne informacje dla mnie? bo dużo różnych książek miałęm w ręku dotyczących języka C, avr'ów i innych tego typu no ale z żadnej nie skorzystałem w swoim projekcie. Jakby była jakaś książka, w której jest coś o mostkach h, silnikach i nrf24l01 to już by było dla mnie coś.
marcelh2o
Majsterkowicz
Posty: 103
Rejestracja: 8 wrz 2013, 11:18

Re: jak powinien wyglądać program na arudino

Post autor: marcelh2o » 20 sie 2016, 18:25

ok widzę że nie znacie takich książek :/ znalazłem taki kod w internecie ale działa mi inaczej niż autorowi. Autorowi działa tak że jak przesunie joy w prawo to silnik kręci się w prawo, a jak w lewo to w lewo. Mi działa to w ten sposób że po wgraniu programu silnik zaczyna się kręcić jak wcisne w prawo to kręci się jeszcze szybciej, a jak w lewo to nie kręci się wogóle. Jak poprzestawiać te cyferki żeby było dobrze? Dodam że odczyt z serialu dla samego Joysticka to : W górę 0, w dół 1023, a w pozycji neutralnej ma 509. Próbowałem już różnych kombinacji ale silnik tylko piszczał albo tylko się kręcił nie wem jak to ugryźć

Kod: Zaznacz cały

const int joystick = A0;
int odczyt1; 
int odczyt2;
int mostekprawo = 9;
int mosteklewo = 10;

void setup() {                
  pinMode(mostekprawo, OUTPUT); 
  pinMode(mosteklewo, OUTPUT);
  Serial.begin(9600);
}

void loop() {

  if((analogRead(joystick))<513){
    odczyt1 = analogRead(joystick);
    odczyt1 = map(odczyt1, 511, 0, 0, 255);
    analogWrite(mostekprawo, odczyt1);
  }
  else {
    analogWrite(mostekprawo, LOW);
  }

  if((analogRead(joystick))>513){
    odczyt2 = analogRead(joystick); 
    odczyt2 = map(odczyt2, 516, 1023, 0, 255);
    analogWrite(mosteklewo, odczyt2);
  }
  else {
    analogWrite(mosteklewo, LOW);
  }
}



Monk
Młodszy majsterkowicz
Posty: 35
Rejestracja: 31 lip 2016, 23:02

Re: jak powinien wyglądać program na arudino

Post autor: Monk » 20 sie 2016, 19:39

Kod: Zaznacz cały

#define joystick  A0
#define mostekprawo 9
#define mosteklewo 10
int odczyt;

void setup()
{                
  pinMode(mostekprawo, OUTPUT); 
  pinMode(mosteklewo, OUTPUT);
  analogWrite(mosteklewo, LOW);
  analogWrite(mostekprawo, LOW);
}

void loop()
{
odczyt = analogRead(joystick);
  if(odczyt < 507)
  {
    analogWrite(mosteklewo, LOW);
    odczyt = map(odczyt, 506, 0, 0, 255);
    analogWrite(mostekprawo, odczyt);
  }
 else if(odczyt > 511)
  {
    analogWrite(mostekprawo, LOW);
    odczyt = map(odczyt, 512, 1023, 0, 255);
    analogWrite(mosteklewo, odczyt);
  }
  else //czyli od 507 do 511 - te "509" w pozycji "zerowej" +/- 2
  {
  analogWrite(mosteklewo, LOW);
  analogWrite(mostekprawo, LOW);
  }
}
Spróbuj coś takiego, zobaczymy czy działa, czy może też źle mostek podłączyłeś.
marcelh2o
Majsterkowicz
Posty: 103
Rejestracja: 8 wrz 2013, 11:18

Re: jak powinien wyglądać program na arudino

Post autor: marcelh2o » 21 sie 2016, 09:57

To samo się dzieje:< mostek podłączyłem tylko z jednej strony (+ zasilanie z drugiej:p)
Monk
Młodszy majsterkowicz
Posty: 35
Rejestracja: 31 lip 2016, 23:02

Re: jak powinien wyglądać program na arudino

Post autor: Monk » 21 sie 2016, 10:33

Tak samo czyli silnik startuje od razu po podłączeniu? To musi być coś źle podłączonego albo uszkodzony mostek, bo na starcie programu zatrzymuję silnik i nie ma prawa ruszyć...
Ale sprawdź jeszcze w monitorze po wgraniu tego kodu:

Kod: Zaznacz cały

#define joystick  A0
#define mostekprawo 9
#define mosteklewo 10
int odczyt;

void setup()
{                
  pinMode(mostekprawo, OUTPUT); 
  pinMode(mosteklewo, OUTPUT);
  analogWrite(mosteklewo, LOW);
  analogWrite(mostekprawo, LOW);
  Serial.begin(9600);
}

void loop()
{
odczyt = analogRead(joystick);
delay(500);
  if(odczyt < 507)
  {
    analogWrite(mosteklewo, LOW);
    odczyt = map(odczyt, 506, 0, 0, 255);
    analogWrite(mostekprawo, odczyt);
    Serial.print("LEWO: ");
    Serial.println(odczyt);
  }
 else if(odczyt > 511)
  {
    analogWrite(mostekprawo, LOW);
    odczyt = map(odczyt, 512, 1023, 0, 255);
    analogWrite(mosteklewo, odczyt);
    Serial.print("PRAWO: ");
    Serial.println(odczyt);
  }
  else //czyli od 507 do 511 - te "509" w pozycji "zerowej" +/- 2
  {
  analogWrite(mosteklewo, LOW);
  analogWrite(mostekprawo, LOW);
  Serial.println("STOP");
  }
}
I powoli przesuwaj joystickiem, bo co pół sekundy będą zbierane informacje. Zobaczysz czy przy "LEWO: " wartość idzie od 0 do 255 i tak samo czy przy "PRAWO: " idzie od 0 do 255 (od pozycji neutralnej w górę/dół), a jak zostawisz w pozycji neutralnej czy pokazuje się "STOP" w serial monitorze. Jeżeli tak się pokazuje to znaczy że mostek źle podłączony, a jak będą głupoty wyskakiwały to usunąłbym funkcję map() i zrobiłbym to zwykłymi prostymi działaniami.

P.S. Możesz też podać symbol mostka, i w razie jakby serial monitor pokazywał "dobre" wyniki to jak go podłączyłeś - ten mostek.
marcelh2o
Majsterkowicz
Posty: 103
Rejestracja: 8 wrz 2013, 11:18

Re: jak powinien wyglądać program na arudino

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

Mostek podłączyłem tak:(sorka ze brzydko ale jestem chory i ledwo odpalam mózg:p) Dodam jeszcze że próbowałem pin 1 podpiąć do 5v i tez źle działało:/ @EDIT ! właśnie zauważyłem że w kodzie były zapisane piny 9 i 10, a nie 8 i 9. Teraz wszystko śmiga jak powinno bardzo dziękuję Ci za pomoc i poświęcony czas :)
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
marcelh2o
Majsterkowicz
Posty: 103
Rejestracja: 8 wrz 2013, 11:18

Re: jak powinien wyglądać program na arudino

Post autor: marcelh2o » 29 sie 2016, 19:47

Mam jeszcze takie pytanie. Dołączyłem drugi silnik do tego mostka H i w kodzie w zasadzie przekopiowałem wszystkie funkcjie 2x dla drugie silnika (LP11,LP12 to silnik lewy przód, a LT11, LT12 to Silnik lewy tył) no i niby ten pierwszy działa dobrze tak jak powinien ale ten drugi w jedną stronę w ogóle się nie kręci, a w drugą tylko w określonej pozycji joistcika (tak gdzieś w połowie w jednym z kierunków). Poniżej kod mojej fantazji :D

Kod: Zaznacz cały

#define joystick  A0
#define LP11 2
#define LP12 4
#define LT11 7
#define LT12 8

int odczyt;

void setup()
{               
  pinMode(LP11, OUTPUT);
  pinMode(LP12, OUTPUT);
  analogWrite(LP11, LOW);
  analogWrite(LP12, LOW);
  
  pinMode(LT11, OUTPUT);
  pinMode(LT12, OUTPUT);
  analogWrite(LT11, LOW);
  analogWrite(LT12, LOW);
}

void loop()
{
odczyt = analogRead(joystick);
  if(odczyt < 507)
  {
    analogWrite(LP11, LOW);
    odczyt = map(odczyt, 506, 0, 0, 255);
    analogWrite(LP12, odczyt);
    
     analogWrite(LT11, LOW);
    odczyt = map(odczyt, 506, 0, 0, 255);
    analogWrite(LT12, odczyt);
    
  }
 else if(odczyt > 511)
  {
    analogWrite(LP12, LOW);
    odczyt = map(odczyt, 512, 1023, 0, 255);
    analogWrite(LP11, odczyt);
    
    analogWrite(LT12, LOW);
    odczyt = map(odczyt, 512, 1023, 0, 255);
    analogWrite(LT11, odczyt);
  }
  else //czyli od 507 do 511 - te "509" w pozycji "zerowej" +/- 2
  {
  analogWrite(LP12, LOW);
  analogWrite(LP11, LOW);
  
  analogWrite(LT12, LOW);
  analogWrite(LT11, LOW);
  }
}
ODPOWIEDZ

Strony partnerskie: