Stepper e Arduino

Sezione dedicata all'elettronica in generale.
Rispondi
torn24
God
God
Messaggi: 5080
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Stepper e Arduino

Messaggio da torn24 » lunedì 18 marzo 2024, 9:47

Off topic
non avevo dubbi che, tra due scelte, avessi fatto quella sbagliata... :mrgreen:
Ogni post che pubblico ogni cosa che faccio sembra che velatamente, o esplicitamente mi devi sminuire, Ma come persona intelligente e di scienza sai benissimo che se io sono meno non vuol dire che tu sei più automaticamente, nel senso se perdo soldi non vuol dire che tu li guadagni. Comunque non me la sono presa so che non ce lai con me ma con la categoria, stessa cosa io con te :D

Io ammiro chi è meglio di me ma non disprezzo chi è peggio di me, se non mi ha fatto niente spesso mi viene voglia di aiutarlo :D
CIAO A TUTTI !

Avatar utente
MauPre75
Senior
Senior
Messaggi: 2383
Iscritto il: venerdì 1 dicembre 2017, 14:43

Re: Stepper e Arduino

Messaggio da MauPre75 » lunedì 18 marzo 2024, 12:51

Avvolte un po' di umorismo non guasta, sappiamo che da un testo non possiamo capire il vero senso della frase e una faccina ed un pizzico di umorismo ci aiutano a riderci su.

Avatar utente
leomonti
Senior
Senior
Messaggi: 2110
Iscritto il: mercoledì 20 dicembre 2006, 19:04

Re: Stepper e Arduino

Messaggio da leomonti » mercoledì 20 marzo 2024, 15:53

@hellfire39: sto provando l'ultimo sketch. Quando decommento le righe relative ai motori Y e Z, in fase di compilazione ricevo il seguente msg di errore
'stepperZ' was not declared in this scope
Lo stesso per la Y.
Questa la parte di codice che decommento

Codice: Seleziona tutto

 
  stepperY = engine.stepperConnectToPin(stepPinStepperY);
  if (stepperY) {
    stepperY->setDirectionPin(dirPinStepperY);
    stepperY->setEnablePin(enablePinStepperY);
    stepperY->setAutoEnable(true);

    // If auto enable/disable need delays, just add (one or both):
    // stepper->setDelayToEnable(50);
    // stepper->setDelayToDisable(1000);

    stepperY->setSpeedInUs(1000);       // the parameter is us/step !!!
    stepperY->setAcceleration(10000);   // step/s^2
  }

  stepperZ = engine.stepperConnectToPin(stepPinStepperZ);
  if (stepperZ) {
    stepperZ->setDirectionPin(dirPinStepperZ);
    stepperZ->setEnablePin(enablePinStepperZ);
    stepperZ->setAutoEnable(true);

    // If auto enable/disable need delays, just add (one or both):
    // stepper->setDelayToEnable(50);
    // stepper->setDelayToDisable(1000);

    stepperZ->setSpeedInUs(1000);       // the parameter is us/step !!!
    stepperZ->setAcceleration(10000);   // step/s^2
  }
 
Negli sketch precedenti non lo avevo riscontrato perchè stavo provando un solo asse e quindi non avevo decommentato quella parte.
Il cervello è l'organo più sopravvalutato...(W.Allen)

Avatar utente
hellfire39
God
God
Messaggi: 3416
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: Stepper e Arduino

Messaggio da hellfire39 » mercoledì 20 marzo 2024, 16:01

Devi decommentare le dichiarazioni di quegli oggetti
Immagine 2024-03-20 160042.png
P.S. ho notato che c'è un errori di battitura poco sotto. Ho dichiarato due volte

Codice: Seleziona tutto

...
Bounce finecorsaZ = Bounce();
...
Bounce finecorsaZ = Bounce();
...
Invece che dichiarare Y e Z:

Codice: Seleziona tutto

...
Bounce finecorsaY = Bounce();
...
Bounce finecorsaZ = Bounce();
...
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login

Avatar utente
leomonti
Senior
Senior
Messaggi: 2110
Iscritto il: mercoledì 20 dicembre 2006, 19:04

Re: Stepper e Arduino

Messaggio da leomonti » mercoledì 20 marzo 2024, 16:20

