@torn24: grazie anche a te
Se lo vorrai provare ho corretto alcune cose che non avevo notato capito,, secondo me non potevo proprio provarlo non ho driver, motori e ne tastierino, per cui era impossibile
Ultima correzione.
Codice: Seleziona tutto
/* Un posizionatore fresatrice per gli assi X Y Z
Il pricipio è questo, sono su un punto sulla tavola è l'origene assi cartesiani
Decido in che direzione mi devo spostare X+ X- Y+ Y-
Premo pulsante asse sul tastierino, e inserisco spostamento, positivo o negativo a seconda del verso.
il canencelleto nel tastierno è tato conferma.
*/
#include <LiquidCrystal_I2C.h>
#include <AccelStepper.h>
#include <Keypad.h>
#define PASSIAMM 100 //Quanti step per spostamento di un mm IN BASE a step e meccanica
// i pin della sceda mettere numero pin effettivamente utilizzato
#define STEPPIN1 11
#define DIRPIN1 10
#define STEPPIN2 9
#define DIRPIN2 8
#define STEPPIN3 7
#define DIRPIN3 6
//#define XBUTTON 5
//#define YBUTTON 4
//#define ZBUTTON 3
AccelStepper stepper1(AccelStepper::DRIVER, STEPPIN1, DIRPIN1);
AccelStepper stepper2(AccelStepper::DRIVER, STEPPIN2, DIRPIN2);
AccelStepper stepper3(AccelStepper::DRIVER, STEPPIN3, DIRPIN3);
// Scegliere indirizzo giusto lcd
LiquidCrystal_I2C lcd(0x3f, 16, 2);
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{ '1', '2', '3', 'X' },
{ '4', '5', '6', 'Y' },
{ '7', '8', '9', 'Z' },
{ '.', '0', '#', 'D' } // Ho sostituito * con il punto per numeri decimali, * su tastiera corrisponte a .
};
byte rowPins[ROWS] = { 9, 8, 7, 6 }; // METTERE I PIN USATI DAL KEYPAD
byte colPins[COLS] = { 5, 4, 3, 2 };
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup() {
lcd.begin(16, 2);
pinMode(STEPPIN1, OUTPUT);
pinMode(DIRPIN1, OUTPUT);
pinMode(STEPPIN2, OUTPUT);
pinMode(DIRPIN2, OUTPUT);
pinMode(STEPPIN3, OUTPUT);
pinMode(DIRPIN3, OUTPUT);
//pinMode(XBUTTON, INPUT_PULLUP);
//pinMode(YBUTTON, INPUT_PULLUP);
//pinMode(ZBUTTON, INPUT_PULLUP);
// impostare valori accelerazione e maxspeed adatti
stepper1.setMaxSpeed(200.0);
stepper1.setAcceleration(200.0);
stepper2.setMaxSpeed(200.0);
stepper2.setAcceleration(200.0);
stepper3.setMaxSpeed(200.0);
stepper3.setAcceleration(200.0);
}
char stato = 0;
char AsseSelezionato = 'X';
float Avanzamento = 0;
float spostamento = 0;
void loop() {
char key =customKeypad.getKey();
if (key == 'X') {
AsseSelezionato = 'X';
stato = 1;
} else if (key == 'Y') {
AsseSelezionato = 'Y';
stato = 2;
} else if (key == 'Z') {
AsseSelezionato = 'Z';
stato = 3;
}else if (key == 'D') {
display("cancella");
display("F= ");
Avanzamento = tastierino();
// Calcolo velocita passi al secondo corrispondente ad avanzamento impostato in MM al minuto F
// Millimetri al minuto/60=millimetri al secondo / passi a millimetro
Avanzamento = (Avanzamento / 60) * PASSIAMM;
//Imposto velocita setSpeed sui tre motori
stepper1.setMaxSpeed(Avanzamento);
stepper2.setMaxSpeed(Avanzamento);
stepper3.setMaxSpeed(Avanzamento);
}
switch (stato) {
case 1:
display("cancella");
display("X= ");
spostamento = tastierino();
stato = 4;
case 2:
display("cancella");
display("Y= ");
spostamento = tastierino();
stato = 4;
case 3:
display("cancella");
display("Z= ");
spostamento = tastierino();
stato = 4;
case 4:
//In base all'asse selezionato con i pulsanti, comanda il movimento del driver associato
if (AsseSelezionato =='X') {
stepper1.move((int)(spostamento * PASSIAMM));
} else if (AsseSelezionato == 'Y') {
stepper2.move((int)(spostamento * PASSIAMM));
} else if (AsseSelezionato == 'Z') {
stepper3.move((int)(spostamento * PASSIAMM));
}
stato = 0; // In stato di attesa nuovo comando
}
//NEL loop richiamo continuamente il movimento dei motori
stepper1.run();
stepper2.run();
stepper3.run();
}
void display(char* s) {
if (strcmp(s, "cancella") == 0) {
lcd.clear();
lcd.setCursor(0, 1);
}else{
lcd.print(s);
}
}
float tastierino() {
//Premere il tato cancelleto una volta terminato insermento dei valori numerici
char carattere;
char stringa[20];
int i = 0;
do {
carattere = customKeypad.getKey();
if (carattere != NO_KEY) {
stringa[i++] = carattere;
lcd.print(carattere);
}
} while (carattere != '#');
stringa[--i] = '\0';
return atof(stringa);
}