Salve a tutti
Premesso che il mio schetc che metto giusto per farvi inorridire dalla mia scrittura
funziona correttamente sia in teoria che in pratica il motore parte da fermo se schiaccio il pulsante la prima volta gira in un senso,la seconda volta gira nell'altro, la terza si fema e mantiene la posizione (il conteggiopassi lo avevo messo per saper in che posizione si trova il motore.....anche se adesso non serve
byte pulsante=2;
int bobina1=8;
int bobina2=9;
byte bobina3=10;
byte bobina4=11;
byte bob1=0;
byte bob2=0;
byte bob3=0;
byte bob4=0;
int conteggiopassi=0;
int girocompleto=512;
int ciclo=0;
int rotazione=0;
int partenza=0;
unsigned velocita=50;
unsigned tempo=0;
void setup()
{
//Assegno i pin
pinMode(pulsante,INPUT);
pinMode(bobina1,OUTPUT);
pinMode(bobina2,OUTPUT);
pinMode(bobina3,OUTPUT);
pinMode(bobina4,OUTPUT);
Serial.begin(9600);
}
void loop()
{
//Letture serial monitor
Serial.print("Ciclo ");
Serial.println(ciclo);
Serial.println("");
Serial.print(bob1);
Serial.print(bob2);
Serial.print(bob3);
Serial.print(bob4);
Serial.println("");
if(ciclo==0){Serial.println("Motore Fermo");}
Serial.println("");
if(digitalRead(pulsante)){Serial.println("Motore Pronto");}
Serial.println("");
if(ciclo!=0)
{
if(partenza==1){Serial.println("Partenza");}
if(rotazione==0){Serial.println("Senso Orario");}
if(rotazione==1){Serial.println("Senso Antiorario");}
Serial.print("Passi ");
Serial.println(conteggiopassi);
}
//Comandi bobine
if(bob1==1){digitalWrite(bobina1,HIGH);}else{digitalWrite(bobina1,LOW);}
if(bob2==1){digitalWrite(bobina2,HIGH);}else{digitalWrite(bobina2,LOW);}
if(bob3==1){digitalWrite(bobina3,HIGH);}else{digitalWrite(bobina3,LOW);}
if(bob4==1){digitalWrite(bobina4,HIGH);}else{digitalWrite(bobina4,LOW);}
//Condizione pulsante
if((digitalRead(pulsante))&&(rotazione==0))//Dice Avanti
{
while(digitalRead(pulsante)){}
rotazione=1;
}
if((digitalRead(pulsante))&&(rotazione==1))//Dice Indietro
{
while(digitalRead(pulsante)){}
rotazione=2;
}
if((digitalRead(pulsante))&&(rotazione==2))//Dice Stop
{
while(digitalRead(pulsante)){}
rotazione=0;
}
//Senso di rotazione
if(rotazione==1)// Esegue Avanti
{
if(millis()>=tempo+velocita)
{
conteggiopassi++;
ciclo++;
tempo=millis();
}
if(ciclo>8){ciclo=1;}
}
if(rotazione==2)//Esegue Indietro
{
if(millis()>=tempo+velocita)
{
conteggiopassi--;
ciclo--;
tempo=millis();
}
if(ciclo<1){ciclo=8;}
}
else //Esegue Stop
{
digitalRead(ciclo);
digitalRead(conteggiopassi);
ciclo=ciclo;
}
//Sequenza fasi
if(ciclo==0){bob1=0;bob2=0;bob3=0;bob4=0;}
if(ciclo==1){bob1=1;bob2=0;bob3=0;bob4=0;}
if(ciclo==2){bob1=1;bob2=1;bob3=0;bob4=0;}
if(ciclo==3){bob1=0;bob2=1;bob3=0;bob4=0;}
if(ciclo==4){bob1=0;bob2=1;bob3=1;bob4=0;}
if(ciclo==5){bob1=0;bob2=0;bob3=1;bob4=0;}
if(ciclo==6){bob1=0;bob2=0;bob3=1;bob4=1;}
if(ciclo==7){bob1=0;bob2=0;bob3=0;bob4=1;}
if(ciclo==8){bob1=1;bob2=0;bob3=0;bob4=1;}
}
Ho provato a mettere fuori dal LOOP giusto per renderlo piu semplice alcuni argomenti,come ad esempio "sequenza fasi"oppure"letture serial monitor",,,,,,ma non mi è ben chiaro il concetto di come richiamarle nel LOOP.