Y-Z lo avevo già corretto

Il resto, adesso, lo compila correttamente.
Grazie!
Il cervello è l'organo più sopravvalutato...(W.Allen)

Avatar utente
leomonti
Senior
Senior
Messaggi: 2110
Iscritto il: mercoledì 20 dicembre 2006, 19:04

Re: Stepper e Arduino

Messaggio da leomonti » martedì 26 marzo 2024, 16:10

@hellfire39:
Adesso mi sembra che funzioni tutto, potenziometro on-fly compreso. Grazie, grazie, grazie!
C'erano vari altri errori di battitura: Y presente in varie stringhe relative ad asse Z. Credo che il problema sia nato dai copia/incolla.
E diverse altre stringhe da decommentare per abilitare tutti e tre gli assi. Nulla di trascendentale, anzi, per me, una buona palestra nel districarmi fra i meandri del codice :D :D
P.S. Se lo ritieni utile ed opportuno, posso postare il codice corretto, ovviamente con la mia mappatura pinout.

Appena avrò completato il montaggio sulla macchina, posterò le foto

@torn24: grazie anche a te. Più avanti (il tempo non mi basta mai e sono diventato vecchio e lento...) proverò anche il tuo posizionatore che utilizzerò, probabilmente, su una mini fresatrice Sherline cui toglierò il controllo Cnc.
Il cervello è l'organo più sopravvalutato...(W.Allen)

Avatar utente
hellfire39
God
God
Messaggi: 3416
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: Stepper e Arduino

Messaggio da hellfire39 » martedì 26 marzo 2024, 16:18

Ottimo, mi fa piacere.
Puoi rimettere tranquillamente il codice corretto, almeno tengo la versione corretta. Magari può interessare ad altri.

Avatar utente
leomonti
Senior
Senior
Messaggi: 2110
Iscritto il: mercoledì 20 dicembre 2006, 19:04

Re: Stepper e Arduino

Messaggio da leomonti » martedì 26 marzo 2024, 16:33

Eccolo.
Però, prima di usarlo, controllatelo e modificate la parte iniziale pinout in relazione alla vostra configuarzione

Codice: Seleziona tutto

#include "FastAccelStepper.h"
#include <Bounce2.h>

#define dirPinStepperX 9
#define enablePinStepperX 21
#define stepPinStepperX 6
#define avantiX 31
#define indietroX 32
#define pinFinecorsaX 41

#define dirPinStepperY 10
#define enablePinStepperY 22
#define stepPinStepperY 7
#define avantiY 33
#define indietroY 34
#define pinFinecorsaY 42

#define dirPinStepperZ 11
#define enablePinStepperZ 23
#define stepPinStepperZ 8
#define avantiZ 35
#define indietroZ 36
#define pinFinecorsaZ 43




enum direzione {avanti, indietro, nessuna};

// memorizza lo stato di un asse
typedef struct DatiAsse {
  direzione ultimaDirezione;      // direzione in cui si sta muovendo l'asse  
  direzione finecorsaImpegnato;   // finecorsa impegato
  bool comandoAttivo;             // c'è un comando attivo
};

// class factory per gli stepper
FastAccelStepperEngine engine = FastAccelStepperEngine();

// creazione di uno stepper (da configurare in setup())
FastAccelStepper *stepperX = NULL;
FastAccelStepper *stepperY = NULL;
FastAccelStepper *stepperZ = NULL;


// antirimbalzo software per pulsanti e finecorsa (da configurare in setup())
Bounce2::Button buttonXplus = Bounce2::Button();
Bounce2::Button buttonXminus = Bounce2::Button();
Bounce finecorsaX = Bounce();


Bounce2::Button buttonYplus = Bounce2::Button();
Bounce2::Button buttonYminus = Bounce2::Button();
Bounce finecorsaY = Bounce();

Bounce2::Button buttonZplus = Bounce2::Button();
Bounce2::Button buttonZminus = Bounce2::Button();
Bounce finecorsaZ = Bounce();


// dichiarazione della funzione implementata più sotto
void gestisciAsse(FastAccelStepper *stepper, DatiAsse &datiAsse, Bounce2::Button &dirAvanti, Bounce2::Button &dirIndietro, Bounce &finecorsa);


