realizzazione di un ascensore a 3 piani

salve a tutti mi sono presentato in precedenza mi chiamo Simone e frequento il 5anno nell'istituto tecnico industriale itis volta di Roma. Il mio obbiettivo per quest'anno è realizzare un'ascensore di 3 piani con l'utilizzo di arduino,girovagando per il web e per questo forum ho trovato un codice molto interessante ma non riesco a capire alcune funzioni, potreste darmi una mano voi che siete più esperti in arduino stesso? non vorrei realizzare un progetto senza la totale conoscenza di ciò che sto realizzando. Inoltre vorrei andare a modificare il progetto stesso cercando di ampliarlo.... potreste darmi una mano? grazie a tutti quelli che riusciranno a darmi dei consigli utili

#include 
#include 
#include 


//motore cabina
int avm = 13; // Motore marcia avanti
int inm = 12; // Motore marcia indietro

//motore porta cabina
int po = 11; // Apertura porte
int pc = 10; // Chiusura porte

//finecorsa
int fp4 = 9; // Finecorsa piano 4
int fp3 = 8; // Finecorsa piano 3
int fp2 = 7; // Finecorsa piano 2
int fp1 = 6; // Finecorsa piano 1

//tasti piano
int tp4 = 5; //Tasto piano 4
int tp3 = 4; //Tasto piano 3
int tp2 = 3; //Tasto piano 2
int tp1 = 2; //Tasto piano 1

//dichiaro variabili
int P = 0;
int PT = 0;
int c = 0;
int d = 1;
int e = 0;
int val1 = 0;    
int val2 = 0;    
int val3 = 0; 
int val4 = 0;    
int val5 = 0;   
int val6 = 0; 
int val7 = 0;    
int val8 = 0;    

String readString; //string
boolean LEDON = false; //LED status flag

void setup()
{
//configuarazione pin
pinMode(avm, OUTPUT);
pinMode(inm, OUTPUT);
pinMode(po, OUTPUT);
pinMode(pc, OUTPUT);
pinMode(fp4, INPUT);
pinMode(fp3, INPUT);
pinMode(fp2, INPUT);
pinMode(fp1, INPUT);
pinMode(tp4, INPUT);
pinMode(tp3, INPUT);
pinMode(tp2, INPUT);
pinMode(tp1, INPUT);
Serial.begin(9600);
}

void loop( )
{

//inizio programma


finecorsa:
val1 = digitalRead(fp1);  
val2 = digitalRead(fp2);  
val3 = digitalRead(fp3);  
val4 = digitalRead(fp4); 
if (val1 == HIGH) {                 //controllo finecorsa piano 1
PT = 1 ; 
goto pulsante;                      //si PIANO=1
}else if (val2 == HIGH) {           //controllo finecorsa PIANO=2
PT = 2 ;
goto pulsante; 
}else if (val3 == HIGH) {
PT = 3 ;
goto pulsante; 
}else if (val4 == HIGH) {
PT = 4 ;
goto pulsante; 
}else 
goto finecorsa;



//fine controllo piani

pulsante:
if (c == 0 && PT>0){
P = PT;
c = 1;
}else
val5 = digitalRead(tp1);  
val6 = digitalRead(tp2);  
val7 = digitalRead(tp3);  
val8 = digitalRead(tp4); 
if (val5 == HIGH) {                   //controllo tasto piano 1
P = 1 ; 
e = 1;
goto motore;                          //si PIANO=1
}else if (val6 == HIGH) {             //no controllo tasto PIANO=2
P = 2 ;
e = 1;
goto motore; 
}else if (val7 == HIGH) { 
P = 3 ;
e = 1;
goto motore; 
}else if (val8 == HIGH) { 
P = 4 ;
e = 1;
goto motore; 
//fine controllo tasti piani
} 


motore:                                 //avvio motore

if (P < PT) {                 //ascensore sotto alla destinazione
digitalWrite(avm, LOW); 
digitalWrite(inm, HIGH); 
d = 1;                            //cabina sale 
goto porte;   
}else if (P > PT) {              //ascensore sopra alla destinzione
digitalWrite(inm, LOW); 
digitalWrite(avm, HIGH);    //cabina scende
d = 1;    
goto porte;   
}else if (P == PT) {                    //ascensore a destination
digitalWrite(avm, LOW);                 //motore spento
digitalWrite(inm, LOW); 
d = d+1;
goto porte;   
 }                    //fine avvio motore



porte: //apertura porte
if (d == 2 && e == 1) {   
digitalWrite(po, HIGH);
delay(500);   
digitalWrite(po, LOW);
delay(3000);         
digitalWrite(pc, HIGH);
delay(500);
digitalWrite(pc,  LOW);
delay(500);
e=0;
}else goto finecorsa;


}

