Arduino Polska Forum

Pełna wersja: Sprawdzenie kodu
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam, to mój pierwszy post i początek z Arduino więc proszę o wyrozumiałość. 

Buduję proste jak budowa cepa urządzenie a jednak się zawiesza. 

Thumb joystick z płytką -> Pololu A-star 328PB -> ULN2003 + silnik krokowy 28BYJ-48

Silnik ma pracować w lewo i w prawo z 4 różnymi prędkościami, gdy joystick jest w pozycji domyślnej to silnik ma stać w miejscu. Niby działa ale tylko w jedną stronę, a w drugą wykonuje jeden krok i układ się zawiesza. Poniżej wklejam kod być może ktoś znajdzie w nim błąd.


Cytat:


#include <Stepper.h>

#define MOT_1 7

#define MOT_2 8

#define MOT_3 9

#define MOT_4 2

int XPIN = A2;

int steps = 2050;

Stepper motor(steps, MOT_1, MOT_3, MOT_2, MOT_4);

 

void setup() {

  pinMode(XPIN, INPUT);

  Serial.begin(9600);

}

 

void loop() {

  int axisPosition = analogRead(XPIN);

  Serial.println(axisPosition);

  if (axisPosition > 530) {

    //motor_CW(axisPosition)

    //digitalWrite(CWPIN, HIGH);

    //digitalWrite(CCWPIN, LOW);

    motor.setSpeed(5);

    motor.step(1);

    if (axisPosition > 650 && axisPosition  <= 800) {

        motor.setSpeed(7);

        motor.step(1);

    }

    if (axisPosition > 800 && axisPosition  <= 950 ) {

        motor.setSpeed(9);

        motor.step(1);

    }

    if (axisPosition > 950) {

        motor.setSpeed(14);

        motor.step(1);

    }

  }

  if (axisPosition < 510) {

    //motor_CCW(axisPosition)

    //digitalWrite(CWPIN, LOW);

    //digitalWrite(CCWPIN, HIGH);

    motor.setSpeed(5);

    motor.step(-1);

    if (axisPosition < 450 && axisPosition  >= 250 ) {

        motor.setSpeed(7);

        motor.step(-1);

    }

    if (axisPosition < 250 && axisPosition  >= 150) {

        motor.setSpeed(9);

        motor.step(-1);

    }

    if (axisPosition < 150) {

        motor.setSpeed(12);

        motor.step(-1);

    }

  }

  delay(10);
}



Sprawdź czy w ogóle silnik kręci się w drugą stronę.  Możesz też druknąć sobie na serial (ustaw na 115200) który warunek się realizuje. Polecam Ci bibliotekę AccelStepper, silnik lepiej działa jak jest hamowany i rozpędzany do zadanej prędkości płynnie.
A, i jeszcze wyjaśnię pierwsze zdanie. Z kodu jasno dla mnie wynika jak to powinno być podłączone, ale zwykle są to kolejne piny, bo łatwiej wcisnąć w uno kable obok siebie, Ty masz nagle pin 2, także może masz czeski błąd i dlatego nie działa.
Tak, silnik działa w druga stronę z innym kodem, mam zdublowane podzespoły bo buduje 2 takie urządzenia. Po podłączeniu drugiego silnika jest to samo. Co do połączenia milion razy sprawdzałem zanim tu napisałem i wszystko jest tak jak w kodzie. A z tym warunkiem na serial pokombinuje jutro, póki co dzięki.