void setup() {
  engine.init();

  stepperX = engine.stepperConnectToPin(stepPinStepperX);
  if (stepperX) {
    stepperX->setDirectionPin(dirPinStepperX);
    stepperX->setEnablePin(enablePinStepperX);
    stepperX->setAutoEnable(true);
    stepperX->setDelayToEnable(100);
    stepperX->setDelayToDisable(100);

    // If auto enable/disable need delays, just add (one or both):
    // stepper->setDelayToEnable(50);
    // stepper->setDelayToDisable(1000);

    stepperX->setSpeedInUs(1000);       // the parameter is us/step !!!
    stepperX->setAcceleration(10000);   // step/s^2
  }
  

  
  stepperY = engine.stepperConnectToPin(stepPinStepperY);
  if (stepperY) {
    stepperY->setDirectionPin(dirPinStepperY);
    stepperY->setEnablePin(enablePinStepperY);
    stepperY->setAutoEnable(true);
    stepperY->setDelayToEnable(100);
    stepperY->setDelayToDisable(100);

    // If auto enable/disable need delays, just add (one or both):
    // stepper->setDelayToEnable(50);
    // stepper->setDelayToDisable(1000);

    stepperY->setSpeedInUs(1000);       // the parameter is us/step !!!
    stepperY->setAcceleration(10000);   // step/s^2
  }


  stepperZ = engine.stepperConnectToPin(stepPinStepperZ);
  if (stepperZ) {
    stepperZ->setDirectionPin(dirPinStepperZ);
    stepperZ->setEnablePin(enablePinStepperZ);
    stepperZ->setAutoEnable(true);
    stepperZ->setDelayToEnable(100);
    stepperZ->setDelayToDisable(100);

    // If auto enable/disable need delays, just add (one or both):
    // stepper->setDelayToEnable(50);
    // stepper->setDelayToDisable(1000);

    stepperZ->setSpeedInUs(1000);       // the parameter is us/step !!!
    stepperZ->setAcceleration(10000);   // step/s^2
  }
  


  // impostazioni antirimbalzo
  finecorsaX.attach( pinFinecorsaX, INPUT_PULLUP);
  finecorsaX.interval(20);

  buttonXplus.attach( avantiX, INPUT_PULLUP );  // USE EXTERNAL PULL-UP
  buttonXplus.interval(5);                         // DEBOUNCE INTERVAL IN MILLISECONDS
  buttonXplus.setPressedState(LOW);                // LOW = TASTO PREMUTO

  buttonXminus.attach( indietroX, INPUT_PULLUP ); // USE EXTERNAL PULL-UP
  buttonXminus.interval(5);                        // DEBOUNCE INTERVAL IN MILLISECONDS
  buttonXminus.setPressedState(LOW);               // LOW = TASTO PREMUTO


  finecorsaY.attach( pinFinecorsaY, INPUT_PULLUP);
  finecorsaY.interval(20);

  buttonYplus.attach( avantiY, INPUT_PULLUP );  // USE EXTERNAL PULL-UP
  buttonYplus.interval(5);                         // DEBOUNCE INTERVAL IN MILLISECONDS
  buttonYplus.setPressedState(LOW);                // LOW = TASTO PREMUTO

  buttonYminus.attach( indietroY, INPUT_PULLUP ); // USE EXTERNAL PULL-UP
  buttonYminus.interval(5);                        // DEBOUNCE INTERVAL IN MILLISECONDS
  buttonYminus.setPressedState(LOW);               // LOW = TASTO PREMUTO

  finecorsaZ.attach( pinFinecorsaZ, INPUT_PULLUP);
  finecorsaZ.interval(20);

  buttonZplus.attach( avantiZ, INPUT_PULLUP );  // USE EXTERNAL PULL-UP
  buttonZplus.interval(5);                         // DEBOUNCE INTERVAL IN MILLISECONDS
  buttonZplus.setPressedState(LOW);                // LOW = TASTO PREMUTO

  buttonZminus.attach( indietroZ, INPUT_PULLUP ); // USE EXTERNAL PULL-UP
  buttonZminus.interval(5);                        // DEBOUNCE INTERVAL IN MILLISECONDS
  buttonZminus.setPressedState(LOW);               // LOW = TASTO PREMUTO




  // solo per debug
  Serial.begin(115200);
}


