Take a look at this test code. I think method 1 essentially is what you are doing at the moment. Method 2 hopefully solves your issue.
void setup() {
Serial.begin(115200);
Serial.println("\nTesting error angle calculation method 1");
// These should all cause the same error angle (+2 deg)
calculate1(358, 0);
calculate1(359, 1);
calculate1( 0, 2);
// These should all cause the same error angle (-2 deg)
calculate1( 0, 358);
calculate1( 1, 359);
calculate1( 2, 0);
Serial.println("\nTesting error angle calculation method 2");
// These should all cause the same error angle (+2 deg)
calculate2(358, 0);
calculate2(359, 1);
calculate2( 0, 2);
// These should all cause the same error angle (-2 deg)
calculate2( 0, 358);
calculate2( 1, 359);
calculate2( 2, 0);
}
void loop() {
}
void calculate1(int courseDeg, int headingDeg) {
int errorAngle = (headingDeg - courseDeg); //calculate difference between heading and course
printAngle("headingDeg", headingDeg);
printAngle("courseDeg", courseDeg);
printAngle("errorAngle", errorAngle);
Serial.println();
}
void calculate2(int courseDeg, int headingDeg) {
int errorAngle = (headingDeg - courseDeg); //calculate difference between heading and course
if (errorAngle < -180) errorAngle += 360;
else if (errorAngle > 180) errorAngle -= 360;
printAngle("headingDeg", headingDeg);
printAngle("courseDeg", courseDeg);
printAngle("errorAngle", errorAngle);
Serial.println();
}
void printAngle(const char* text, int angle) {
Serial.print(text);
Serial.print("=");
Serial.print(angle);
Serial.print(" ");
}
This produces the following output on the serial monitor
Testing error angle calculation method 1
headingDeg=0 courseDeg=358 errorAngle=-358
headingDeg=1 courseDeg=359 errorAngle=-358
headingDeg=2 courseDeg=0 errorAngle=2
headingDeg=358 courseDeg=0 errorAngle=358
headingDeg=359 courseDeg=1 errorAngle=358
headingDeg=0 courseDeg=2 errorAngle=-2
Testing error angle calculation method 2
headingDeg=0 courseDeg=358 errorAngle=2
headingDeg=1 courseDeg=359 errorAngle=2
headingDeg=2 courseDeg=0 errorAngle=2
headingDeg=358 courseDeg=0 errorAngle=-2
headingDeg=359 courseDeg=1 errorAngle=-2
headingDeg=0 courseDeg=2 errorAngle=-2