Abs() function returning a negative number

Hi all,

Writing a really simple piece of code and I cant figure out why abs(x) is reporting a negative number.
As you can see from my serial prints, the value doesnt change after that line of code.

I cant see if I have written it wrong, or done something else which makes it revert back to a negative number?

int potPin = 2;    // select the input pin for the potentiometer
int LED_Clockwise = 12;   // select the pin for the LED
int LED_Anti = 11;   // select the pin for the LED
int val;       // variable to store the value coming from the sensor
int x; //variable which shows how far the potentiometer is from its centre

void setup() {
 Serial.begin(9600);
 pinMode(LED_Anti, OUTPUT);  // declare the ledPin as an OUTPUT
 pinMode(LED_Clockwise, OUTPUT);  // declare the ledPin as an OUTPUT
}

void loop() {
  val = analogRead(potPin);    // read the value from the sensor
  //potentiometer oscilates between 0 and 621 (which corresponds between 0 and 3.3V)
  //1.15V is therefore 311 (rounded)
 
  //LED brightness will be dependent on how close the potentiometer is to its central reading (311)

  x = 311 - val; //distance from central point, but could be negative
  Serial.print("X value before abs = ");
  Serial.println(x);
  delay(500);

  // return modulus of x so the system doesnt attempt to set brightness to a negative number
  
  abs(x);
  Serial.print("X value after abs = ");
  Serial.println(x);
  x = x / 1.22; //brightness cant be higher than 255, 311/1.22 = 255
    
  Serial.print("potentiometer value = ");
  Serial.println(val);
  
  Serial.println(x);

  //different LEDs come on depending on the position of the potentiometer
  //their brightness should dim the closer the potentiometer is to its centre
  
  if (val > 311)
  {
    analogWrite (LED_Clockwise,x);
    digitalWrite (LED_Anti, LOW);
  }
  else
  {
    digitalWrite (LED_Clockwise,LOW);
    analogWrite (LED_Anti,x);
  }

try

x = abs(x);

abs returns a value; you happily ignore it :wink:

Actually abs() can return a negative number for the most negative integer -32768, since there is
no representation of +32768 in 16 bit signed int.

But yes, you have to look at the result it returns, its a pure function, it doesn't do side-effects.