DatiAsse datiAsseX;
DatiAsse datiAsseY;
DatiAsse datiAsseZ;

uint32_t speedStep;

void loop() {
  
  int speedIn = analogRead(A0);
  speedStep = map(speedIn, 1023, 0, 50, 1000);

  gestisciAsse(stepperX, datiAsseX, buttonXplus, buttonXminus, finecorsaX);
  gestisciAsse(stepperY, datiAsseY, buttonYplus, buttonYminus, finecorsaY);
  gestisciAsse(stepperZ, datiAsseZ, buttonZplus, buttonZminus, finecorsaZ);


}


// questa funzione, da richiamare periodicamente in loop(), 
// si occupa di gestire un singolo asse.
// Va richiamata per ogni asse che deve essee gestito.
void gestisciAsse(FastAccelStepper *stepper, DatiAsse &datiAsse, Bounce2::Button &dirAvanti, Bounce2::Button &dirIndietro, Bounce &finecorsa) {

  // aggiornamento stato ingressi
  dirAvanti.update();
  dirIndietro.update();
  finecorsa.update();



  // il finecorsa è impegnato?
  bool finecorsaPremuto = finecorsa.read() == HIGH;

  // movimento avanti 
  bool possoMuovermi =  (!finecorsaPremuto || (finecorsaPremuto && (datiAsse.finecorsaImpegnato == indietro)));
  if (dirAvanti.isPressed() && possoMuovermi && !datiAsse.comandoAttivo) {
    stepper->setSpeedInUs(speedStep);
    stepper->runForward();
    Serial.println("forward");
    datiAsse.comandoAttivo = true;
    datiAsse.ultimaDirezione = avanti;
  }

  // necessario per cambiare la velocità
  if (dirAvanti.isPressed() && possoMuovermi ) {
    stepper->setSpeedInUs(speedStep); 
    stepper->runForward();   
  }



  // movimento indietro
  possoMuovermi = (!finecorsaPremuto || (finecorsaPremuto && (datiAsse.finecorsaImpegnato == avanti)));
  if (dirIndietro.isPressed() && possoMuovermi && !datiAsse.comandoAttivo) {
    stepper->setSpeedInUs(speedStep);
    stepper->runBackward();
    Serial.println("backward");
    datiAsse.comandoAttivo = true;
    datiAsse.ultimaDirezione = indietro;
  }

  // necessario per cambiare la velocità
  if (dirIndietro.isPressed() && possoMuovermi ) {
    stepper->setSpeedInUs(speedStep); 
    stepper->runBackward();   
  }  

  // stop in rampa
  if ((!dirAvanti.isPressed()) && (!dirIndietro.isPressed()) && datiAsse.comandoAttivo) {
    stepper->stopMove();            
    Serial.println("stopMove");
    datiAsse.comandoAttivo = false;
  }
  
  // se sono fermo, resetto la direzione corrente
  if (!stepper->isRunning()) {
    datiAsse.ultimaDirezione = nessuna;
  }
  
  // stop immediato per impegno finecorsa
  if (finecorsaPremuto && (datiAsse.finecorsaImpegnato == nessuna) && stepper->isRunning() ) {
    stepper->forceStop();           // forceStop == fermata immediata
    Serial.println("forceStop");

    datiAsse.comandoAttivo = false;
    datiAsse.finecorsaImpegnato = datiAsse.ultimaDirezione;
  }

  // rilascio finecorsa, resetto la memoria del finecorsa impegnato
  if (!finecorsaPremuto && (datiAsse.finecorsaImpegnato != nessuna)) {
    datiAsse.finecorsaImpegnato = nessuna;
    Serial.println("reset flag finecorsa");
  }

}
Il cervello è l'organo più sopravvalutato...(W.Allen)

torn24
God
God
Messaggi: 5080
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Stepper e Arduino

Messaggio da torn24 » mercoledì 27 marzo 2024, 6:32

@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 :D


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);
}



CIAO A TUTTI !

Avatar utente
leomonti
Senior
Senior
Messaggi: 2110
Iscritto il: mercoledì 20 dicembre 2006, 19:04

Re: Stepper e Arduino

