.. note:: Hello, welcome to the SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community on Facebook! Dive deeper into Raspberry Pi, Arduino, and ESP32 with fellow enthusiasts. **Why Join?** - **Expert Support**: Solve post-sale issues and technical challenges with help from our community and team. - **Learn & Share**: Exchange tips and tutorials to enhance your skills. - **Exclusive Previews**: Get early access to new product announcements and sneak peeks. - **Special Discounts**: Enjoy exclusive discounts on our newest products. - **Festive Promotions and Giveaways**: Take part in giveaways and holiday promotions. 👉 Ready to explore and create with us? Click [|link_sf_facebook|] and join today! .. _measure_light_arduino: Measure Light Intensity ======================== A photoresistor or photocell is a light-controlled variable resistor. The resistance of a photo resistor decreases with increasing incident light intensity; in other words, it exhibits photo conductivity. Therefore, we can use a photoresistor to measure light intensity, and then show it through 5 LEDs. Schematic ----------- .. image:: img/Measure_Light_Intensity.png Wiring ------------------------- In this experiment, we will use 5 LEDs to show the light intensity. The higher the light intensity is, the more LEDs will light up, vice versa. .. image:: img/wiring_measure_light.png Code ---------- .. raw:: html How it works? --------------- .. code-block:: arduino const int ledPins[] = {11, 12, 13, 14, 15}; const int photocellPin = A0; //photoresistor attach to A0 int sensorValue = 0; // value read from the sensor int Level = 0; // sensor value converted into LED 'bars' First of all, there are still various initialization definitions, setting pins and setting initial values ​​of variables. In order to quickly set the input/output status and HIGH/LOW for the 5 LEDs in the following code, here we use the array ``ledPin[]`` to define the 5 LEDs connected to the corresponding pins of the Pico. The element number of the array usually starts from 0. For example, ``ledPin[0]`` refers to GPIO11, and ``ledPin[4]`` refers to GPIO15. * `array `_ .. code-block:: arduino void setup() { Serial.begin(9600); // start serial port at 9600 bps: for (int i = 0; i < 5; i++) { pinMode(ledPins[i], OUTPUT);// make all the LED pins outputs } } In ``setup()``,using the ``for()`` statement set the 5 pins to OUTPUT. The variable ``i`` is added from 0 to 5, and the ``pinMode()`` function sets pin11 to pin15 to OUTPUT in turn. .. code-block:: arduino sensorValue = analogRead(photocellPin); //read the value of A0 Level = map(sensorValue, 0, 1023, 0, 5); // map to the number of LEDs Serial.println(Level); delay(10); In ``loop()``, read the analog value of the photocellPin(A0) and store to the variable sensorValue. The ``map()`` function is used to map 0-1023 to 0-5. It means that the value range of the photoresistor (0-1023) is equally divided into 5 levels, 0-204.8 belongs to Level 0, 204.9-409.6 belongs to Level 1, and 819.2-1023 belong to Level 4. If the value of variable ``sensorValue`` is 300 at this time, then ``Level`` is equal to 1. * `map() `_ .. code-block:: arduino for (int i = 0; i < 5; i++) { if (i <= Level ) //When i is smaller than Level, run the following code. { digitalWrite(ledPins[i], HIGH); // turn on LEDs less than the level } else { digitalWrite(ledPins[i], LOW); // turn off LEDs higher than level } } Now we need to find a way to display the brightness level at this time with LEDs. The ``for()`` statement is used here to perform loop detection in the ``ledPin[]`` array. If the element bit in the array is less than the value of ``Level``, the corresponding GPIO is set to high level, that is, the corresponding LED is lit. If ``Level`` is equal to 1, turn on the LEDs on GPIO11 and GPIO12.