mirror of
https://github.com/arduino/Arduino.git
synced 2024-12-01 12:24:14 +01:00
89 lines
2.4 KiB
C++
89 lines
2.4 KiB
C++
/*
|
|
Conditionals - while statement
|
|
|
|
This example demonstrates the use of while() statements.
|
|
|
|
While the pushbutton is pressed, the sketch runs the calibration routine.
|
|
The sensor readings during the while loop define the minimum and maximum
|
|
of expected values from the photo resistor.
|
|
|
|
This is a variation on the calibrate example.
|
|
|
|
The circuit:
|
|
* photo resistor connected from +5V to analog in pin 0
|
|
* 10K resistor connected from ground to analog in pin 0
|
|
* LED connected from digital pin 9 to ground through 220 ohm resistor
|
|
* pushbutton attached from pin 2 to +5V
|
|
* 10K resistor attached from pin 2 to ground
|
|
|
|
created 17 Jan 2009
|
|
modified 30 Aug 2011
|
|
by Tom Igoe
|
|
|
|
This example code is in the public domain.
|
|
|
|
http://www.arduino.cc/en/Tutorial/WhileLoop
|
|
|
|
*/
|
|
|
|
|
|
// These constants won't change:
|
|
const int sensorPin = A2; // pin that the sensor is attached to
|
|
const int ledPin = 9; // pin that the LED is attached to
|
|
const int indicatorLedPin = 13; // pin that the built-in LED is attached to
|
|
const int buttonPin = 2; // pin that the button is attached to
|
|
|
|
|
|
// These variables will change:
|
|
int sensorMin = 1023; // minimum sensor value
|
|
int sensorMax = 0; // maximum sensor value
|
|
int sensorValue = 0; // the sensor value
|
|
|
|
|
|
void setup() {
|
|
// set the LED pins as outputs and the switch pin as input:
|
|
pinMode(indicatorLedPin, OUTPUT);
|
|
pinMode (ledPin, OUTPUT);
|
|
pinMode (buttonPin, INPUT);
|
|
}
|
|
|
|
void loop() {
|
|
// while the button is pressed, take calibration readings:
|
|
while (digitalRead(buttonPin) == HIGH) {
|
|
calibrate();
|
|
}
|
|
// signal the end of the calibration period
|
|
digitalWrite(indicatorLedPin, LOW);
|
|
|
|
// read the sensor:
|
|
sensorValue = analogRead(sensorPin);
|
|
|
|
// apply the calibration to the sensor reading
|
|
sensorValue = map(sensorValue, sensorMin, sensorMax, 0, 255);
|
|
|
|
// in case the sensor value is outside the range seen during calibration
|
|
sensorValue = constrain(sensorValue, 0, 255);
|
|
|
|
// fade the LED using the calibrated value:
|
|
analogWrite(ledPin, sensorValue);
|
|
}
|
|
|
|
void calibrate() {
|
|
// turn on the indicator LED to indicate that calibration is happening:
|
|
digitalWrite(indicatorLedPin, HIGH);
|
|
// read the sensor:
|
|
sensorValue = analogRead(sensorPin);
|
|
|
|
// record the maximum sensor value
|
|
if (sensorValue > sensorMax) {
|
|
sensorMax = sensorValue;
|
|
}
|
|
|
|
// record the minimum sensor value
|
|
if (sensorValue < sensorMin) {
|
|
sensorMin = sensorValue;
|
|
}
|
|
}
|
|
|
|
|