Messaggio da leomonti » mercoledì 27 marzo 2024, 8:34

@torn24: salvato grazie. Appena possibile lo proverò.
Il cervello è l'organo più sopravvalutato...(W.Allen)

Avatar utente
hellfire39
God
God
Messaggi: 3416
Iscritto il: domenica 16 dicembre 2012, 9:04
Località: AN

Re: Stepper e Arduino

Messaggio da hellfire39 » mercoledì 27 marzo 2024, 15:20

@torn24

continui ad ignorare il baco sulla funzione tastierino() in cui non controlli che l'indice superi la lunghezza della stringa.
È un errore grave.

Qualche tempo fa ho visto del codice molto simile al tuo, ma in quel caso il controllo c'era.


P.S. guardandolo così, in modo un po' superficiale, mi pare che manchino alcuni controlli. Tipo: che succede se qualcuno preme il tasto X, Y o Z mentre il motore si sta muovendo?
Se non ho interpretato male il codice, lo stepper che si stava muovendo si blocca finché stai nella funzione tastierino() per poi riprendere di botto non appena esci da quella funzione.

Avatar utente
leomonti
Senior
Senior
Messaggi: 2110
Iscritto il: mercoledì 20 dicembre 2006, 19:04

Re: Stepper e Arduino

Messaggio da leomonti » mercoledì 27 marzo 2024, 15:33

@torn24: io non ho capito una cosa. Tu, quel sistema, lo hai realizzato e lo usi?
Il cervello è l'organo più sopravvalutato...(W.Allen)

torn24
God
God
Messaggi: 5080
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Stepper e Arduino

Messaggio da torn24 » giovedì 28 marzo 2024, 6:06

@ leomonti scrivo spesso programmini per altri ma se hanno una meccanica sarà l'utilizzatore che la possiede a provarla, come se aiuti su una tesina sul forum arduino o altre domande, è l'utente a provarla perche solo lui ha il modellino. Quindi è un programma che ho pensato ma non provato, come ho fatto a volte cambi utensili e hanno funzionato.


@hellfire39 il controllo sul tastierino lo posso mettere, ma perché me lo dici tu mi togli il libero arbitrio :D ! in caso di pressione dei tasti assi quando il sistema è in movimento, esegue le stesse operazioni che eseguirebbe a sistema fermo, selezione asse, entra nella funzione tastierino che è bloccante fino al fine inserimento, esegue il metodo move impostando in nuovo valore relativo, torna nel loop e richiama il metodo run. Non è pensata alcuna protezione perché non si dovrebbe fare. Prima di fare modifiche, vorrei che si provasse vedere se ci sono altri problemi che non ho visto, e capire se verrà utilizzato questo sistema. Se non serve non faccio modifiche lo considero un esercizio.

Questa è la funzione che caso mai ?? inserisci un numero a 19 cifre, per non superare la capienza dell'array ti fa ripetere

Da sostituire nel codice precedente.

Codice: Seleziona tutto


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 != '#');
  if(i>20){
     display("cancella");
     display("rin->");
     tastierino(); //Ripete inserimento del valore se superati 19 caratteri.
     return;
  }
  stringa[--i] = '\0';
  return atof(stringa);
}


CIAO A TUTTI !

torn24
God
God
Messaggi: 5080
Iscritto il: venerdì 1 febbraio 2008, 11:28
Località: Modena

Re: Stepper e Arduino

Messaggio da torn24 » giovedì 28 marzo 2024, 6:19

OFF Topic

Io ragiono cosi, ti do il trapano, lo devi capire da solo che non devi mettere la mano sotto la punta, e il buon senso si dovrebbe avere per tutto.
CIAO A TUTTI !

Avatar utente
leomonti
Senior
Senior
Messaggi: 2110
Iscritto il: mercoledì 20 dicembre 2006, 19:04

Re: Stepper e Arduino

Messaggio da leomonti » giovedì 28 marzo 2024, 9:15

@torn24: la mia non era una domanda polemica. All'inizio mi era semplicemente parso di capire - ed avevo evidentemente capito male - che tu lo stessi usando su qualcuna delle tue macchine. Tutto qui.
Il cervello è l'organo più sopravvalutato...(W.Allen)

Rispondi

Torna a “Elettronica”