Once you get past your first few projects with the Arduino, you soon realize that the calibration method they show on their webpage is just a sample and cannot be used with many sensors without polluting your code with a ton of variables.
So, here it is. My own take on sensor calibration library. You can download the source code and a more detailed explanation on the github Calibrator page.
This is how you use it:
#include <Calibrator.h> Calibrator calibrator; int sensorPin = A0; // The sensor we want to calibrate int ledPin = 13; // Will indicate when calibration is going on void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, HIGH); // Turn LED on Serial.begin(9600); // Reset the calibrator. You only need to call reset() if you restart calibration again but // if calibration is only run once like in this example is not needed. It doesn't hurt to // call it here though. calibrator.reset(); // Run calibration automatically during the first // five seconds (or 5000 milliseconds) your code runs. // It is important that during calibration you "exercise" your sensors to measure both // ends of their range. while (millis() < 5000) { calibrator.setValue(analogRead(sensorPin)); } digitalWrite(ledPin, LOW); // Turn LED off } void loop() { // In your code analogRead(sensorPin) will give you the uncalibrated value // and calibrator.getValue(analogRead(sensorPin)) will give you the calibrated value Serial.print("Sensor value: "); Serial.print(analogRead(sensorPin)); Serial.print(" , Calibrator value: "); Serial.println(calibrator.getValue(analogRead(sensorPin))); }