.. note::

    Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

    **Warum beitreten?**

    - **Expertenunterstützung**: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
    - **Lernen & Teilen**: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
    - **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
    - **Spezialrabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
    - **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

    👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [|link_sf_facebook|] und treten Sie heute bei!

.. _3.1.5_c:

3.1.5 Batterieanzeige
==================================

Einführung
--------------

In diesem Projekt erstellen wir ein Gerät zur Batterieanzeige, das
den Batteriestatus auf einem LED-Balkendiagramm visuell darstellen kann.

Benötigte Komponenten
------------------------------

Für dieses Projekt benötigen wir die folgenden Komponenten.

.. image:: ../img/list_Battery_Indicator.png
    :align: center

Es ist sicherlich praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

.. list-table::
    :widths: 20 20 20
    :header-rows: 1

    *   - Name	
        - ARTIKEL IN DIESEM KIT
        - LINK
    *   - Raphael Kit
        - 337
        - |link_Raphael_kit|

Sie können sie auch einzeln über die untenstehenden Links kaufen.

.. list-table::
    :widths: 30 20
    :header-rows: 1

    *   - KOMPONENTENVORSTELLUNG
        - KAUF-LINK

    *   - :ref:`cpn_gpio_board`
        - |link_gpio_board_buy|
    *   - :ref:`cpn_breadboard`
        - |link_breadboard_buy|
    *   - :ref:`cpn_wires`
        - |link_wires_buy|
    *   - :ref:`cpn_resistor`
        - |link_resistor_buy|
    *   - :ref:`cpn_bar_graph`
        - \-
    *   - :ref:`cpn_adc0834`
        - \-

Schaltplan
-------------------

============ ======== ======== ===
T-Board Name physical wiringPi BCM
GPIO17       Pin 11   0        17
GPIO18       Pin 12   1        18
GPIO27       Pin 13   2        27
GPIO25       Pin 22   6        25
GPIO12       Pin 32   26       12
GPIO16       Pin 36   27       16
GPIO20       Pin 38   28       20
GPIO21       Pin 40   29       21
GPIO5        Pin 29   21       5
GPIO6        Pin 31   22       6
GPIO13       Pin 33   23       13
GPIO19       Pin 35   24       19
GPIO26       Pin 37   25       26
============ ======== ======== ===

.. image:: ../img/Schematic_three_one5.png
   :align: center

Experimentelle Verfahren
-------------------------

**Schritt 1:** Schaltung aufbauen.

.. image:: ../img/image248.png

**Schritt 2:** Zum Ordner des Codes navigieren.

.. raw:: html

   <run></run>

.. code-block:: 

    cd ~/raphael-kit/c/3.1.5/

**Schritt 3:** Code kompilieren.

.. raw:: html

   <run></run>

.. code-block:: 

    gcc 3.1.5_BatteryIndicator.c -lwiringPi

**Schritt 4:** Die ausführbare Datei starten.

.. raw:: html

   <run></run>

.. code-block:: 

    sudo ./a.out

Nachdem das Programm gestartet wurde, verbinden Sie den 3. Pin des ADC0834 und GND jeweils mit einem Kabel und führen Sie diese dann zu den beiden Polen einer Batterie. Sie können sehen, wie die entsprechende LED auf dem LED-Balkendiagramm aufleuchtet, um den Leistungsstand anzuzeigen (Messbereich: 0-5V).

.. note::

    Wenn es nach dem Starten nicht funktioniert oder ein Fehlerhinweis erscheint: \"wiringPi.h: No such file or directory\", verweisen Sie bitte auf :ref:`install_wiringpi`.

**Code-Erklärung**

.. code-block:: c

    void LedBarGraph(int value){
        for(int i=0;i<10;i++){
            digitalWrite(pins[i],HIGH);
        }
        for(int i=0;i<value;i++){
            digitalWrite(pins[i],LOW);
        }
    }

Diese Funktion dient zur Steuerung des Ein- oder Ausschaltens der 10 LEDs
auf dem LED-Balkendiagramm. Wir geben diesen 10 LEDs zuerst hohe Levels, um sicherzustellen, dass sie ausgeschaltet sind, und entscheiden dann, wie viele LEDs durch Ändern des empfangenen Analogwertes eingeschaltet werden.

.. code-block:: c

    int main(void)
    {
        uchar analogVal;
        if(wiringPiSetup() == -1){ //when initialize wiring failed,print messageto screen
            printf("setup wiringPi failed !");
            return 1;
        }
        pinMode(ADC_CS,  OUTPUT);
        pinMode(ADC_CLK, OUTPUT);
        for(int i=0;i<10;i++){       //make led pins' mode is output
            pinMode(pins[i], OUTPUT);
            digitalWrite(pins[i],HIGH);
        }
        while(1){
            analogVal = get_ADC_Result(0);
            LedBarGraph(analogVal/25);
            delay(100);
        }
        return 0;
    }

analogVal produziert Werte (**0-255**) bei unterschiedlichen Spannungswerten
(**0-5V**), z.B., wenn eine 3V an einer Batterie erkannt wird, wird der entsprechende
Wert **152** auf dem Voltmeter angezeigt.

Die **10** LEDs auf dem LED-Balkendiagramm werden verwendet, um die
**analogVal**-Ablesungen anzuzeigen. 255/10=25, also jedes Mal, wenn der Analogwert um **25** steigt, wird eine weitere LED eingeschaltet, z.B., wenn “analogVal=150 (etwa 3V), sind 6 LEDs eingeschaltet.”

Phänomen-Bild
--------------------

.. image:: ../img/image249.jpeg
   :align: center
