Se non alleghi lo sketch la vedo dura risponderti
/*
* MotorKnob
*
* A stepper motor follows the turns of a potentiometer
* (or other sensor) on analog input 0.
*
* http://www.arduino.cc/en/Reference/Stepper
* This example code is in the public domain.
*/
#include <Stepper.h>
// change this to the number of steps on your motor
#define STEPS 100
// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to
Stepper stepper(STEPS, 8, 9, 10, 11);
// the previous reading from the analog input
int previous = 0;
void setup() {
// set the speed of the motor to 30 RPMs
stepper.setSpeed(30); //questo valore solitamente lo metto a 100
}
void loop() {
// get the sensor value
int val = analogRead(0);
// move a number of steps equal to the change in the
// sensor reading
stepper.step(val - previous);
// remember the previous value of the sensor
previous = val;
}
Ma che motore hai ?
ho uno step motor da 5v
fa circa 35 giri al minuto e ho visto un video su youtube che lo fa girare al max e penso vada minimo al doppio del mio
altra cosa un led dei 4 sul driver non si accende nonostante sia collegato.... speriamo non si sia fulminata una delle 4 bobine
Ah, ho capito quale stepper hai.....
qui trovi tutto quello che c'è da sapere , anche il fatto che hai definito male i pin
https://arduino-info.wikispaces.com/SmallSteppers
grazie mille risolto il problema va alla grande!
ragazzi ho provato a fare uno sketch ma non mi sente il motore
secondo voi per quale motivo?
questo è il codice
#include <Stepper.h>
//---------------------------------------------------COLLEGAMENTI-----------------------------------------------//
int pulsante0pin=1;
int pulsante1pin=2;
int pulsante2pin=3;
int microswitch0=4;
int microswitch1=5;
int microswitch2=6;
//--------------------------------------------------- VARIABILI LED----------------------------------------------//
int LED_PT_R=14;
int LED_PT_V=15;
int LED_P1_R=16;
int LED_P1_V=17;
int LED_P2_R=18;
int LED_P2_V=19;
//--------------------------------------------------VARIABILI PER PULSANTI--------------------------------------//
int val0=0;
int val1=0;
int val2=0;
//--------------------------------------------------VARIABILI E PASSI DEL MOTORE---------------------------------//
int Steps2Take;
#define StepsPerMotorRevolution 32
#define StepsdaZeroaDue 94*94
#define StepsdaZeroaUno 68*68
#define StepsdaUnoaDue 64*64
Stepper small_stepper(StepsPerMotorRevolution,8,9,10,11);
//=================================================================================================================
void setup() {
pinMode(pulsante0pin,INPUT);
pinMode(pulsante1pin,INPUT);
pinMode(pulsante2pin,INPUT);
pinMode(microswitch0,INPUT);
pinMode(microswitch1,INPUT);
pinMode(microswitch2,INPUT);
pinMode(LED_PT_R,OUTPUT);
pinMode(LED_PT_V,OUTPUT);
pinMode(LED_P1_R,OUTPUT);
pinMode(LED_P1_V,OUTPUT);
pinMode(LED_P2_R,OUTPUT);
pinMode(LED_P2_V,OUTPUT);
Serial.begin(9600);
StepMotor.setSpeed(10);
//=================================================================================================================
}
/*costruzione dei blocchi if else in modo tale che l'ascensore arrivi nel piano desiderato*/
void loop () {
val0 = digitalRead(pulsante0pin); // caso in cui l'ascensore si trova al piano 1 e deve andare al piano 0
if ((val0 == HIGH) && (microswitch1 == HIGH)) { // se il pulsante piano0 è spinto ed è spinto anche il microswitch piano 1 l'ascensore dovrà scendere di tot passi
Steps2Take = -StepsdaUnoaDue; //ascensore scendi di 64x64 passi
small_stepper.setSpeed(700);//alla velocità di 700
}
else if ((val0 == LOW) && (microswitch1 == HIGH)) {
small_stepper.setSpeed(0);
delay(5000);
}
if ((val0 == HIGH) && (microswitch2 == HIGH)) {
Steps2Take = -StepsdaZeroaDue;
small_stepper.setSpeed(700);
}
else if ((val0 == LOW) && (microswitch2 == HIGH)) {
small_stepper.setSpeed(0);
delay(5000);
}
if ((val0 == HIGH) && (microswitch0 == HIGH)) {
delay(10000);
small_stepper.setSpeed(0);
}
if ((val0 == LOW) && (microswitch0 == HIGH)) {
delay(10000);
small_stepper.setSpeed(0);
}
val1 = digitalRead(pulsante1pin);
if ((val1 == HIGH) && (microswitch0 == HIGH)) {
Steps2Take = StepsdaZeroaUno; //salita 0-1
small_stepper.setSpeed(700);
}
else if ((val1 == LOW) && (microswitch0 == HIGH)) {
delay(10000);
small_stepper.setSpeed(0);
}
if ((val1 == HIGH) && (microswitch2 == HIGH)) {
Steps2Take = -StepsdaUnoaDue; //scendi da 2 a 1
small_stepper.setSpeed(700);
}
else if ((val1 == LOW) && (microswitch2 == HIGH)) {
delay(10000);
small_stepper.setSpeed(0);
}
if ((val1 == HIGH) && (microswitch1 == HIGH)) {
delay(10000);
small_stepper.setSpeed(0);
}
else if ((val1 == HIGH) && (microswitch1 == HIGH)) {
delay(10000);
small_stepper.setSpeed(0);
}
val2 = digitalRead(pulsante2pin);
if ((val2 == HIGH) && (microswitch0 == HIGH)) {
Steps2Take = StepsdaZeroaDue; //salire da 0 a 2
small_stepper.setSpeed(700);
}
else if ((val2 == LOW) && (microswitch0 == HIGH)) {
delay(10000);
small_stepper.setSpeed(0);
}
if ((val2 == HIGH) && (microswitch1 == HIGH)) {
Steps2Take = StepsdaUnoaDue; //sali dal piano 1 al piano 2
small_stepper.setSpeed(700);
}
else if ((val2 == LOW) && (microswitch1 == HIGH)) {
delay(10000);
small_stepper.setSpeed(0);
}
if ((val2 == HIGH) && (microswitch2 == HIGH)) {
delay(10000);
small_stepper.setSpeed(0);
}
if ((val2 == LOW) && (microswitch2 == HIGH)) {
delay(10000);
small_stepper.setSpeed(0);
}
perchè vedo solo
small_stepper.setSpeed(700);
dopo manca il codice per muovere lo stepper, ad esempio
small_stepper.step(Steps2Take);
si avevo notato prima di leggere il tuo messaggio che mancava il corrispettivo pezzo del codice,
aggiungendolo a tutte le mie condizioni noto che stranamente il motore non accenna ad accendersi mentre con altri pezzi di codice ad esempio quello che mi hai postato tu giorni fa va tranquillamente....il che mi fa pensare che non senta per niente ne pulsante ne microswitch e così facendo non accende il motore....possibile?
Anche se il cablaggio l'ho ricontrollato più volte ma niente
cominciamo dall'inizio
if ((val0 == HIGH) && (microswitch1 == HIGH)) {
Questo, come tutti gli altri devono diventare
if ((val0 == HIGH) && ( digitalRead (microswitch1) == HIGH)) {
ho provato a riscrivere il codice pensando che il problema fosse il confronto dei 2 switch e micros quando invece dovevo confrontarne 3 alla volta.
Adesso noto che l'ascensore non fa niente
esegue solo senza nessuna pressione del pulsante dal micros1(piano1) va al piano 2 e poi si mette con i due Led accesi in attesa non facendo niente per nessun pulsante
dove può stare il problema ?
#include <Stepper.h>
//---------------------------------------------------COLLEGAMENTI-----------------------------------------------//
int pulsante0pin=1;
int pulsante1pin=2;
int pulsante2pin=3;
int microswitch0=4;
int microswitch1=5;
int microswitch2=6;
//--------------------------------------------------- VARIABILI LED----------------------------------------------//
int LED_PT_R=14;
int LED_PT_V=15;
int LED_P1_R=16;
int LED_P1_V=17;
int LED_P2_R=18;
int LED_P2_V=19;
//--------------------------------------------------VARIABILI E PASSI DEL MOTORE---------------------------------//
int Steps2Take;
int Steps3Take;
int Steps4Take;
#define StepsPerMotorRevolution 32
#define StepsdaZeroaDue 94*94
#define StepsdaZeroaUno 68*68
#define StepsdaUnoaDue 64*64
Stepper small_stepper(StepsPerMotorRevolution,8,10,9,11);
//=================================================================================================================
void setup() {
pinMode(pulsante0pin,INPUT);
pinMode(pulsante1pin,INPUT);
pinMode(pulsante2pin,INPUT);
pinMode(microswitch0,INPUT);
pinMode(microswitch1,INPUT);
pinMode(microswitch2,INPUT);
pinMode(LED_PT_R,OUTPUT);
pinMode(LED_PT_V,OUTPUT);
pinMode(LED_P1_R,OUTPUT);
pinMode(LED_P1_V,OUTPUT);
pinMode(LED_P2_R,OUTPUT);
pinMode(LED_P2_V,OUTPUT);
Serial.begin(9600);
//==================================================PT===============================================================
}
void loop () {
if (digitalRead(4) == HIGH && digitalRead(5) == LOW && digitalRead(6) == LOW) //STATO SWITCH PIANO 0
{
digitalWrite(LED_PT_R,LOW); digitalWrite(LED_PT_V,HIGH);//PT LED VERDE ACCESO LED ROSSO SPENTO
digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO
//===============================================================================================================
if(digitalRead(1) == HIGH && digitalRead(2) == LOW && digitalRead(3) == LOW) //CHIAMATA PT
{
digitalWrite(LED_PT_R,LOW); digitalWrite(LED_PT_V,HIGH);//PT LED VERDE ACCESO LED ROSSO SPENTO
digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO
delay (1000); // NON FARE NIENTE E ATTENDI IL PASSO SUCCESSIVO
}
}
//=================================================================================================================
else if (digitalRead(1) == LOW && digitalRead(2) == HIGH && digitalRead(3) == LOW)//CHIAMATA P1
{
digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO
Steps2Take = StepsdaZeroaUno; // FAI 68*68 PASSI ORARIO
small_stepper.setSpeed(700);
small_stepper.step(Steps2Take);
digitalWrite(LED_P1_R,LOW);digitalWrite(LED_P1_R,HIGH);//ARRIVATO AL PIANO 1 V ON R OFF
}
else if (digitalRead(1) == LOW && digitalRead(2) ==LOW && digitalRead(3) == HIGH)//CHIAMATA P2
{
digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO
Steps3Take = StepsdaZeroaDue; // FAI 94*94 PASSI ORARIO
small_stepper.setSpeed(700);
small_stepper.step(Steps3Take);
digitalWrite(LED_P2_R,LOW);digitalWrite(LED_P2_V,HIGH);
}
//===================================PIANO1=======================================================================
else if (digitalRead(4) == LOW && digitalRead(5) == HIGH && digitalRead (6) == LOW)
{
digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P1_R,LOW);digitalWrite(LED_P1_R,HIGH);//P1 LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO
//=================================================================================================================
if (digitalRead(1) == HIGH && digitalRead(2) == LOW && digitalRead (3) == LOW)
{
digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO
Steps2Take = -StepsdaZeroaUno; // FAI 68*68 ANTIORARIO
small_stepper.setSpeed(700);
small_stepper.step(Steps2Take);
digitalWrite(LED_PT_R,LOW); digitalWrite(LED_PT_V,HIGH);//PT LED VERDE SPENTO LED ROSSO ACCESO
}
else if (digitalRead(1) == LOW && digitalRead(2) == HIGH && digitalRead(3) == LOW ) //CHIAMATA P1
{
digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P1_R,LOW);digitalWrite(LED_P1_R,HIGH);//P1 LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO
delay (1000);
}
//=================================================================================================================
else if (digitalRead(1) == LOW && digitalRead(2) == LOW && digitalRead(3) == HIGH ) // CHIAMATA P2
{
digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO
Steps4Take = StepsdaUnoaDue; //FAI 64*64 PASSI ORARIO
small_stepper.setSpeed(700);
small_stepper.step(Steps4Take);
digitalWrite(LED_P2_R,LOW);digitalWrite(LED_P2_V,HIGH);
}
//===================================PIANO2=======================================================================
else if(digitalRead(4) == LOW && digitalRead(5) == LOW && digitalRead(6) == HIGH )
{
digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P2_R,LOW);digitalWrite(LED_P2_V,HIGH);//P2 LED VERDE SPENTO LED ROSSO ACCESO
//=================================================================================================================
if (digitalRead(1) == HIGH && digitalRead(2) == LOW && digitalRead(3) == LOW )//CHIAMATA PT
{
digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO
Steps3Take = -StepsdaZeroaDue; // FAI 94*94 PASSI AO
small_stepper.setSpeed(700);
small_stepper.step(Steps3Take);
digitalWrite(LED_PT_R,LOW); digitalWrite(LED_PT_V,HIGH);
}
//=================================================================================================================
else if (digitalRead(1) == LOW && digitalRead(2) == HIGH && digitalRead(3) == LOW)//CHIAMATA P1
{
digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO
Steps4Take = -StepsdaUnoaDue; //FAI 64*64 PASSI AO
small_stepper.setSpeed(700);
small_stepper.step(Steps4Take);
digitalWrite(LED_P1_R,LOW);digitalWrite(LED_P1_R,HIGH);
}
//==================================================================================================================
else if ( digitalRead (1) == LOW && digitalRead(2) == LOW && digitalRead(3) == HIGH)//CHIAMATA P2
{
digitalWrite(LED_PT_R,HIGH); digitalWrite(LED_PT_V,LOW);//PT LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
digitalWrite(LED_P2_R,LOW);digitalWrite(LED_P2_V,HIGH);//P2 LED VERDE ACCESO LED ROSSO SPENTO
delay (1000);
}
}
}
}
non mi metto a controllarlo tutto ma solo 2 considerazioni
allora il primo if considera il caso in cui le condizioni sono 4 High 5 e 6 low
poi ti manca l'if 5 high 4 e 6 low
e if 6 high 4 e 5 low
I nomi delle variabili servono a capire cosa fai e devono essere non troppo lunghe altrimenti ti ci perdi
vedi ad esempio
LED_P1_R
LED_P1_V
microswitch1
non è più comprensibile ad esempio
P1Rosso
P1Verde
o al limite ledP1Rosso ledP1Verde
e micro1
comunque a prescindere da come li definisci
se hai definito questi
int microswitch0=4;
int microswitch1=5;
int microswitch2=6;
perchè poi usi questa
if (digitalRead(4) == HIGH && digitalRead(5) == LOW && digitalRead(6) == LOW)
// al posto di questo?
if (digitalRead(microswitch0) == HIGH && digitalRead(microswitch1) == LOW && digitalRead(microswitch2) == LOW)
quindi se microswitch0 è alto
deve fare tutto questo
// rosso verde
digitalWrite(LED_PT_R,LOW); digitalWrite(LED_PT_V,HIGH);//PT LED VERDE ACCESO LED ROSSO SPENTO
// rosso rosso
digitalWrite(LED_P1_R,HIGH);digitalWrite(LED_P1_R,LOW);//P1 LED VERDE SPENTO LED ROSSO ACCESO
// rosso verde
digitalWrite(LED_P2_R,HIGH);digitalWrite(LED_P2_V,LOW);//P2 LED VERDE SPENTO LED ROSSO ACCESO
delay (1000); // NON FARE NIENTE E ATTENDI IL PASSO SUCCESSIVO
quindi al piano 1 il led verde non esiste
e questa linea non attende il passo successivo, SI FERMA TUTTO per un secondo
delay (1000); // NON FARE NIENTE E ATTENDI IL PASSO SUCCESSIVO
Io quando ho un problema simile in un codice ho imparato a fare una cosa:
spengo il computer, stacco Arduino, esco a fare un giro (a me piace camminare, si possono usare altri mezzi) e intanto ripenso da capo il progetto chiarendo bene cosa deve fare e come, e facendo in modo di non dare nulla per sottinteso.
Una volta fatto questo (che può durare ore come giorni, ovviamente intervallato da gite in cucine e bagni e letti) riaccendo il computer, apro un secondo file NUOVO e comincio a tradurre quello che ho pensato in arduinese.
Faccio questo perché un programma con troppa storia è come un vestito con troppi rammendi, non si sa più cosa fosse il vestito e cosa il buco, ma si sa che ti sta stretto e che hai speso una fortuna in stoffe.
Chiarisci bene, quindi, a te stesso come a noi, cosa deve fare l'ascensore in ogni dettaglio, e POI prova a scriverlo in C
allora il funzionamento è il seguente:
l'ascensore ha 3 piani
è composto da un microswitch per piano micros0 micros1 micros2 con corrispondente pulsante0 ''1 ''2 e un motore passo passo.
ho costruito il codice in base a dove si trovasse l'ascensore esempio:
si trova al piano 0? quindi se il micros0 =ALTO and(&&) gli altri due micros1-2 si trovano LOW quindi confermato che l'ascensore si trovi al piano 0 nel caso in cui venga spinto uno dei 3 pulsante tradotto con ELSE IF
pulsante 1(faccio un esempio ) HIGH l'ascensore dovrà salire di tot passi (contati piano per piano grazie al funzionamento del motore passo passo) e si fermetà una volta conclusa la sua corsa
detto ciò si troverà successivamente al piano 1 nel caso sia stato spinto il puls2 e avrà delle nuove condizioni per poi ripetere il procedimento per ogni piano
PROBLEMA
la cabina è troppo pesante quindi ho dovuto ricorrere a un metodo diverso per spingere il motore passo passo oltre alla sua velocità classica che si può trovare con i classici esempi di Arduino,che mi è stato gentilmente linkato da un componente del forum che corrisponde a questo qui
https://arduino-info.wikispaces.com/SmallSteppers
quindi io non dichiaro una velocità costante nel void setup ma vado a dichiarare ogni volta la velocità del mio motore nel void loop con le varie condizioni come è ben visibile nel codice
ed oltre ad esso avendo dei passi diversi per ogni piano vado a dichiare le 3 variabili intstep2-3-4take
per dichiare successivamente quanti passi deve fare.
Adesso io non so se quello che voglio realizzare è possibile farlo nel metodo usato, spero solo di essere stato chiaro con ciò che voglio realizzare e che qualcuno con più esperienza di me mi possa delucidare qualche idea!
grazie mille a chi riesce ad aiutarmi
la situazione di adesso è la seguente
l'ascensore sente solo quando si trova al piano 1 e va automaticamente al piano 2 senza la spinta di alcun pulsante.....
Cominciamo con il dire una cosa:
Il programma si può semplificare e rendere scalabile usando array e funzioni. Sai di cosa sto parlando?
Se si allora trasforma tutte le variabili indicanti cose uguali in un unico array che ne contenga i valori (array per tutti i sensori, array per tutti i pulsanti, array per tutti i passi...) e poi vediano come continuare.
Vantaggi:
- con array il tutto é facilmente scalabile
- tratti tutti gli elementindi un array allo stesso modo per definizione (usando cicli for) e quindi se il problema é di codice non va nessun pezzo dell'array, altrimenti il probkema é chiaramente hardware
- con le funzioni usi lo stesso identico modo per fare le stesse cose in parti diverse del programma, accorciando lo stesso e riducendo gli errori di scrittura possibili
non ho mai usato nulla del genere....
Ok.
Hai un manuale/libro di C? Cerca cosa é e come si crea e usa un array. É facile e molto utile
sto provando a seguire da questo sito:
http://www.alberti-porro.gov.it/wordpress/wp-content/uploads/2014/01/ProgrammareArduino.pdf
ho trovato la parte degli array,ho capito come dichiarare i vari sensori-pulsanti-led
ma una volta che li dichiaro come faccio a descrivere tutto quello che facevo con il mio codice?
il fatto che deve andare di tot passi in senso O e AO solo se determinate variabili corrispondono?
nel tuo listato ci sono dei goto, finche' non spariscono e' inutile ragionarci su
leggi l'ultimo codice.... quello iniziale della prima pagina l'avevo preso come esempio e l'ho modificato nel tempo
mai usati goto