/*
Stepper Motor A4988 Driver Example
No code here - use the pushbutton to rotate a single step, and the switch to control the direction
*/
#define STEP 4
#define DIREZIONE 5
float p_intera=0;
float p_decimale=0;
float spostamento=0;
int direzione=-1;
int errore=0;
void setup() {
Serial.begin(115200); // Any baud rate should work
Serial.println("Digitare il numero di gradi in questa forma:");
Serial.println ("+10,5 (gira di 10,5 gradi in senso orario)");
Serial.println ("-10,5 (gira di 10,5 gradi in senso antiorario)");
Serial.println ("in alternativa alla virgola può essere utilizato anche il punto");
DDRD= B0110000;
}
void loop() {
delay(200);
while (Serial.available()==0);
{
String input=Serial.readString();
if (input)
{
String verso=input.substring(0,1);
String quantita=input.substring(1);
if(verso=="+") direzione =1;
if(verso=="-") direzione =0;
if(quantita.indexOf(",")==-1&&quantita.indexOf(".")==-1)
{
for(int i=1;i<quantita.length();i++)
{
p_intera =p_intera*10+((int)quantita.charAt(i-1)-48);
}
}
if(quantita.indexOf(",")!=-1)
{
String intero=quantita.substring(0,quantita.indexOf(","));
String decimale=quantita.substring(quantita.indexOf(",")+1);
Serial.println(intero);
Serial.println(decimale);
for(int i=0;i<intero.length();i++)
{
if((int)intero.charAt(i)-48 >= 0 && (int)intero.charAt(i)-48<=9)
{
p_intera =p_intera*10+((int)intero.charAt(i)-48);
}
}
for(int i=1;i<decimale.length();i++)
{
if((int)decimale.charAt(i)-48 >= 0 && (int)decimale.charAt(i)-48<=9)
{
p_decimale =p_decimale+((int)decimale.charAt(i-1)-48)*potenza(-i);
}
}
}
if(quantita.indexOf(".")!=-1)
{
String intero=quantita.substring(0,quantita.indexOf("."));
String decimale=quantita.substring(quantita.indexOf(".")+1);
for(int i=0;i<intero.length();i++)
{
if((int)intero.charAt(i)-48 >= 0 && (int)intero.charAt(i)-48<=9)
{
p_intera =p_intera*10+((int)intero.charAt(i)-48);
}
}
for(int i=1;i<decimale.length();i++)
{
if((int)decimale.charAt(i)-48 >= 0 && (int)decimale.charAt(i)-48<=9)
{
p_decimale =p_decimale+((int)decimale.charAt(i-1)-48)*potenza(-i);
}
}
}
spostamento=p_intera+p_decimale;
if (errore==0)
{
if(direzione==1)
PORTD|=B00100000;
else
PORTD&=B11011111;
float n_step=spostamento/0.1125;
for(int i=0; i<n_step; i++)
{
PORTD|=B00010000;
delayMicroseconds(10);
PORTD&=B11101111;
delay(1);
}
}
else Serial.println("rispetta la forma");
p_intera=0;
p_decimale=0;
direzione=-1;
spostamento=0;
errore=0;
}
String prova= "ciao Luca";
//Serial.print (prova.indexOf("g"));
//Serial.print (prova.substring(6));
}
}
float potenza(int potenza)
{ float out=1;
if (potenza>0)
{
for (int i=0;i<potenza;i++)
out=out*10;
}
if (potenza <0)
{
for (int i=0;i>potenza;i--)
out=out/10;
}
return out;
}
/*void spostamento(int dir,float quantita)
{
digitalWrite(DIREZIONE, dir);
float n_step=quantita/0.065;
for(int i=0; i<n_step; i++)
{
digitalWrite(STEP, HIGH);
delayMicroseconds(10);
digitalWrite(STEP, LOW);
delay(1);
}
}*/