// These constants won't change:
const int sensorPin = A0; // pin that the sensor is attached to
const int ledPin = 9; // pin that the LED is attached to
// Variables:
int sensorValue = 0; // the sensor value
int sensorMin = 1023; // minimum sensor value
int sensorMax = 0; // maximum sensor value
void setup() {
// Turn on LED to signal the start of the calibration period:
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
// Start serial communication for debugging:
Serial.begin(9600);
// Calibrate during the first five seconds
while (millis() < 5000) {
sensorValue = analogRead(sensorPin);
// Record the maximum sensor value
if (sensorValue > sensorMax) {
sensorMax = sensorValue;
}
// Record the minimum sensor value
if (sensorValue < sensorMin) {
sensorMin = sensorValue;
}
}
// Signal the end of the calibration period
digitalWrite(13, LOW);
}
void loop() {
// Read the sensor:
sensorValue = analogRead(sensorPin);
// Print sensor values for debugging:
Serial.print("Sensor Value: ");
Serial.println(sensorValue);
Serial.print("Sensor Min: ");
Serial.println(sensorMin);
Serial.print("Sensor Max: ");
Serial.println(sensorMax);
// In case the sensor value is outside the range seen during calibration
sensorValue = constrain(sensorValue, sensorMin, sensorMax);
// Apply the calibration to the sensor reading
sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);
// Fade the LED using the calibrated value:
analogWrite(ledPin, sensorValue);
}