Per poi azionare un motore passo passo che mi muove l'altezza di una Sega/Pialla o Fresa.
Volendo eseguire uno spostamento assoluto (ovvero posizionare la lama/fresa a una quota che va da 0 a100 mm dal piano) devo eseguire un calcolo che è il seguente:
SpostamentoMotore = (NuovaQuotaZ - VecchiaQuotaZ)*50passi (50passi è il numero passi per fare 1mm) in pratica se la mia lama è a 20mm di altezza e voglio portarla a 70mm dovrò eseguire: (70mm-20mm)*50passi .... cioè 2500passi.
Il mio problema è che sono incapace con la programmazione e non so come salvare la mia "QuotaZ" precedente in "VecchiaQuotaZ".
ho buttato giù questo abbozzo, ma ovviamente non è corretto.
int QuotaZ = 0;
int VecchiaQuotaZ;
int NuovaQuotaZ;
void QuotaAssoluta(){
if (QuotaZ > 0) QuotaZ = VecchiaQuotaZ;
//VecchiaQuotaZ = QuotaZ; // QuotaZ variable impostata nel menu
NuovaQuotaZ = (QuotaZ - VecchiaQuotaZ);
stepper1.moveTo(NuovaQuotaZ * 50); // muove l'altezza di "QuotaZ" mm
lcd.print ("Altezza mm ");
lcd.print (QuotaZ);
delay (5000);
}
Dovresti ragionare sempre in termini assoluti.
Come variabili ti conviene usare Quota, VecchiaQuota e Spostamento.
VecchiaQuota è la quota corrente. All'inizio, all'accensione, VecchiaQuota deve avere il valore di partenza della lama/fresa: mettiamo che sia 0.
int QuotaZ = 0;
int VecchiaQuotaZ = 0;
int SpostamentoZ;
Dopo il movimento da VecchiaQuota a Quota, allora assegni il valore a VecchiaQuota. Credo che lo spostamento possa essere anche negativo.
void QuotaAssoluta(){
SpostamentoZ == (QuotaZ - VecchiaQuotaZ);
stepper1.moveTo(SpostamentoZ * 50); // muove l'altezza di "QuotaZ" mm
lcd.print ("Altezza mm ");
lcd.print (QuotaZ);
VecchiaQuotaZ == QuotaZ;
}
Paolo grazie !
è un aiuto prezioso ! mi si sta illuminando il processo.
Praticamente ci sono 2 tempi da considerare, uno all'avvio dove VecchiaQuota viene definita ed infatti è quella a cui il calcolo deve sempre fare riferimento, (forse come hai accennato sarebbe più logico nomnarla "QuotaCorrente") e in un secondo tempo all'interno dell'azione "void QuotaAssoluta" al termine dell'azione viene ridefinita: "VecchiaQuotaZ == QuotaZ;" ovvero prende il valore della quota corrente.(si penso che sia meglio definirla "Quota Corrente" è più preciso).
Come hai intuito il valore può essere sia positivo che negativo.
Ad esempio: all'accensione azzero la mia Sega, poi la sposto a 30 mm di quota, sucessivamente voglio portare il taglio a 80 mm, quindi dalla quota corrente di 30 passo ad 80 spostandomi di +50mm (80-30) ...
successivamente ho bisogno di portare la lama a 20mm quindi (20-80)= -60 mm quindi mi sposterò di -60mm ... WOW mi sembra perfettamente logico (alla fine dello spostamento la mia quota corrente è 20mm e "VecchiaQuotaZ == QuotaZ" lo memorizza !!
GRAZIE !!! ho inserito i nuovi codici e lo skech fila liscio .... ora appena ho Arduino tra le mani provo.
Ciao