Beh ... magari se metti il link al codice a cui ti riferische e spieghi un po' meglio le tue "pretese", magari qualcuno ti può anche aiutare, così ... non si sa nenache di quale codice stai parlando ...

Guglielmo

Ma il REGOLAMENTO lo vogliamo leggere seriamente ? ? ?

In conformità al suddetto regolamento, punto 7, devi [u]editare[/u] il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: , tutto a sinistra). Grazie.

Guglielmo

va bene così?

io non riesco a capire alcune funzioni : String readString; //string boolean LEDON = false; //LED status flag ho cercato su internet ma non riesco a capire cosa stia a significare

goto pulsante; // non riesco a capire il significato pulsante:

if (c == 0 && PT>0){
 P = PT;
 c = 1;
 }else
val5 = digitalRead(tp1);  
val6 = digitalRead(tp2);  
val7 = digitalRead(tp3);  
val8 = digitalRead(tp4); 
if (val5 == HIGH) {                   //controllo tasto piano 1
P = 1 ; 
e = 1;
goto motore;                          //si PIANO=1
}else if (val6 == HIGH) {             //no controllo tasto PIANO=2
P = 2 ;
e = 1;
goto motore; 
}else if (val7 == HIGH) { 
P = 3 ;
e = 1;
goto motore; 
}else if (val8 == HIGH) { 
P = 4 ;
e = 1;
goto motore; 
//fine controllo tasti piani
} 


motore:                                 //avvio motore

