const int sensorPin = A0; // pin that the sensor is attached to
const int ledPin = PB0; // pin that the LED is attached to
const int indicatorLed = PB7;// pin to indicate the calibration period
// variables:
int sensorValue = 0; // the sensor value
int sensorMin = 1023; // minimum sensor value
int sensorMax = 0; // maximum sensor value
void setup() {
Serial.begin(115200);
// turn on LED to signal the start of the calibration period:
pinMode(indicatorLed, OUTPUT);
digitalWrite(indicatorLed, HIGH);
// calibrate during the first five seconds
while (millis() < 10000) {
sensorValue = analogRead(sensorPin);
// record the maximum sensor value
if (sensorValue > sensorMax) {
sensorMax = sensorValue;
}
// record the minimum sensor value
if (sensorValue < sensorMin) {
sensorMin = sensorValue;
}
Serial.print("sensorMin:");
Serial.print(sensorMin);
Serial.print(',');
Serial.print("sensorMax:");
Serial.print(sensorMax);
Serial.print(',');
Serial.print("sensorValue:");
Serial.println(sensorValue);
}
Serial.println("Calibration Done.");
// signal the end of the calibration period
digitalWrite(indicatorLed, LOW);
}
void loop() {
// read the sensor:
sensorValue = analogRead(sensorPin);
// 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);
}