Pages: [1]   Go Down
Author Topic: Problema con memorizzazione variabili  (Read 507 times)
0 Members and 1 Guest are viewing this topic.
Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Mechmate #70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
Il mio sketch imposta una variabile "QuotaZ" tramite un menu (MENWIZ),
Code:
   s3=menu.addMenu(MW_VAR,s2,F("Altezza Assoluta"));
      s3->addVar(MW_AUTO_INT,&QuotaZ,0,100,1);
        s3=menu.addMenu(MW_VAR,s2,F("QuotaAssoluta"));
        s3->addVar(MW_ACTION,QuotaAssoluta);
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.
Code:
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);
}
Qualcuno ha da darmi qualche dritta ?
Grazie
« Last Edit: January 29, 2013, 06:32:58 am by Silverdog63 » Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7079
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Code:
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.
Code:
void QuotaAssoluta(){
SpostamentoZ == (QuotaZ - VecchiaQuotaZ);
stepper1.moveTo(SpostamentoZ * 50); // muove l'altezza di "QuotaZ" mm
lcd.print ("Altezza mm ");
lcd.print (QuotaZ);
VecchiaQuotaZ == QuotaZ;
}
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Mechmate #70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Mechmate #70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
SpostamentoZ = (QuotaZ - VecchiaQuotaZ);
VecchiaQuotaZ = QuotaZ;
penso ci vada un solo = vero ?
Logged

Conegliano
Offline Offline
Full Member
***
Karma: 5
Posts: 220
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

x l'assegnazione un simbolo =, se ne metti 2 diventa una comparazione

Ciao
Logged

Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Mechmate #70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie Tapirinho
Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 112
Posts: 7079
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si, scusa, mi è sfuggito un doppio = smiley-roll-sweat
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Roma
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Mechmate #70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Paolo, colpa mia ... li avevo messi nel mio sketch di partenza (ora li ho levati)
Logged

Pages: [1]   Go Up
Jump to: