Strona 1 z 1
Potrzebna pomoc przy "prostym" kodzie
: 16 lis 2019, 13:39
autor: maestro192
Cześć
Potrzebuje pomocy przy napisaniu kodu
Mam arduino mega 2560 i ramps 1.6 do tego stepstick a4988, nema17
Potrzebuję żeby silniczki wykonywały taką "sekwencję" pracy w kółko
Używane osie X,Y
1.Zaczyna Silnik osi Y obrót o np. 200 kroków, dochodzi do krańcówki i po jej wciśnieciu od razu wraca o 200 kroków po tym sekunda przerwy
2. Uruchamia się silnik osi X i też obraca się o 200 kroków, dochodzi do krańcówki i wraca o taką samą ilość kroków
3. Gdy silniczki wykonają te ruchy to sekunda przerwy i powrót do punktu 1 i tak ciągle
Z góry dziękuję i mam nadzieję że zrozumiale napisałem to wszystko
Re: Potrzebna pomoc przy "prostym" kodzie
: 16 lis 2019, 13:59
autor: FlameRunner
Nie rozumiem. Ma na początku zrobić dokładnie 200 kroków, czy dojechać do krańcówki?
Re: Potrzebna pomoc przy "prostym" kodzie
: 16 lis 2019, 14:04
autor: maestro192
W sumie tak źle napisałem. Dochodzi do krańcówki i od razu wraca o te 200 kroków
Re: Potrzebna pomoc przy "prostym" kodzie
: 16 lis 2019, 15:20
autor: dziobu
Ale chodzi o gcode czy o kod dla Arduino?
Re: Potrzebna pomoc przy "prostym" kodzie
: 16 lis 2019, 15:38
autor: dziobu
Ależ mi się nic nie chce...
Tak to może wyglądać:
linie musisz sobie uzupełnić.
Kod: Zaznacz cały
//..........................................
// stałe
// do pracy
const int IleKrokow_X = 200;
const int IleKrokow_Y = 200;
//..........................................
//..........................................
// sprzęt
// deklaracja silnika (rpm i linie)
int Stepper_X_Dir = 2;
int Stepper_X_Step = 3;
int Stepper_Y_Dir = 4;
int Stepper_Y_Step = 5;
// linie z krańcówkami
int EndStop_X = 13;
int EndStop_Y = 14;
//..........................................
//..........................................
// init
void setup() {
pinMode(Stepper_X_Dir, OUTPUT);
pinMode(Stepper_X_Step, OUTPUT);
pinMode(Stepper_Y_Dir, OUTPUT);
pinMode(Stepper_Y_Step, OUTPUT);
digitalWrite(Stepper_X_Dir, LOW);
digitalWrite(Stepper_Y_Dir, LOW);
pinMode(EndStop_X, INPUT_PULLUP);
pinMode(EndStop_Y, INPUT_PULLUP);
}
//..........................................
//..........................................
// zmienne
int pozycja = 0; // tymczasowe do liczenia kroków
int algorytm_poz = 0; // początkowa pozycja algroytmu pracy
//..........................................
//..........................................
// pętla
// rozbijam pracę bo OIDW z loopa trzeba wychodzić; inaczej było by znacznie prościej
void loop() {
switch(algorytm_poz) {
//.........................................
case 0: // Y - jazda do krańcówki
if(digitalRead(EndStop_Y) == LOW) {
// jest krańcówka
algorytm_poz++; // następny krok
pozycja = IleKrokow_Y; // tyle do przejechania
digitalWrite(Stepper_Y_Dir, HIGH); // kierunek kolejnego ruchu
break;
}
// nie ma krańcówki
digitalWrite(Stepper_Y_Step, LOW);
digitalWrite(Stepper_Y_Step, HIGH);
break;
//.........................................
//.........................................
case 1: // Y - odjazd o ileś krokow
if(pozycja > 0) {
digitalWrite(Stepper_Y_Step, LOW);
digitalWrite(Stepper_Y_Step, HIGH);
pozycja--;
} else {
algorytm_poz++; // następny krok algroytmu
digitalWrite(Stepper_Y_Dir, LOW); // kierunek kolejnego ruchu
}
break;
//.........................................
//.........................................
case 2: // czekam 1 s
delay(1000);
algorytm_poz++;
break;
//.........................................
//.........................................
case 3: // X - jazda do krańcówki
if(digitalRead(EndStop_X) == LOW) {
// jest krańcówka
algorytm_poz++; // następny krok
pozycja = IleKrokow_X; // tyle do przejechania
digitalWrite(Stepper_X_Dir, HIGH); // kierunek kolejnego ruchu
break;
}
// nie ma krańcówki
digitalWrite(Stepper_X_Step, LOW);
digitalWrite(Stepper_X_Step, HIGH);
break;
//.........................................
//.........................................
case 4: // X - odjazd o ileś krokow
if(pozycja > 0) {
digitalWrite(Stepper_X_Step, LOW);
digitalWrite(Stepper_X_Step, HIGH);
pozycja--;
} else {
algorytm_poz++; // następny krok algroytmu
digitalWrite(Stepper_X_Dir, LOW); // kierunek kolejnego ruchu
}
break;
//.........................................
//.........................................
case 5: // czekam 1 s
delay(1000);
algorytm_poz = 0; // algroytm od początku
break;
//.........................................
}
}
//..........................................
Jeśli z jakiegoś powodu trzeba użyć biblioteki Stepper.h to kod będzie taki:
Kod: Zaznacz cały
#include <Stepper.h>
//..........................................
// stałe
// do pracy
const int IleKrokow_X = 200;
const int IleKrokow_Y = 200;
//..........................................
//..........................................
// sprzęt
// deklaracja silnika (rpm i linie)
Stepper myStepper_X(100, 2, 3, 4, 5);
Stepper myStepper_Y(100, 6, 7, 8, 9);
// linie z krańcówkami
int EndStop_X = 13;
int EndStop_Y = 14;
//..........................................
//..........................................
// init
void setup() {
pinMode(EndStop_X, INPUT_PULLUP);
pinMode(EndStop_Y, INPUT_PULLUP);
}
//..........................................
//..........................................
// zmienne
int pozycja = 0; // tymczasowe do liczenia kroków
int algorytm_poz = 0; // początkowa pozycja algroytmu pracy
//..........................................
//..........................................
// pętla
// rozbijam pracę bo OIDW z loopa trzeba wychodzić; inaczej było by znacznie prościej
void loop() {
switch(algorytm_poz) {
//.........................................
case 0: // Y - jazda do krańcówki
if(digitalRead(EndStop_Y) == LOW) {
// jest krańcówka
algorytm_poz++; // następny krok
pozycja = IleKrokow_Y; // tyle do przejechania
break;
}
// nie ma krańcówki
myStepper_Y.step(-1);
break;
//.........................................
//.........................................
case 1: // Y - odjazd o ileś krokow
if(pozycja > 0) {
myStepper_Y.step(1);
pozycja--;
} else {
algorytm_poz++; // następny krok algroytmu
}
break;
//.........................................
//.........................................
case 2: // czekam 1 s
delay(1000);
algorytm_poz++;
break;
//.........................................
//.........................................
case 3: // X - jazda do krańcówki
if(digitalRead(EndStop_X) == LOW) {
// jest krańcówka
algorytm_poz++; // następny krok
pozycja = IleKrokow_X; // tyle do przejechania
break;
}
// nie ma krańcówki
myStepper_X.step(-1);
break;
//.........................................
//.........................................
case 4: // X - odjazd o ileś krokow
if(pozycja > 0) {
myStepper_X.step(1);
pozycja--;
} else {
algorytm_poz++; // następny krok algroytmu
}
break;
//.........................................
//.........................................
case 5: // czekam 1 s
delay(1000);
algorytm_poz = 0; // algroytm od początku
break;
//.........................................
}
}
//..........................................
No a jak chciałeś gcode to chyba sobie poradzisz
(tutaj tylko pętli nie zrobisz)
Re: Potrzebna pomoc przy "prostym" kodzie
: 16 lis 2019, 17:54
autor: maestro192
No dobra a jak to uruchomić na arduino i ramps ? Krańcówki mam podpięte pod minimum
Re: Potrzebna pomoc przy "prostym" kodzie
: 16 lis 2019, 19:29
autor: dziobu
A poprawiłeś nr pinów w kodzie?
Re: Potrzebna pomoc przy "prostym" kodzie
: 19 lis 2019, 11:05
autor: maestro192
Teraz jakie piny wpisać jak krancowki i silniki podłączone po ramps
Re: Potrzebna pomoc przy "prostym" kodzie
: 19 lis 2019, 15:18
autor: dziobu
No poszukaj w sieci na jakich pinach Ramps ma stepsticki. Odrobina pracy własnej nie zaszkodzi.
Z kodu Marlina 1.1.9:
Kod: Zaznacz cały
//
// Limit Switches
//
#define X_MIN_PIN 3
#ifndef X_MAX_PIN
#define X_MAX_PIN 2
#endif
#define Y_MIN_PIN 14
#define Y_MAX_PIN 15
#define Z_MIN_PIN 18
#define Z_MAX_PIN 19
//
// Z Probe (when not Z_MIN_PIN)
//
#ifndef Z_MIN_PROBE_PIN
#define Z_MIN_PROBE_PIN 32
#endif
//
// Steppers
//
#define X_STEP_PIN 54
#define X_DIR_PIN 55
#define X_ENABLE_PIN 38
#ifndef X_CS_PIN
#define X_CS_PIN 53
#endif
#define Y_STEP_PIN 60
#define Y_DIR_PIN 61
#define Y_ENABLE_PIN 56
#ifndef Y_CS_PIN
#define Y_CS_PIN 49
#endif
Ale nie mam Rampsa żeby to sprawdzić.
Potencjalnie jeszcze musisz dodać (analogicznie jak jest z DIRem i STEPami) linie Enable dla X i Y, czyli deklarację
i w procedurze
setup to enable aktywować:
Kod: Zaznacz cały
pinMode(Stepper_X_En, OUTPUT);
digitalWrite(Stepper_X_En, LOW);
Z napędem Y tak samo.
Re: Potrzebna pomoc przy "prostym" kodzie
: 19 lis 2019, 19:18
autor: maestro192
Jak ustawiam tak jak napisałeś to z silniczków idzie pisk a jak nacisnę krańcówkę od np X to przestaje piszczeć, tak samo na Y
Re: Potrzebna pomoc przy "prostym" kodzie
: 19 lis 2019, 20:35
autor: dziobu
Może jedzie za szybko.
Zmień to:
Kod: Zaznacz cały
digitalWrite(Stepper_Y_Step, LOW);
digitalWrite(Stepper_Y_Step, HIGH);
na to:
Kod: Zaznacz cały
digitalWrite(Stepper_Y_Step, LOW);
delay(1);
digitalWrite(Stepper_Y_Step, HIGH);
delay(1);
I analogicznie dla osi X.