====== 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 }