Buzzer passivo mi da problemi

Buongiorno a tutti, mi sono appena iscritto, se non ho sbagliato a fare qualcosa sono passato prima a fare la presentazione :slight_smile: .
volevo illustrarvi un problema che sono 3 ore che non riesco a capire dove sta il problema.
ho in mente un progettino con LM35, un sensore pioggia MH-RD, sensore SR04t, lcd 1602 e un buzzer passivo.

il programma funziona bene, almeno per quello che so fare, non mi da errore, l’unico problema che ho
che quando rilevo la distanza al di sotto di 70cm con SR04t, oltre a visualizzare su Lcd la distanza, mi deve suonare il buzzer ad intermittenza in base alla distanza.

fino a qui mi funziona tutto… unico problema che al primo suono del buzzer mi si spegne la retroilluminazione del Lcd , solo la retro, Lcd continua a funzionare.
ho provato anche ad alimentare il buzzer esternamente e comandarlo con un 2n2222 pensavo fosse problema di assorbimento, ma niente… fa sempre così.

mi potete far capire perché?

Grazie mille a tutti

#include <Wire.h>--
#include <LiquidCrystal_I2C.h>

#define I2C_ADDOR 0X27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7

int buzzer = 7;          //variabile buzzer al pin 6


LiquidCrystal_I2C LCD(I2C_ADDOR, En_pin , Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);

#define BACKLIGHT_PIN 3  //pin per retroilluminazione
#define TRIG_PIN 8
#define ECHO_PIN 9      //pin per sr04

   

void setup() {
  LCD.begin (16, 2); //accende LCD
  LCD.setBacklightPin(BACKLIGHT_PIN, POSITIVE);     //accende retroilluminazione
  LCD.backlight();
  pinMode(BACKLIGHT_PIN, OUTPUT);                  // imposta pin come uscita
  analogWrite(BACKLIGHT_PIN, 70);                 // imposta retro a 130 va da 0 a 255
  
  LCD.setCursor (0, 0);  // imposta cursore riga sopra
  LCD.print ("BENVENUTO!"); //scrive riga 
  LCD.setCursor (0, 1);  //imposta cursore riga sotto 
  LCD.print ("by FRA");
  delay (7000);
  LCD.clear();  //cancella lcd
  delay(500);
  

  pinMode(TRIG_PIN, OUTPUT);                        //assegnazione pin per sr04
  pinMode(ECHO_PIN, INPUT);
  digitalWrite(TRIG_PIN, LOW);
  pinMode (12,LOW);
 
  
  
}

void loop() {
   int v = analogRead(0);
   double vt = (float)(5000.0d/1024.0d)*(float)v;      //calcolo temperatura
   double temp = vt/10.0d;
   float media=0.0;
   for (int n=0; n<10; n++){
   media += temp;
   }
   media = media/10.0;
   delay(1000);
   
    
    digitalWrite(TRIG_PIN,HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIG_PIN,LOW);
    pinMode(buzzer,OUTPUT);     //pin per bazzer
    
   
    
    
    unsigned long tempo = pulseIn (ECHO_PIN,HIGH);
    float velocita = 0.03314 + 0.000062 * 20;
    float distanza = velocita * tempo /2;
    int suono = 500;
    int bip = 100;
    int durata_suono = map(distanza, 0, 70, 0, 10);
    int intermittenza = map(durata_suono, 10,0,0,1500);
   

    if (distanza >70 && distanza <200) {
     
      LCD.clear();
      LCD.setCursor (0,0);
      LCD.print ("DIS: " + String (distanza) + " Cm");
      LCD.setCursor (0,1);
      LCD.print ("");
      delay(500);
      }
      
    else if (distanza <70){ 
      
      LCD.clear();
      LCD.setCursor (0,0);
      LCD.print ("DIS: " + String (distanza) + " Cm");
      LCD.setCursor (0,1);
      LCD.print ("");   
      tone(buzzer, suono, intermittenza);
      delay (500);
    
    }
    else if (distanza >200){

    LCD.clear();
    LCD.setCursor (0,0);
    LCD.print ("Temperatura");
    LCD.setCursor (0,1);
    LCD.print (String (media)+    " C");
    delay (500);
    }
    
             
}

ovviamente per creare il codice ho preso un po’ qua e un po’ la, da solo non sarei riuscito.

Dal reference di tone: "Use of the tone() function will interfere with PWM output on pins 3 and 11", cioè va usato un altro pin PWM che non sia 3 o 11.

kaytennae:
Buongiorno a tutti, mi sono appena iscritto,

mi potete far capire perché?

#define D7_pin 7

int buzzer = 7;          //variabile buzzer al pin 6

anche qui ci deve essere un po' di confusione, temo

che poi, se uno deve commentare, che almeno commenti giusto

il commento è stato solo un errore di scrittura, perdonami

è vero, ma purtroppo questa cosa non l'ho capita.
ho preso una libreria per far funzionare un LCD (cinese), e ho seguito una guida su youtube, perché non riuscivo a farlo funzionare con la libreria che avevo.....non so se si può altrimenti vi direi anche quale video ho seguito, libreria NewLiquidCrystal_lib.

il mio LCD è collegato I2C, con vcc gnd, e sda e scl su su A4 e A5.
ho visto anche io che sembra che sia collegato senza I2C, ma i pin definiti all'inizio sono tutti vuoti.

non so se sono riuscito a farmi capire..... scusatemi

ho risolto cambiando libreria… grazie!!!