### 5.1 Beleuchtungssystem #### 5.1.1 Eine LED zum Leuchten bringen Öffnen Sie den Code **5.1.1Blink** mit der Arduino IDE. ```c #define LED_BUILTIN 27 //LED pins void setup() { // initialize digital pin LED_BUILTIN as an output. pinMode(LED_BUILTIN, OUTPUT); } // the loop function runs over and over again forever void loop() { digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } ``` Wählen Sie das Board **ESP32 Dev Module** und den **COM**-Port aus und laden Sie den Code hoch. ![51454125](../media/51454125.png) **Testergebnis:** Die LED blinkt pro Sekunde, da io27 auf dem ESP32-Board jede Sekunde abwechselnd einen hohen und niedrigen Pegel ausgibt. | Leistungspegel | Ergebnis | | --- | --- | | HIGH | LED AN | | LOW | LED AUS | ![image-20250417101137576](../media/image-20250417101137576.png) #### 5.1.2 Die LED mit PWM steuern Öffnen Sie den Code **5.1.2PWM** mit der Arduino IDE. ```c #define led 27 //Define LED pin void setup(){ pinMode(led, OUTPUT); //Set pin to output mode } void loop(){ for(int i=0; i<255; i++) //for loop statement. Constantly increase variable i till 255, exit the loop { analogWrite(led, i); //PWM output, used to control the brightness of LED delay(3); } for(int i=255; i>0; i--) //for loop statement. Constantly decrease variable i till 0, exit the loop { analogWrite(led, i); delay(3); } } ``` Wählen Sie das Board **ESP32 Dev Module** und den **COM**-Port aus und laden Sie den Code hoch. ![5458448](../media/5458448.png) **Testergebnis:** Bei einer geeigneten Signalfrequenz ändert PWM die effektive Ausgangsspannung, indem es das Tastverhältnis in einer Periode ändert. Einfach ausgedrückt: Innerhalb einer bestimmten Zeit gilt, je höher der IO-Port einen hohen Pegel ausgibt, desto größer ist der PWM-Wert und desto heller leuchtet die LED. **Das LED-Modul leuchtet langsam von dunkel nach hell auf und dann wieder von dunkel nach hell.** ![cou1k3](../media/cou1k3.png) #### 5.1.3 Den digitalen Wert des Tasters lesen Öffnen Sie den Code **5.1.3Button** mit der Arduino IDE. ```c #define ButtonPin 5 //Define the button pin to 5 void setup() { //initialize serial port and set baud rate to 9600 Serial.begin(9600); //Set pin to input mode pinMode(ButtonPin,INPUT); } void loop() { //Define a value as the read button value int ReadValue = digitalRead(ButtonPin); //Serial port prints the defined value Serial.print("The current status of the button is : "); Serial.println(ReadValue); delay(500); } ``` Wählen Sie das Board **ESP32 Dev Module** und den **COM**-Port aus und laden Sie den Code hoch. ![5458448](../media/5458448.png) **Testergebnis:** Öffnen Sie den seriellen Monitor und stellen Sie die Baudrate auf 9600 ein. Wenn die Taste losgelassen wird, ist der Wert 1; wenn Sie die Taste drücken, wird er 0. Das Prinzip des Tastenmoduls ist ein Schaltkreis, der von dieser Taste gesteuert wird. Wenn die Taste gedrückt wird, ist der Stromkreis geschlossen, so dass Strom durch die Taste zu GND fließt, wodurch der digitale Eingangspin einen niedrigen Pegel erkennt. Wenn die Taste losgelassen wird, wird der Stromkreis unterbrochen und der Pin-Pegel steigt aufgrund eines Pull-up-Widerstands an, wodurch der digitale Pin einen hohen Pegel erkennt. ![image-20250417111724001](../media/image-20250417111724001.png) #### 5.1.4 Selbsthaltender Taster Öffnen Sie den Code **5.1.4 Self-Locking_Button** mit der Arduino IDE. ```c #define ButtonPin 5 //Define the button pin int value = 0; //Define a value to determine the status of button void setup() { //Initialize the serial port and set baud rate to 9600 Serial.begin(9600); //Set the pin to inpu tmode pinMode(ButtonPin,INPUT); } void loop() { //Define a value as the read button value int ReadValue = digitalRead(ButtonPin); //Detect whether the button is pressed if (ReadValue == 0) { //Eliminate the button shake delay(10); if (ReadValue == 0) { value = !value; Serial.print("The current status of the button is : "); Serial.println(value); } //Detect again whether the button is still pressed //Pressed: execute the loop; Released: exit the loop to next step while (digitalRead(ButtonPin) == 0); } } ``` Wählen Sie das Board **ESP32 Dev Module** und den **COM**-Port aus und laden Sie den Code hoch. ![5458448](../media/5458448.png) **Testergebnis:** Öffnen Sie den seriellen Monitor und stellen Sie die Baudrate auf 9600 ein. Wenn Sie die Taste einmal drücken, wird 1 angezeigt. Wenn Sie die Taste ein zweites Mal drücken, wird der Wert 0. Nun verfügt eine gewöhnliche Taste über die Funktion eines selbsthaltenden Tasters. ![image-20250417111849947](../media/image-20250417111849947.png) #### 5.1.5 Den Taster zur Steuerung des LED-Moduls verwenden Öffnen Sie den Code **5.1.5 Lighting-System** mit der Arduino IDE. ```c #define ButtonPin 5 //Define a button pin #define LED 27 //Define LED pin int value = 0; //Define a value to detect button status void setup() { //initialize serial port and set baud rate to 9600 Serial.begin(9600); //Set pin to input mode pinMode(ButtonPin,INPUT); //Set pin to output mode pinMode(LED,OUTPUT); } void loop() { //Define a value as the read button value int ReadValue = digitalRead(ButtonPin); //Detect whether the button is pressed if (ReadValue == 0) { //Eliminate the button shake delay(10); if (ReadValue == 0) { value = !value; //Detect the button status, press once to light up LED, press again to turn off LED, in a loop if(value) { digitalWrite(LED,HIGH); }else{ digitalWrite(LED,LOW); } } //Detect the button status again //Pressed: execute the loop; Released: exit the loop to next step while (digitalRead(ButtonPin) == 0); } } ``` Wählen Sie das Board **ESP32 Dev Module** und den **COM**-Port aus und laden Sie den Code hoch. ![5458448](../media/5458448.png) **Testergebnis:** Wenn Sie die Taste einmal drücken, leuchtet die LED auf; wenn Sie sie erneut drücken,