5.1 Sistema di illuminazione

5.1.1 Accendere un LED

Apri il codice 5.1.1Blink con 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
}

Scegli la scheda ESP32 Dev Module e la porta COM, quindi carica il codice.

51454125

Risultato del test:

Il LED lampeggia al secondo, perché l’io27 sulla scheda ESP32 emette alternativamente un livello alto e basso ogni secondo.

Livello di potenza

Risultato

HIGH

LED ACCESO

LOW

LED SPENTO

image-20250417101137576

5.1.2 Controllare il LED con PWM

Apri il codice 5.1.2PWM con 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);
  }
}

Scegli la scheda ESP32 Dev Module e la porta COM, quindi carica il codice.

5458448

Risultato del test:

Ad una frequenza di segnale appropriata, il PWM modifica la tensione di uscita effettiva cambiando il duty cycle in un periodo. In parole povere, entro un tempo specificato, più alto è il livello che la porta IO emette, maggiore è il valore PWM e più luminoso sarà il LED.

Il modulo LED si accenderà lentamente dal buio al chiaro, e poi di nuovo dal buio al chiaro.

cou1k3

5.1.3 Leggere il valore digitale del pulsante

Apri il codice 5.1.3Button con 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);
}

Scegli la scheda ESP32 Dev Module e la porta COM, quindi carica il codice.

5458448

Risultato del test:

Apri il monitor seriale e imposta la velocità di trasmissione a 9600.

Quando il pulsante viene rilasciato, il valore è 1; se premi il pulsante, diventa 0.

Il principio del modulo pulsante è un circuito controllato da questo pulsante.

Quando il pulsante viene premuto, il circuito si chiude in modo che la corrente passi attraverso il pulsante verso GND, il che fa sì che il pin di ingresso digitale rilevi un livello basso.

Quando il pulsante viene rilasciato, il circuito viene interrotto e il livello del pin aumenta a causa di una resistenza di pull-up, il che fa sì che il pin digitale rilevi un livello alto.

image-20250417111724001

5.1.4 Pulsante auto-bloccante

Apri il codice 5.1.4 Self-Locking_Button con 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); 
  }
}

Scegli la scheda ESP32 Dev Module e la porta COM, quindi carica il codice.

5458448

Risultato del test:

Apri il monitor seriale e imposta la velocità di trasmissione a 9600.

Quando premi il pulsante una volta, verrà visualizzato 1. Se premi il pulsante per la seconda volta, il valore diventa 0. Ora, un pulsante comune vanta la funzione di un pulsante auto-bloccante.

image-20250417111849947

5.1.5 Usare il pulsante per controllare il modulo LED

Apri il codice 5.1.5 Lighting-System con 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); 
  }
}

Scegli la scheda ESP32 Dev Module e la porta COM, quindi carica il codice.

5458448

Risultato del test:

Quando premi il pulsante una volta, il LED si accende; se premi di nuovo, il LED si spegne. Questa operazione è un ciclo, che è coerente con il principio di illuminazione nella realtà.