====== Analog Input ======
As we have seen, an Arduino digital input is one that have one of two states: HIGH or LOW. Most Arduino implementations also permit you to connect an input whose value can be any value between 0 volts and (by default) the power-supply voltage, and then convert the input level to an integer value between 0 an 1023. The Arduino literature refers to these as "analog" inputs. The process of converting a physical analog signal to a digital representation is called **analog to digital conversion** (**ADC**).
Consult the documentation for your specific Arduino board to determine which pins support analog input. On the Arduino UNO, inputs A0 through A5 can be used as analog inputs.
===== Night light =====
The following example uses an analog input and a digital output to build a simple night-light. A cadmium-sulfide photo-sensitive resistor (commonly called CdS cells) is used in a voltage divider setup to produce a voltage that changes with the amount of light incident on the sensor. If the voltage is above a certain threshold, the Arduino will turn on the LED.
CdS cells are notoriously tweaky devices. A lot of experimentation with your particular cell will probably be required to see what your circuit is actually doing---quite likely requiring the use of the serial communication to report the ADC values (see [[light_meter|this]] for an example).
There are more reliable and calibrated light-level sensors available that may be a better (but significantly more expensive!) choice if you wish not to deal with the tweakiness of Cds cells.
FIXME We need a circuit diagram
In the following example, we output the light-level reading to serial communication. This should help you get a feel for the range of numbers that result from for your particular unit.
/*
CdS to Serial
Ouptut the reading on the CdS pin to Serial.
*/
const int inputPin = A0; // use analog 0 (A0) as input pin
const int ledPin = 13; // connect the LED to pin 13
int lightLevel = 0; // used to store the input value
void setup() {
Serial.begin(9600); // initialize serial communication
pinMode(ledPin, OUTPUT); // make LED's pin an output
}
void loop() {
lightLevel = analogRead(inputPin); // get an analog reading
Serial.println(lightLevel); // print out the reading
delay(500); // delay between reads
}
And here is the working nightlight. You may have to adjust ''lightThreshold'' so it works well with your particular CdS cell.
/*
NightLight
Turn an LED on when the ambient light is below a certain value.
*/
const int lightThreshold = 800; // value below which LED turns on
const int inputPin = A0; // use analog 0 (A0) as input pin
const int ledPin = 13; // connect the LED to pin 13
int lightLevel = 0; // used to store the input value
void setup() {
pinMode(ledPin, OUTPUT); // make LED's pin an output
}
void loop() {
lightLevel = analogRead(inputPin); // get an analog reading
if (lightLevel <= lightThreshold)
digitalWrite(ledPin, HIGH); // turn the LED on
else
digitalWrite(ledPin, LOW); // turn the LED off
}