if (P < PT) {                 //ascensore sotto alla destinazione
digitalWrite(avm, LOW); 
digitalWrite(inm, HIGH); 
d = 1;                            //cabina sale 
goto porte;   
}else if (P > PT) {              //ascensore sopra alla destinzione
digitalWrite(inm, LOW); 
digitalWrite(avm, HIGH);    //cabina scende
d = 1;    
goto porte;   
}else if (P == PT) {                    //ascensore a destination
digitalWrite(avm, LOW);                 //motore spento
digitalWrite(inm, LOW); 
d = d+1;
goto porte;

anche questa parte non riesco a capirla......

Ma lo hai letto il mio post ? ? ? :o :o :o

DEVI EDITARE, a questo punto entrambi i tuoi post e mettere tutto il codice tra i tag CODE ... ovvero: code prima del codice e /code dopo il codice in modo che:

il codice sia racchiuso così

Guglielmo

non vorrei realizzare un progetto senza la totale conoscenza di ciò che sto realizzando

Se è questo il tuo proposito, ti consiglio innanzitutto di studiare i rudimenti del linguaggio C. L'ambiente di sviluppo di Arduino, oltre ad utilizzare le istruzioni e i tipi di dato standard dei linguaggi C/C++, ne utilizza anche di propri. Quindi, dopo aver appreso le basi della programmazione generica, dovresti consultare la reference di Arduino ogni volta che hai un dubbio su cosa sia un'istruzione e cosa fa.

https://www.arduino.cc/reference/en/

Se il codice che hai postato corrisponde all'intero listato del programma, allora puoi sicuramente fare a meno delle seguenti istruzioni:

include

include

include

Queste sono librerie, ovvero "contenitori di funzioni" esterne, che nel tuo programma non vengono usate.

String readString; //string

Definisce la variabile readString che serve a memorizzare una stringa. Una stringa è un insieme di più caratteri, ad esempio "Hello World!" è una stringa e le "" sono il mezzo per indicarla all'interno del programma.

boolean LEDON = false; //LED status flag

Qui viene definita la variabile booleana LEDON. Variabili di questo tipo possono assumere solo i due stati binari: 1 o 0. True, False sono sinonimi rispettivamente delle due cifre citate.

goto pulsante; // non riesco a capire il significato pulsante:

L'istruzione goto indica semplicemente al programma di saltare all'etichetta pulsante: specificata di seguito all'istruzione. Questo vuol dire che tutto il codice che si trova fra goto pulsante e pulsante: non viene eseguito, o come si dice in gergo viene "saltato".

Nella programmazione moderna il goto non viene più usato, anzi per meglio dire viene evitato come la peste e sostituito da costrutti iterativi quali sono il for e il while. Inoltre se usi tante variabili che hanno uno scopo simile, conviene raggrupparle in un array (vettore in italiano). Dato che alcune variabili nel tuo caso sono dei tasti, si verifica il fenomeno del "rimbalzo" ossia un treno di impulsi spuri nel momento in cui se ne preme uno e ciò può portare a risultati incongruenti, quindi occorre provvedere ad eliminarlo tramite tecniche software (esistono librerie Arduino apposta) oppure creare dei circuiti esterni cosiddetti di "antirimbalzo" a cui collegare il pulsante.

Però mi fermo qui, queste e tante altre nozioni di programmazione le devi apprendere tramite lo studio individuale.

allora provando a costruire un codice da 0 facciamo ad esempio ho 3 piani piano 0 piano 1 piano 2 con la funzione if io devo andare a calcolare tutti i casi possibili di dove si possa trovare il piano giusto? che tradotto in arduino sarebbe

//variabili
pt=0
pt1=0
pt2=0

if(pt=0) 
pt=0 
else if pt1=0
pt=0
else if pt2=0
pt=0//
oppure con la funzione switch/case

io vorrei dire al computer che l'ascensore deve stare al piano 0 e anche negli altri 2 casi l'ascensore deve rimanere al piano 0 ha senso quello che ho scritto dal punto di vista del codice=

simonsdec:
allora provando a costruire un codice da 0
facciamo ad esempio ho 3 piani
piano 0 piano 1 piano 2
con la funzione if io devo andare a calcolare tutti i casi possibili di dove si possa trovare il piano giusto?
che tradotto in arduino sarebbe

//variabili

pt=0
pt1=0
pt2=0

if(pt=0)
pt=0
else if pt1=0
pt=0
else if pt2=0
pt=0//
oppure con la funzione switch/case



io vorrei dire al computer che l'ascensore deve stare al piano 0 e anche negli altri 2 casi l'ascensore deve rimanere al piano 0 ha senso quello che ho scritto dal punto di vista del codice=

Prima di scrivere una singola riga di codice, devi definire chiaramente, a livello logico, il funzionamento dell’automazione dell’ascensore.
Detto in parole povere, è necessario che elabori un progetto su carta (o su file di testo) di quello che vuoi fare.
Se tu per primo non hai bene in mente il quadro generale del progetto, come farai a spiegarlo ad altri nei dettagli o anche solo a realizzare qualcosa di sensato e su cui hai pieno controllo?
Pertanto mi permetto di consigliarti quanto segue:

1 - Scrivi un elenco delle operazioni che deve eseguire l’automazione.

Esempio:

a- L’utente preme in alternativa uno dei tre pulsanti A, B, C, ne viene memorizzata la premuta, e si accende la spia di prenotazione
b- E’ stato premuto un tasto? Se sì continua, altrimenti rimani in attesa di prenotazione.
c- L’ascensore è fermo e frenato, c’è una sola prenotazione in corso, e si trova ad uno qualsiasi dei 3 piani (finecorsa di un qualunque piano =1)?
d- Se sì, continua. Altrimenti segnala malfunzionamento con una spia rossa e spegni la spia di prenotazione (memorizzazione azzerata). Una volta risolto il guasto premi il tasto di RESET, spegni la spia rossa, e torna al punto a.
e- Si chiude la porta della cabina, il freno viene disazionato, e viene comandata la salita o la discesa dell’ascensore al piano prenotato
f- La cabina è arrivata a destinazione entro il tempo di Timeout (fincorsa del piano prenotato =1)?
g- Se sì, continua. Altrimenti segnala malfunzionamento con una spia rossa e spegni la spia di prenotazione (memorizzazione azzerata). Una volta risolto il guasto premi il tasto di RESET, spegni la spia rossa, e torna al punto a.
h- Quando il finecorsa del piano in cui è stata effettuata la prenotazione è =1, aziona il freno e dopo un tempo di assestamento apri le porte. Infine azzera la memorizzazione della premuta e spegni la spia di prenotazione.

  • ecc. ecc.

Se ti viene più comodo, puoi fare un diagramma di flusso per rappresentare la sequenza succitata.

Attenzione: l’esempio l’ho scritto a braccio cioè senza rifletterci troppo, non è completo, e potrebbero esserci degli errori o delle mancanze. Quindi spetta a te completarlo e aggiungere eventuali condizioni di sicurezza o altre funzioni che diano un valore aggiunto al progetto (ulteriori lampadine, luci di illuminazione, sirene, ecc.).

2 - Definisci gli ingressi (pulsanti, finecorsa) e le uscite (motore di salita/discesa, spie luminose) che collegherai.
3 - Prevedi un pulsante di emergenza (estop) per bloccare il movimento dell’ascensore in caso di problemi. Il pulsante deve essere un connessione hardware esterna alla logica dell’Arduino, serve principalmente a togliere alimentazione ai motori per fermarli.
3 - Disegna uno schema elettrico di collegamenti all’Arduino
4 - Con lo schema elettrico sotto mano svolgi i necessari cablaggi
5 - Crea un prototipo dell’automazione dell’ascensore
6 - Scrivi il programma e caricalo nell’Arduino
7 - Verifica in tutti i modi possibili che il programma funzioni come hai previsto e se trovi errori logici, correggili (fase di debug)

Usa nomi esplicativi per descrivere le variabili utilizzate nel programma. Per esempio, le spie luminose potrebbero essere chiamate con nomi del tipo: SpiaPrenotazPiano, SpiaRossaEstop.
Commenta il più possibile il programma usando i commenti inline, cioè commenti che si possono applicare sulla stessa riga in cui è scritta un’istruzione.
int pippo; //Tutto ciò che si trova dopo le due barre è un commento
I commenti ti aiutano anche a ricordare a distanza di tempo il significato del codice che hai scritto. Poi se vuoi presentare il progetto come tesina di fine anno, beh direi che è superfluo dire che aiutano una persona esterna ad avere un’idea di quello che fanno le istruzioni.

Per il resto di quello che chiedi, ti dico onestamente che ci ho capito poco. Dovresti per favore, e non prenderla come una critica o un rimprovero, sforzarti di spiegarti meglio e in un italiano comprensibile.

Il programma che hai postato contiene gravi errori di sintassi e concettualmente non ha granché significato. Perché tre tasti diversi devono far arrivare l’ascensore a un solo piano? Cioè una volta che arrivi a quel piano vuol dire che l’ascensore non si muove più, che senso ha?

Allora io sto cercando di sviluppare piano piano un codice che mi faccia funzionare un ascensore di 2 piani 0-1-2 ,con l’utilizzo di un motore passo passo dei fine corsa apertura/chiusura porte /tasti piano Non ho ben chiaro però come strutturare tutto ciò anche la composizione del flowchart mi risulta complicata,non riesco a focalizzare ciò che mi serve realizzare. Come posso sviluppare un codice di questo genere? Mi puoi aiutare a farmi uno schema mentale o una bozza per capire da dove cominciare ? Ho una grande confusione su come si possa realizzare un codice di questo tipo. Conosco discretamente le funzioni if else....for..... ma ho difficoltà nel metterle in pratica a e nel capire come e quando vanno sfruttate.... Grazie del tempo dedicato nella risposta in precedenza,questa mia difficoltà di esprimermi dipende sicuramente dalle difficoltà che sto avendo questi giorni per provare a costruire una bozza del codice senza riuscirci

Anche a me dai l'idea di non avere le idee chiare... Come dice krypton18, puoi cominciare con uno schema logico e poi passare al codice. Lui ti ha già dato un esempio, forse anche troppo dettagliato. Credo tu sappia come funziona un ascensore. Prova a descrivere il funzionamento in italiano. Sarà la tua base di partenza.

Ps leggendo varie discussioni qui sul forum ho visto che l'ascensore è un progetto abbastanza diffuso per la maturità... Vedi se trovi qualcuna di quelle discussioni e prendi spunto.

Non ho ben chiaro però come strutturare tutto ciò anche la composizione del flowchart mi risulta complicata,non riesco a focalizzare ciò che mi serve realizzare.

Intanto devi capire a cosa serve un diagramma di flusso e cosa rappresenta. Un diagramma di flusso idealmente serve a descrivere in forma grafica un problema in tutte le sue sfaccettature, con particolare enfasi sul metodo di risoluzione dello stesso. La programmazione, qualunque linguaggio tu stia usando, è il metodo pratico per realizzare ciò che è stato pianificato nel diagramma di flusso. Allora, devi partire dal presupposto che ad ogni """struttura""" del linguaggio C (if-else, switch-case, do-while,while, for) si può far corrispondere un blocco grafico del diagramma di flusso. Quindi una volta che definisci il tuo diagramma di flusso, non devi far altro che pensare a tradurre ciascun blocco nelle sue equivalenti istruzioni di codice. L'importante è focalizzare il concetto della corrispondenza (quasi) univoca fra il programma e la sua rappresentazione grafica.

Come posso sviluppare un codice di questo genere? Mi puoi aiutare a farmi uno schema mentale o una bozza per capire da dove cominciare ? Ho una grande confusione su come si possa realizzare un codice di questo tipo. Conosco discretamente le funzioni if else....for..... ma ho difficoltà nel metterle in pratica a e nel capire come e quando vanno sfruttate....

Descrizione veloce dei blocchi grafici che compongono un diagramma di flusso ed esempio di come descrivere un problema: https://it.wikiversity.org/wiki/Diagrammi_di_Flusso_(superiori) Per quanto riguarda la codifica in istruzioni dei blocchi grafici di un diagramma di flusso, questi due documenti, che puoi scaricare al seguente indirizzo: http://staff.polito.it/claudio.fornaro/CorsoC, sono particolarmente utili da leggere: Strutture di selezione e Strutture iterative

Nei documenti succitati vedi per esempio come si rappresenta un'istruzione if-else in forma grafica.

Prova a studiare quelle guide e vedi se riesci autonomamente a trovare un punto di partenza, poi se hai dubbi proviamo a chiarirli. Come ti ho detto in precedenza devi definire per filo e per segno il funzionamento dell'automazione, il codice è l'ultima cosa a cui devi pensare. Io per ora ti ho indicato due metodi per descrivere il problema e la sua soluzione: 1- Elencare in modo scritto la sequenza delle operazioni da effettuare 2- Disegnare un diagramma di flusso che rappresenta la sequenza delle operazioni da effettuare

Scegli uno dei due metodi e poi pensa a come trasformarlo in codice. Probabilmente, siccome sei alle prime armi, ti conviene fare un diagramma di flusso perché ti aiuta meglio a capire il flusso di esecuzione del programma.

ho letto tutti i vostri messaggi e sto provando a scrivere qualcosa mo ho grandi dubbi porgo un esempio 3 tasti 0-1-2 premo il tasto 1, rileva la posizione attuale del ascensore(chi svolge quest'azione)?? sali o scendi a seconda della posizione nell'istante prima della pressione del tasto memorizzata del ascensore attiva il led di prenotazione e una volta arrivato al piano apri porta e accendi il led verde che indica che l'ascensore sta al piano e spengi quello rosso riesco ad esprimere tutto quello che ho detto secondo un codice? come riesco a rilevare la posizione del'ascensore ?

come riesco a rilevare la posizione del'ascensore ?

Collegando fisicamente un sensore di fine corsa ( pulsante a levetta, ottico, magnetico, etc etc )

Ad esempio, collegandone solo uno quando è al piano zero, dovresti tutte le volte che accendi Arduino ( o che viene resettato) far girare il motore in discesa , fino a che non scatta il sensore. Cosi sai che sei al piano zero e poi durante il normale lavoro hai comunque delle variabili che ti dicono a che piano si trova

Oppure ne metti uno per piano, cosi' sai subito dove si trova. E all'accensione controlli se uno dei sensori è premuto, e se non lo è nessuno, muovi il motore fino a che non scatta uno di essi

si penso di metterne uno per ogni piano
quindi pensavo di progettarlo così
ho 3 finecorsa, se il finecorsa 1 è spinto (high) ho rilevato la posizione del ascensore invece nel caso in cui non è spinto nessuno switch facciamo caso che l’ascensore non stia a nessun piano in base al pulsante spinto
0-1-2 sali o scendi dalla sua posizione attuale
quindi riassumendo
riesco a comandare ciò che sto dicendo con la funzioni if else?
ed in più gli progetto insieme il comportamento del led bicolore giusto?

simonsdec: si penso di metterne uno per ogni piano quindi pensavo di progettarlo così ho 3 finecorsa, se il finecorsa 1 è spinto (high) ho rilevato la posizione del ascensore invece nel caso in cui non è spinto nessuno switch facciamo caso che l'ascensore non stia a nessun piano in base al pulsante spinto 0-1-2 sali o scendi dalla sua posizione attuale quindi riassumendo riesco a comandare ciò che sto dicendo con la funzioni if else? ed in più gli progetto insieme il comportamento del led bicolore giusto?

Ma almeno li hai letti i miei messaggi con annesse spiegazioni? Sicuramente la maggior parte delle istruzioni consisteranno in istruzioni di selezione (if-else), ma questo non significa che qualche istruzione di ripetizione (while, for) non potrà rivelarsi necessaria. Comunque te lo dico chiaramente, finché TU DA SOLO non ti fai uno schema di come devi realizzare il progetto, farai molta fatica ad ottenere risultati. Come minimo fai un diagramma di flusso e postalo nella discussione, sennò è inutile stare a discutere sul nulla.

simonsdec: riesco a comandare ciò che sto dicendo con la funzioni if else?

Quello che si fa normalmente è questo:

  • Si leggono gli ingressi (applicando un opportuno anti rimbalzo hard/soft se sono ingressi sporchi come i contatti meccanici).
  • In base alla situazione attuale (stato) e ai valori letti, si decide quali operazioni svolgere (compreso il comando delle uscite e l' eventuale aggiornamento della situazione attuale).
  • La situazione attuale (stato) si mantiene in apposite variabili usate per quello scopo (che vanno all'inizio impostate in modo da permettere una partenza regolare all'accensione o ad un reset).

Detto questo sono da decidere:

  • In quali situazioni (e sotto situazioni) si può trovare il sistema.
  • A quali eventi deve reagire in ogni situazione.
  • Quali operazioni deve compiere ad ogni reazione.

Tutto questo si fa con if/else e variabili usate opportunamente (come indicatori di stato, contatori ecc)

Il funzionamento/avanzamento del sistema è formato dalla continua rapida ripetizione di tutti i punti detti.

Se oltre a questo c'è anche da tenere conto del trascorrere del tempo (o si devono realizzare temporizzazioni), in ordine di precisione crescente si possono usare:

  • Piccoli delay nel loop principale per rallentarlo ad una frequenza nota (in modo da poterne contare "i passaggi".
  • La funzione millis per leggere il contatore di millisecondi interno.
  • Un modulo orologio RTC esterno.

ho fatto un flowchart tramite un'applicazione di windows ma non riesco a girarvelo provo a riassumervelo qui:

LOW PulsantPiano0 HIGH ATTENDI Rileva la posizione del ascensore piano0 piano1 piano2 end sali di tot passi sali di tot passix2 end end

quello che voglio che il mio sistema faccia è nel caso si spinga il pulspiano0 deve rilevare subito la posizione del ascensore,in base ai 3 finecorsa una volta rilevata grazie ai passi del motore passo passo che comanderò con la funzione stepper.h gli dirò di andare al piano0 sempre dallo stato memorizzato prima della spinta del pulsante . Quindi poi per progettare dovrò capire bene quanti giri del mio motore servano per far arrivare al piano l'ascensore è buona come idea??? in più penso di aggiungere i 2 led bicolori

dovrò capire bene quanti giri del mio motore servano per far arrivare al piano l'ascensore è buona come idea???

A parte il fatto che non serve uno Stepper, ma basta un semplice motore DC possibilmente con riduttore......

Che te ne importa di sapere quanti step deve fare........ hai dei sensori di finecorsa per ogni piano, quindi fai avanzare il motore fino a che non scatta il finecorsa

con il motore dc non riesco a capire come farlo avanzare.... mi sembrava più semplice l'utilizzo dello stepper mettendo tutti i casi possibili che mi dava il finecorsa e i pulsanti pensi che mi complico la vita?

ragazzi mi serve il vostro aiuto avrei un paio di problemi con lo stepper 1) come imposto la massima velocità del motore passo passo? ho provato vari setting dagli esempi ma sembra abbastanza lento... consigli? 2) come gli dico di fermarsi ? Ogni volta mi tocca staccare il cavo usb sennò