5.1 Verlichtingssysteem

5.1.1 Een LED laten oplichten

Open de 5.1.1Blink code met Arduino IDE.

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

Kies het ESP32 Dev Module bord en de COM poort, en upload de code.

51454125

Testresultaat:

De LED knippert elke seconde, omdat io27 op het ESP32 bord afwisselend elke seconde een hoog en laag niveau uitvoert.

Vermogensniveau

Resultaat

HIGH

LED AAN

LOW

LED UIT

image-20250417101137576

5.1.2 De LED bedienen met PWM

Open de 5.1.2PWM code met Arduino IDE.

#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);
  }
}

Kies het ESP32 Dev Module bord en de COM poort, en upload de code.

5458448

Testresultaat:

Bij een geschikte signaalfrequentie verandert PWM de effectieve uitgangsspanning door de duty cycle in één periode te wijzigen. Eenvoudig gezegd, binnen een bepaalde tijd, hoe meer hoog niveau de IO-poort uitvoert, hoe groter de PWM-waarde is, en hoe helderder de LED zal zijn.

De LED-module zal langzaam oplichten van donker naar helder, en dan van donker naar helder.

cou1k3

5.1.3 De digitale waarde van de knop uitlezen

Open de 5.1.3Button code met Arduino IDE.

#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);
}

Kies het ESP32 Dev Module bord en de COM poort, en upload de code.

5458448

Testresultaat:

Open de seriële monitor en stel de baudrate in op 9600.

Wanneer de knop wordt losgelaten, is de waarde 1; als u de knop indrukt, wordt deze 0.

Het principe van de knopmodule is een circuit dat door deze knop wordt bediend.

Wanneer de knop wordt ingedrukt, wordt het circuit gesloten zodat stroom via de knop naar GND gaat, waardoor de digitale ingangspin een laag niveau detecteert.

Wanneer de knop wordt losgelaten, wordt het circuit onderbroken en stijgt het pintniveau door een pull-up weerstand, waardoor de digitale pin een hoog niveau detecteert.

image-20250417111724001

5.1.4 Zelfvergrendelende knop

Open de 5.1.4 Self-Locking_Button code met Arduino IDE.

#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); 
  }
}

Kies het ESP32 Dev Module bord en de COM poort, en upload de code.

5458448

Testresultaat:

Open de seriële monitor en stel de baudrate in op 9600.

Wanneer u de knop één keer indrukt, wordt 1 weergegeven. Als u de knop voor de tweede keer indrukt, wordt de waarde 0. Nu heeft een gewone knop de functie van een zelfvergrendelende knop.

image-20250417111849947

5.1.5 Gebruik de knop om de LED-module te bedienen

Open de 5.1.5 Lighting-System code met Arduino IDE.

#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); 
  }
}

Kies het ESP32 Dev Module bord en de COM poort, en upload de code.

5458448

Testresultaat:

Als je de knop één keer indrukt, gaat de LED branden; als je hem nogmaals indrukt, gaat de LED uit. Deze handeling herhaalt zich, wat overeenkomt met het werkingsprincipe van verlichting in de praktijk.