Arduino steruje ploterem.
: 08 wrz 2013, 13:02
Zamieszczam skecz Arduino, sterujacy frezarka CNC.
Obsługuje kody G0,G1, oraz X,Y,Z.
Nie obsługuje jeszcze krańcówek (będzie),
oraz kodów "I" , "J", nie wiem czy będzie.
Skecz steruje wyswietlaczem LED 2 rzedowym, na którym wyswietla aktualne połozenie osi frezarki. Do przesyłania G code używam G-code sender.
Wiem że raczej sie nikomu nie przyda, ale chciałem sie pochwalić i pokazać że tez można.
#include <Stepper.h>
#include <LiquidCrystal595.h>
// initialize the library with the numbers of the interface pins + the row count
// datapin, latchpin, clockpin, num_lines
LiquidCrystal595 lcd(7,8,9);
//Inicjacja siilników krokowych
Stepper StepperX(120, 10,6); //Tu można zmienić numery portów
Stepper StepperY(120, 4,5);
Stepper StepperZ(120, 12,11);
//Zmienne
long x = 0; int y = 0 ;int a = 0 ; int b = 0 ; int c = 0 ;//Zmienna do obsługi pętli
float G = 0.00000; float X = 0.00000; float Y = 0.00000; float Z = 0.000;
//Poprzednie położenie plottera:
float OLD_G = 0.00000; float OLD_X = 0.00000; float OLD_Y = 0.00000; float OLD_Z = 0.000;
//Ilość milimetrów do pokonania w stosownych płaszczyznach.
float MM_X = 0.00000; float MM_Y = 0.00000; float MM_Z = 0.00000;
//Ilość kroków do zrobienia
float STEP_X = 0; float STEP_Y = 0; int STEP_Z = 0;
int A_1 = 0; float A = 0 ; float r = 0.000000; // Zmienne do obliczeń podzielnik i reszta
int A_2 = 0; int A_3 = 0;
int Dane = 0 ; //Nie wiem do czego
//Wielkość przesunięcia na jeden krok w milimetrach
float STEP_SIZE_X = 0.005; float STEP_SIZE_Y = 0.005; float STEP_SIZE_Z = 0.005;
void setup()
{
pinMode(13, OUTPUT);
//Inicjacja Stepperów ;L`R-
StepperX.setSpeed(30); // Prędkość obrotowa
pinMode(14,INPUT);//Pin krańcówki "X"
StepperY.setSpeed(30); // Prędkość obrotowa
pinMode(15,INPUT);//Pin krańcówki "Y"
StepperZ.setSpeed(30); // Prędkość obrotowa
pinMode(16,INPUT);//Pin krańcówki "Z"
Serial.begin(9600); //Inicjacja portu szeregowego
lcd.begin(16,2); //Inicjacja LCD
lcd.setCursor(0,0);lcd.print("START!!"); X = 0 ; Y = 0 ; Z = 0 ;//Sygnał końca inicjacji
}
void loop()
{
while (Serial.available()>0)
{
// delay(250);
while (Serial.available() >0 && Serial.peek() != 71 && Serial.peek()!= 88 && Serial.peek()!= 89 && Serial.peek()!= 90)
// Wycinanie ew. spacji
{
Serial.read() ;
}
if (Serial.available() > 0 && Serial.peek() == 71 )
{
G = (Serial.parseFloat());
}
// Wycinanie ew. spacji
while (Serial.available() >0 && Serial.peek() != 71 && Serial.peek()!= 88 && Serial.peek()!= 89 && Serial.peek()!= 90)
{
Serial.read() ;
}
if (Serial.available() > 0 && Serial.peek() == 88 )
{X = (Serial.parseFloat());
//Badanie czy są jeszcze dane do pobrania i interpretacja
}
while (Serial.available() >0 && Serial.peek() != 71 && Serial.peek()!= 88 && Serial.peek()!= 89 && Serial.peek()!= 90)
// Wycinanie ew. spacji
{
Serial.read() ;
}
if (Serial.available() > 0 && Serial.peek() == 89 )
{
Y = (Serial.parseFloat());
//Badanie czy są jeszcze dane do pobrania i interpretacja
}
while (Serial.available() >0 && Serial.peek() != 71 && Serial.peek()!= 88 && Serial.peek()!= 89 && Serial.peek()!= 90)
// Wycinanie ew. spacji
{
Serial.read() ;
}
if (Serial.available() > 0 && Serial.peek() == (90) )
{
Z = (Serial.parseFloat());
// Wycinanie ew. spacji
while (Serial.available() >0 && Serial.peek() != 71 && Serial.peek()!= 88 && Serial.peek()!= 89 && Serial.peek()!= 90)
// Wycinanie ew. spacji
{
Serial.read() ;
}
}
//Ustawienie prędkości poruszania "G"
if (G < 1){ StepperX.setSpeed(120);StepperY.setSpeed(120);StepperZ.setSpeed(120);}
// if (G > 0){StepperX.setSpeed(60);StepperY.setSpeed(60);StepperZ.setSpeed(Z15); }
if (G > 0){StepperX.setSpeed(80);StepperY.setSpeed(80);StepperZ.setSpeed(80); }
// Obliczenie odległości do pokonania w trzech płaszczyznach:
MM_X = X - OLD_X; MM_Y = Y - OLD_Y; MM_Z = Z - OLD_Z;
//Przeliczenie odległóści na kroki.
STEP_X = MM_X/STEP_SIZE_X;
STEP_Y = MM_Y/STEP_SIZE_Y;
STEP_Z = MM_Z/STEP_SIZE_Z;
Serial.print("G"); Serial.print (" ");Serial.print(G);
Serial.print(" STEP_X "); Serial.print (" ");Serial.print(STEP_X);
Serial.print(" STEP_Y "); Serial.print (" ");Serial.print(STEP_Y);
Serial.print(" STEP_Z "); Serial.print (" ");Serial.print(STEP_Z);Serial.print(" <<<<<");
//Ruch w osi "Z"
if (STEP_Z > 0){X == 0;
for (x = 0; x <= STEP_Z ; x++){
StepperZ.step(1);
}}
if (STEP_Z < 0){STEP_Z = abs(STEP_Z); X == 0;
for (x = 0; x <= STEP_Z ; x++){
StepperZ.step(-1);
}}
//UWAGA !!!! NA WARTOŚCI UJEMNE!!!!!
//Początek sterowania Silnikami krokowymi
//Obliczanie sekwencji kroków
// Gdy X = Y
//Gdy X lub Y = "0"
if (STEP_X == 0){x = 0 ;
if (STEP_Y > 0) { for ( x == 1 ; x <= STEP_Y ; x++ ){StepperY.step(1); }}
if (STEP_Y < 0) { for ( x == -1 ; x >= STEP_Y ; x--){StepperY.step(-1); }}
STEP_Y = 0;}
if (STEP_Y == 0){x = 0 ;
if (STEP_X > 0) { for ( x == 1 ; x <= STEP_X ; x++ ){StepperX.step(1); }}
if (STEP_X < 0) { for ( x == -1 ; x >= STEP_X ; x--){StepperX.step(-1); }}
STEP_X = 0;}
// Pierwsza cwiartka ukł. współrzędnych
if (STEP_X > 0 && STEP_Y > 0){STEP_X = abs(STEP_X); STEP_Y = abs(STEP_Y);
if (STEP_X == STEP_Y){ x = 0 ; for ( x == 0; x <= STEP_X ; x++){ StepperX.step(1);StepperY.step(1);}}
if (STEP_X > STEP_Y){
A_1 = STEP_X / STEP_Y ;
float A = STEP_X / STEP_Y ;
if (A_1 < A) { A_1 = A_1 + 1 ; }
r = STEP_Y - (STEP_X/A_1);
if ( r > 0){ A_2 = STEP_X / r ;
r = STEP_Y - (STEP_X/A_1) - (STEP_X/A_2) ;}
if ( r > 0){
A_3 = STEP_X / r ;
}
a = A_1 ;b = A_2 ; c = A_3;
//Wycinanie
x = 0;
for (x == 1; x <= STEP_X ; x++){ StepperX.step(1);
if (x == a ){ StepperY.step(1); a = a + A_1; }
if (x == b ){ StepperY.step(1); b = b + A_2; }
if (x == c ){ StepperY.step(1); c = c + A_3; }
}
}
if (STEP_Y > STEP_X){
A_1 = STEP_Y / STEP_X ;
float A = STEP_Y / STEP_X ;
if (A_1 < A) { A_1 = A_1 + 1 ; }
r = STEP_X - (STEP_Y/A_1);
if ( r > 0){ A_2 = STEP_Y / r ;
r = STEP_X - (STEP_Y/A_1) - (STEP_Y/A_2) ;}
if ( r > 0){
A_3 = STEP_Y / r ;
}
a = A_1 ;b = A_2 ; c = A_3;
//Wycinanie
x = 0;
for (x == 1; x <= STEP_Y ; x++){StepperY.step(1);
if (x == a ){ StepperX.step(1); a = a + A_1; }
if (x == b ){ StepperX.step(1); b = b + A_2; }
if (x == c ){ StepperX.step(1); c = c + A_3; }
}
}
}
// Druga cwiartka ukł. współrzędnych
if (STEP_X > 0 && STEP_Y < 0){STEP_X = abs(STEP_X); STEP_Y = abs(STEP_Y);
if (STEP_X == STEP_Y){ x = 0 ; for ( x == 0; x <= STEP_X ; x++){ StepperX.step(1);StepperY.step(-1);}}
if (STEP_X > STEP_Y){
A_1 = STEP_X / STEP_Y ;
float A = STEP_X / STEP_Y ;
if (A_1 < A) { A_1 = A_1 + 1 ; }
r = STEP_Y - (STEP_X/A_1);
if ( r > 0){ A_2 = STEP_X / r ;
r = STEP_Y - (STEP_X/A_1) - (STEP_X/A_2) ;}
if ( r > 0){
A_3 = STEP_X / r ;}
a = A_1 ; b = A_2 ; c = A_3;
//Wycinanie
x = 0;
for (x == 1; x <= STEP_X ; x++){ StepperX.step(1);
if (x == a ){ StepperY.step(-1); a = a + A_1; }
if (x == b ){ StepperY.step(-1); b = b + A_2; }
if (x == c ){ StepperY.step(-1); c = c + A_3; }
}
}
if (STEP_Y > STEP_X){
A_1 = STEP_Y / STEP_X ;
float A = STEP_Y / STEP_X ;
if (A_1 < A) { A_1 = A_1 + 1 ; }
r = STEP_X - (STEP_Y/A_1);
if ( r > 0){ A_2 = STEP_Y / r ;
r = STEP_X - (STEP_Y/A_1) - (STEP_Y/A_2) ;}
if ( r > 0){
A_3 = STEP_Y / r ;}
a = A_1 ;b = A_2 ; c = A_3;
//Wycinanie
x = 0;
for (x == 1; x <= STEP_Y ; x++){StepperY.step(-1);
if (x == a ){ StepperX.step(1); a = a + A_1; }
if (x == b ){ StepperX.step(1); b = b + A_2; }
if (x == c ){ StepperX.step(1); c = c + A_3; }
}
}
}
// Trzecia cwiartka ukł. współrzędnych
if (STEP_X < 0 && STEP_Y < 0){STEP_X = abs(STEP_X); STEP_Y = abs(STEP_Y);Serial.print (" X<0>Y" );
if (STEP_X == STEP_Y){ x = 0 ; for ( x == 0; x <= STEP_X ; x++){ StepperX.step(-1);StepperY.step(-1);}}
if (STEP_X > STEP_Y){
A_1 = STEP_X / STEP_Y ;
float A = STEP_X / STEP_Y ;
if (A_1 < A) { A_1 = A_1 + 1 ; }
r = STEP_Y - (STEP_X/A_1);
if ( r > 0){ A_2 = STEP_X / r ;
r = STEP_Y - (STEP_X/A_1) - (STEP_X/A_2) ;}
if ( r > 0){
A_3 = STEP_X / r ;
}
a = A_1 ;b = A_2 ; c = A_3;
//Wycinanie
x = 0;
for (x == 1; x <= STEP_X ; x++){ StepperX.step(-1);
if (x == a ){ StepperY.step(-1); a = a + A_1; }
if (x == b ){ StepperY.step(-1); b = b + A_2; }
if (x == c ){ StepperY.step(-1); c = c + A_3; }
}
}
if (STEP_Y > STEP_X){
A_1 = STEP_Y / STEP_X ;
float A = STEP_Y / STEP_X ;
if (A_1 < A) { A_1 = A_1 + 1 ; }
r = STEP_X - (STEP_Y/A_1);
if ( r > 0){ A_2 = STEP_Y / r ;
r = STEP_X - (STEP_Y/A_1) - (STEP_Y/A_2) ;}
if ( r > 0){
A_3 = STEP_Y / r ;
}
a = A_1 ;b = A_2 ; c = A_3;
//Wycinanie
x = 0;
for (x == 1; x <= STEP_Y ; x++){StepperY.step(-1);
if (x == a ){ StepperX.step(-1); a = a + A_1; }
if (x == b ){ StepperX.step(-1); b = b + A_2; }
if (x == c ){ StepperX.step(-1); c = c + A_3; }
}
}
}
// Czwarta cwiartka ukł. współrzędnych
if (STEP_X < 0 && STEP_Y > 0){STEP_X = abs(STEP_X); STEP_Y = abs(STEP_Y);Serial.print (" X<0<0Y" );
if (STEP_X == STEP_Y){ x = 0 ; for ( x == 0; x <= STEP_X ; x++){ StepperX.step(-1);StepperY.step(1);}}
if (STEP_X > STEP_Y){
A_1 = STEP_X / STEP_Y ;
float A = STEP_X / STEP_Y ;
if (A_1 < A) { A_1 = A_1 + 1 ; }
r = STEP_Y - (STEP_X/A_1);
if ( r > 0){ A_2 = STEP_X / r ;
r = STEP_Y - (STEP_X/A_1) - (STEP_X/A_2) ;}
if ( r > 0){
A_3 = STEP_X / r ;
}
a = A_1 ;b = A_2 ; c = A_3;
//Wycinanie
x = 0;
for (x == 1; x <= STEP_X ; x++){ StepperX.step(-1);
if (x == a ){ StepperY.step(1); a = a + A_1; }
if (x == b ){ StepperY.step(1); b = b + A_2; }
if (x == c ){ StepperY.step(1); c = c + A_3; }
}
}
if (STEP_Y > STEP_X){
A_1 = STEP_Y / STEP_X ;
float A = STEP_Y / STEP_X ;
if (A_1 < A) { A_1 = A_1 + 1 ; }
r = STEP_X - (STEP_Y/A_1);
if ( r > 0){ A_2 = STEP_Y / r ;
r = STEP_X - (STEP_Y/A_1) - (STEP_Y/A_2) ;}
if ( r > 0){
A_3 = STEP_Y / r ;
}
a = A_1 ;b = A_2 ; c = A_3;
//Wycinanie
x = 0;
for (x == 1; x <= STEP_Y ; x++){StepperY.step(1);
if (x == a ){ StepperX.step(-1); a = a + A_1; }
if (x == b ){ StepperX.step(-1); b = b + A_2; }
if (x == c ){ StepperX.step(-1); c = c + A_3; }
}
}
}
//Na LCD
lcd.setCursor(0,0);lcd.print(" ");lcd.setCursor(0,0);lcd.print("G "); lcd.print(G);
lcd.setCursor(8,0);lcd.print(" ");lcd.setCursor(8,0);lcd.print("X "); lcd.print(X);
lcd.setCursor(0,1);lcd.print(" ");lcd.setCursor(0,1);lcd.print("Y "); lcd.print(Y);
lcd.setCursor(8,1);lcd.print(" ");lcd.setCursor(8,1);lcd.print("Z "); lcd.print(Z);
//Zmiana pozycji parametry "nowe" na "stare"
OLD_X = X; OLD_Y = Y; OLD_Z = Z;
//Zerowanie stepperów
STEP_X = 0; STEP_Y = 0; STEP_Z = 0 ;
//Zerowanie zmiennych
A_1 = 0; A = 0 ; r = 0.0000; A_2 = 0; A_3 = 0;
x = 0; y = 0 ; a = 0 ; b = 0 ; c = 0 ;
//Na koniec inicjacja transmisji następnej linii kodu.
Serial.println("NEXT LINE");
//delay(250);
}
}
Obsługuje kody G0,G1, oraz X,Y,Z.
Nie obsługuje jeszcze krańcówek (będzie),
oraz kodów "I" , "J", nie wiem czy będzie.
Skecz steruje wyswietlaczem LED 2 rzedowym, na którym wyswietla aktualne połozenie osi frezarki. Do przesyłania G code używam G-code sender.
Wiem że raczej sie nikomu nie przyda, ale chciałem sie pochwalić i pokazać że tez można.
#include <Stepper.h>
#include <LiquidCrystal595.h>
// initialize the library with the numbers of the interface pins + the row count
// datapin, latchpin, clockpin, num_lines
LiquidCrystal595 lcd(7,8,9);
//Inicjacja siilników krokowych
Stepper StepperX(120, 10,6); //Tu można zmienić numery portów
Stepper StepperY(120, 4,5);
Stepper StepperZ(120, 12,11);
//Zmienne
long x = 0; int y = 0 ;int a = 0 ; int b = 0 ; int c = 0 ;//Zmienna do obsługi pętli
float G = 0.00000; float X = 0.00000; float Y = 0.00000; float Z = 0.000;
//Poprzednie położenie plottera:
float OLD_G = 0.00000; float OLD_X = 0.00000; float OLD_Y = 0.00000; float OLD_Z = 0.000;
//Ilość milimetrów do pokonania w stosownych płaszczyznach.
float MM_X = 0.00000; float MM_Y = 0.00000; float MM_Z = 0.00000;
//Ilość kroków do zrobienia
float STEP_X = 0; float STEP_Y = 0; int STEP_Z = 0;
int A_1 = 0; float A = 0 ; float r = 0.000000; // Zmienne do obliczeń podzielnik i reszta
int A_2 = 0; int A_3 = 0;
int Dane = 0 ; //Nie wiem do czego
//Wielkość przesunięcia na jeden krok w milimetrach
float STEP_SIZE_X = 0.005; float STEP_SIZE_Y = 0.005; float STEP_SIZE_Z = 0.005;
void setup()
{
pinMode(13, OUTPUT);
//Inicjacja Stepperów ;L`R-
StepperX.setSpeed(30); // Prędkość obrotowa
pinMode(14,INPUT);//Pin krańcówki "X"
StepperY.setSpeed(30); // Prędkość obrotowa
pinMode(15,INPUT);//Pin krańcówki "Y"
StepperZ.setSpeed(30); // Prędkość obrotowa
pinMode(16,INPUT);//Pin krańcówki "Z"
Serial.begin(9600); //Inicjacja portu szeregowego
lcd.begin(16,2); //Inicjacja LCD
lcd.setCursor(0,0);lcd.print("START!!"); X = 0 ; Y = 0 ; Z = 0 ;//Sygnał końca inicjacji
}
void loop()
{
while (Serial.available()>0)
{
// delay(250);
while (Serial.available() >0 && Serial.peek() != 71 && Serial.peek()!= 88 && Serial.peek()!= 89 && Serial.peek()!= 90)
// Wycinanie ew. spacji
{
Serial.read() ;
}
if (Serial.available() > 0 && Serial.peek() == 71 )
{
G = (Serial.parseFloat());
}
// Wycinanie ew. spacji
while (Serial.available() >0 && Serial.peek() != 71 && Serial.peek()!= 88 && Serial.peek()!= 89 && Serial.peek()!= 90)
{
Serial.read() ;
}
if (Serial.available() > 0 && Serial.peek() == 88 )
{X = (Serial.parseFloat());
//Badanie czy są jeszcze dane do pobrania i interpretacja
}
while (Serial.available() >0 && Serial.peek() != 71 && Serial.peek()!= 88 && Serial.peek()!= 89 && Serial.peek()!= 90)
// Wycinanie ew. spacji
{
Serial.read() ;
}
if (Serial.available() > 0 && Serial.peek() == 89 )
{
Y = (Serial.parseFloat());
//Badanie czy są jeszcze dane do pobrania i interpretacja
}
while (Serial.available() >0 && Serial.peek() != 71 && Serial.peek()!= 88 && Serial.peek()!= 89 && Serial.peek()!= 90)
// Wycinanie ew. spacji
{
Serial.read() ;
}
if (Serial.available() > 0 && Serial.peek() == (90) )
{
Z = (Serial.parseFloat());
// Wycinanie ew. spacji
while (Serial.available() >0 && Serial.peek() != 71 && Serial.peek()!= 88 && Serial.peek()!= 89 && Serial.peek()!= 90)
// Wycinanie ew. spacji
{
Serial.read() ;
}
}
//Ustawienie prędkości poruszania "G"
if (G < 1){ StepperX.setSpeed(120);StepperY.setSpeed(120);StepperZ.setSpeed(120);}
// if (G > 0){StepperX.setSpeed(60);StepperY.setSpeed(60);StepperZ.setSpeed(Z15); }
if (G > 0){StepperX.setSpeed(80);StepperY.setSpeed(80);StepperZ.setSpeed(80); }
// Obliczenie odległości do pokonania w trzech płaszczyznach:
MM_X = X - OLD_X; MM_Y = Y - OLD_Y; MM_Z = Z - OLD_Z;
//Przeliczenie odległóści na kroki.
STEP_X = MM_X/STEP_SIZE_X;
STEP_Y = MM_Y/STEP_SIZE_Y;
STEP_Z = MM_Z/STEP_SIZE_Z;
Serial.print("G"); Serial.print (" ");Serial.print(G);
Serial.print(" STEP_X "); Serial.print (" ");Serial.print(STEP_X);
Serial.print(" STEP_Y "); Serial.print (" ");Serial.print(STEP_Y);
Serial.print(" STEP_Z "); Serial.print (" ");Serial.print(STEP_Z);Serial.print(" <<<<<");
//Ruch w osi "Z"
if (STEP_Z > 0){X == 0;
for (x = 0; x <= STEP_Z ; x++){
StepperZ.step(1);
}}
if (STEP_Z < 0){STEP_Z = abs(STEP_Z); X == 0;
for (x = 0; x <= STEP_Z ; x++){
StepperZ.step(-1);
}}
//UWAGA !!!! NA WARTOŚCI UJEMNE!!!!!
//Początek sterowania Silnikami krokowymi
//Obliczanie sekwencji kroków
// Gdy X = Y
//Gdy X lub Y = "0"
if (STEP_X == 0){x = 0 ;
if (STEP_Y > 0) { for ( x == 1 ; x <= STEP_Y ; x++ ){StepperY.step(1); }}
if (STEP_Y < 0) { for ( x == -1 ; x >= STEP_Y ; x--){StepperY.step(-1); }}
STEP_Y = 0;}
if (STEP_Y == 0){x = 0 ;
if (STEP_X > 0) { for ( x == 1 ; x <= STEP_X ; x++ ){StepperX.step(1); }}
if (STEP_X < 0) { for ( x == -1 ; x >= STEP_X ; x--){StepperX.step(-1); }}
STEP_X = 0;}
// Pierwsza cwiartka ukł. współrzędnych
if (STEP_X > 0 && STEP_Y > 0){STEP_X = abs(STEP_X); STEP_Y = abs(STEP_Y);
if (STEP_X == STEP_Y){ x = 0 ; for ( x == 0; x <= STEP_X ; x++){ StepperX.step(1);StepperY.step(1);}}
if (STEP_X > STEP_Y){
A_1 = STEP_X / STEP_Y ;
float A = STEP_X / STEP_Y ;
if (A_1 < A) { A_1 = A_1 + 1 ; }
r = STEP_Y - (STEP_X/A_1);
if ( r > 0){ A_2 = STEP_X / r ;
r = STEP_Y - (STEP_X/A_1) - (STEP_X/A_2) ;}
if ( r > 0){
A_3 = STEP_X / r ;
}
a = A_1 ;b = A_2 ; c = A_3;
//Wycinanie
x = 0;
for (x == 1; x <= STEP_X ; x++){ StepperX.step(1);
if (x == a ){ StepperY.step(1); a = a + A_1; }
if (x == b ){ StepperY.step(1); b = b + A_2; }
if (x == c ){ StepperY.step(1); c = c + A_3; }
}
}
if (STEP_Y > STEP_X){
A_1 = STEP_Y / STEP_X ;
float A = STEP_Y / STEP_X ;
if (A_1 < A) { A_1 = A_1 + 1 ; }
r = STEP_X - (STEP_Y/A_1);
if ( r > 0){ A_2 = STEP_Y / r ;
r = STEP_X - (STEP_Y/A_1) - (STEP_Y/A_2) ;}
if ( r > 0){
A_3 = STEP_Y / r ;
}
a = A_1 ;b = A_2 ; c = A_3;
//Wycinanie
x = 0;
for (x == 1; x <= STEP_Y ; x++){StepperY.step(1);
if (x == a ){ StepperX.step(1); a = a + A_1; }
if (x == b ){ StepperX.step(1); b = b + A_2; }
if (x == c ){ StepperX.step(1); c = c + A_3; }
}
}
}
// Druga cwiartka ukł. współrzędnych
if (STEP_X > 0 && STEP_Y < 0){STEP_X = abs(STEP_X); STEP_Y = abs(STEP_Y);
if (STEP_X == STEP_Y){ x = 0 ; for ( x == 0; x <= STEP_X ; x++){ StepperX.step(1);StepperY.step(-1);}}
if (STEP_X > STEP_Y){
A_1 = STEP_X / STEP_Y ;
float A = STEP_X / STEP_Y ;
if (A_1 < A) { A_1 = A_1 + 1 ; }
r = STEP_Y - (STEP_X/A_1);
if ( r > 0){ A_2 = STEP_X / r ;
r = STEP_Y - (STEP_X/A_1) - (STEP_X/A_2) ;}
if ( r > 0){
A_3 = STEP_X / r ;}
a = A_1 ; b = A_2 ; c = A_3;
//Wycinanie
x = 0;
for (x == 1; x <= STEP_X ; x++){ StepperX.step(1);
if (x == a ){ StepperY.step(-1); a = a + A_1; }
if (x == b ){ StepperY.step(-1); b = b + A_2; }
if (x == c ){ StepperY.step(-1); c = c + A_3; }
}
}
if (STEP_Y > STEP_X){
A_1 = STEP_Y / STEP_X ;
float A = STEP_Y / STEP_X ;
if (A_1 < A) { A_1 = A_1 + 1 ; }
r = STEP_X - (STEP_Y/A_1);
if ( r > 0){ A_2 = STEP_Y / r ;
r = STEP_X - (STEP_Y/A_1) - (STEP_Y/A_2) ;}
if ( r > 0){
A_3 = STEP_Y / r ;}
a = A_1 ;b = A_2 ; c = A_3;
//Wycinanie
x = 0;
for (x == 1; x <= STEP_Y ; x++){StepperY.step(-1);
if (x == a ){ StepperX.step(1); a = a + A_1; }
if (x == b ){ StepperX.step(1); b = b + A_2; }
if (x == c ){ StepperX.step(1); c = c + A_3; }
}
}
}
// Trzecia cwiartka ukł. współrzędnych
if (STEP_X < 0 && STEP_Y < 0){STEP_X = abs(STEP_X); STEP_Y = abs(STEP_Y);Serial.print (" X<0>Y" );
if (STEP_X == STEP_Y){ x = 0 ; for ( x == 0; x <= STEP_X ; x++){ StepperX.step(-1);StepperY.step(-1);}}
if (STEP_X > STEP_Y){
A_1 = STEP_X / STEP_Y ;
float A = STEP_X / STEP_Y ;
if (A_1 < A) { A_1 = A_1 + 1 ; }
r = STEP_Y - (STEP_X/A_1);
if ( r > 0){ A_2 = STEP_X / r ;
r = STEP_Y - (STEP_X/A_1) - (STEP_X/A_2) ;}
if ( r > 0){
A_3 = STEP_X / r ;
}
a = A_1 ;b = A_2 ; c = A_3;
//Wycinanie
x = 0;
for (x == 1; x <= STEP_X ; x++){ StepperX.step(-1);
if (x == a ){ StepperY.step(-1); a = a + A_1; }
if (x == b ){ StepperY.step(-1); b = b + A_2; }
if (x == c ){ StepperY.step(-1); c = c + A_3; }
}
}
if (STEP_Y > STEP_X){
A_1 = STEP_Y / STEP_X ;
float A = STEP_Y / STEP_X ;
if (A_1 < A) { A_1 = A_1 + 1 ; }
r = STEP_X - (STEP_Y/A_1);
if ( r > 0){ A_2 = STEP_Y / r ;
r = STEP_X - (STEP_Y/A_1) - (STEP_Y/A_2) ;}
if ( r > 0){
A_3 = STEP_Y / r ;
}
a = A_1 ;b = A_2 ; c = A_3;
//Wycinanie
x = 0;
for (x == 1; x <= STEP_Y ; x++){StepperY.step(-1);
if (x == a ){ StepperX.step(-1); a = a + A_1; }
if (x == b ){ StepperX.step(-1); b = b + A_2; }
if (x == c ){ StepperX.step(-1); c = c + A_3; }
}
}
}
// Czwarta cwiartka ukł. współrzędnych
if (STEP_X < 0 && STEP_Y > 0){STEP_X = abs(STEP_X); STEP_Y = abs(STEP_Y);Serial.print (" X<0<0Y" );
if (STEP_X == STEP_Y){ x = 0 ; for ( x == 0; x <= STEP_X ; x++){ StepperX.step(-1);StepperY.step(1);}}
if (STEP_X > STEP_Y){
A_1 = STEP_X / STEP_Y ;
float A = STEP_X / STEP_Y ;
if (A_1 < A) { A_1 = A_1 + 1 ; }
r = STEP_Y - (STEP_X/A_1);
if ( r > 0){ A_2 = STEP_X / r ;
r = STEP_Y - (STEP_X/A_1) - (STEP_X/A_2) ;}
if ( r > 0){
A_3 = STEP_X / r ;
}
a = A_1 ;b = A_2 ; c = A_3;
//Wycinanie
x = 0;
for (x == 1; x <= STEP_X ; x++){ StepperX.step(-1);
if (x == a ){ StepperY.step(1); a = a + A_1; }
if (x == b ){ StepperY.step(1); b = b + A_2; }
if (x == c ){ StepperY.step(1); c = c + A_3; }
}
}
if (STEP_Y > STEP_X){
A_1 = STEP_Y / STEP_X ;
float A = STEP_Y / STEP_X ;
if (A_1 < A) { A_1 = A_1 + 1 ; }
r = STEP_X - (STEP_Y/A_1);
if ( r > 0){ A_2 = STEP_Y / r ;
r = STEP_X - (STEP_Y/A_1) - (STEP_Y/A_2) ;}
if ( r > 0){
A_3 = STEP_Y / r ;
}
a = A_1 ;b = A_2 ; c = A_3;
//Wycinanie
x = 0;
for (x == 1; x <= STEP_Y ; x++){StepperY.step(1);
if (x == a ){ StepperX.step(-1); a = a + A_1; }
if (x == b ){ StepperX.step(-1); b = b + A_2; }
if (x == c ){ StepperX.step(-1); c = c + A_3; }
}
}
}
//Na LCD
lcd.setCursor(0,0);lcd.print(" ");lcd.setCursor(0,0);lcd.print("G "); lcd.print(G);
lcd.setCursor(8,0);lcd.print(" ");lcd.setCursor(8,0);lcd.print("X "); lcd.print(X);
lcd.setCursor(0,1);lcd.print(" ");lcd.setCursor(0,1);lcd.print("Y "); lcd.print(Y);
lcd.setCursor(8,1);lcd.print(" ");lcd.setCursor(8,1);lcd.print("Z "); lcd.print(Z);
//Zmiana pozycji parametry "nowe" na "stare"
OLD_X = X; OLD_Y = Y; OLD_Z = Z;
//Zerowanie stepperów
STEP_X = 0; STEP_Y = 0; STEP_Z = 0 ;
//Zerowanie zmiennych
A_1 = 0; A = 0 ; r = 0.0000; A_2 = 0; A_3 = 0;
x = 0; y = 0 ; a = 0 ; b = 0 ; c = 0 ;
//Na koniec inicjacja transmisji następnej linii kodu.
Serial.println("NEXT LINE");
//delay(250);
}
}