int varPOS = 0;
//int varCAL = 7200;
int varCAL = 3600;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); // Must be 9600
Serial.println("Hello Arduino\n");
// put your main code here, to run repeatedly:
Serial.println( "calibration " + String(varCAL/3600) + " steps per deg");
varPOS = 0;
Serial.println( "step " + String(varPOS) + ", angle " + getAngleString(varPOS) +"\n" );
//varPOS = 0;
moveAngle(-4003);
Serial.println( "step " + String(varPOS) + ", angle " + getAngleString(varPOS) +"\n");
//varPOS = 0;
moveAngle(4005);
Serial.println( "step " + String(varPOS) + "\n");
varPOS = 0;
moveToAngle(0);
moveToAngle(1811);
moveToAngle(1789);
moveToAngle(-1811);
moveToAngle(-1789);
}
void loop() {
delay(1000);
}
int getStepFromAngle(int fAngle) {
if (fAngle == 0) {
return 0;
}
int fStep = round( ( fAngle / 3600.0 ) * varCAL );
varPOS = varPOS % varCAL;
if (varPOS < 0 ) {
varPOS = varPOS + varCAL;
}
return fStep;
}
void moveAngle(int fAngle) {
if (fAngle == 0) {
return;
}
int fStep = getStepFromAngle(fAngle);
varPOS = varPOS + fStep;
// recalibrate into positive values
varPOS = varPOS % varCAL;
if (varPOS < 0 ) {
varPOS = varPOS + varCAL;
}
return;
}
void moveToAngle(int fToAngle) {
int fStep = getStepFromAngle(fToAngle);
int fDiff = fStep - varPOS;
if (fDiff > varCAL/2) { fDiff = fDiff - varCAL; }
if (fDiff < -varCAL/2) { fDiff = fDiff + varCAL; }
moveAngle(fDiff);
Serial.println( "moved " + String(fDiff) + ", to " + String(varPOS));
return;
}
int getAngleFromStep(int fStep) {
if (fStep == 0) {
return 0;
}
int fAngle = round( ( fStep * 3600.0 ) / varCAL );
// subtract multiples of full circle
fAngle = fAngle % 3600;
if (fAngle < 0 ) {
fAngle = fAngle + 3600;
}
return fAngle;
}
String getAngleReal(int fAngle) {
//Serial.println( String( getAngleFromStep(fAngle)/10.0 ) +" --- \n");
return String( getAngleFromStep(fAngle)/10.0, 1);
}