Due ingressi e unica uscita (RISOLTO)

Buonasera a tutti.

Sto provando un paio di sensori PIR che mi sono arrivati da poco. Li ho testati singolarmente e funzionano correttamente, quando c'è movimento l'ingresso va a HIGH e accendo un buzzer.

Il mio problema (che sarà sicuramente una stupidata) è che non riesco ad accendere lo stesso buzzer usando i due ingressi nello stesso sketch, ma il buzzer si attiva solo con un PIR, con l'altro niente da fare.

Copio il codice che sicuramente si capirà meglio.

int statoSensoreEsterno;
int statoSensoreCorridoio;
int buzzer = 52;

int contatoreEsterno = 0;

 
void setup() {

  Serial.begin(115200);

  pinMode(50, INPUT);
  pinMode(51, INPUT);
  pinMode(buzzer , OUTPUT); 
  pinMode(53, INPUT);  

}
 
void loop()  {

 
 //SENSORE ESTERNO 
  statoSensoreEsterno = digitalRead(50);

  if (statoSensoreEsterno == HIGH)   digitalWrite(buzzer, HIGH);
  else if  (statoSensoreEsterno == LOW)   digitalWrite(buzzer, LOW);


 //SENSORE CORRIDOIO 
  statoSensoreCorridoio = digitalRead(53);

  if (statoSensoreCorridoio == HIGH)   digitalWrite(buzzer, HIGH);
  else if  (statoSensoreCorridoio == LOW) digitalWrite(buzzer, LOW);

  delay(200);    
 
}

Praticamente così com'è mi attiva il buzzer solo con il sensoreCorridoio, l'esterno non si attiva.
Come detto sopra, provandoli separatamente, il buzzer si attiva in entrambi i casi.

Grazie per l'aiuto.

Guardiamo se questa volta ci si riesca a scrivere [RISOLTO]!

if (digitalRead(50)== 1 ||  digitalRead(53)== 1)   digitalWrite(buzzer, 1);
else  digitalWrite(buzzer, 0);

pablos, quindi non si possono settare le uscite in più parti dello sketch ma solo in un punto unico?

cosa intendi per settare gli output?
io per settare intendo questo ..... fare un set di un output

pinMode(buzzer , OUTPUT);

tu invece cosa intendi?

Scusa se probabilmente sbaglio parole, intendo quando vado proprio a "scrivere " l'uscita ( digitalwrite).

sai che non capisco la domanda ? ... sono rinco forse ahahahahhahaha
puoi cambiare la condizione dell'output dove ti pare nello sketch, tu hai detto che il buzzer funziona solo su un pir e l'altro no, io ti ho messo una condizione OR senza troppe righe ... non ti funziona così?

pablos:

if (digitalRead(50)== 1 ||  digitalRead(53)== 1)   digitalWrite(buzzer, 1);

else  digitalWrite(buzzer, 0);

La soluzione è questa, perchè non puoi mettere a LOW il buzzer quando il primo oppure il secondo input è LOW.
Il buzzer deve essere acceso se il primo oppure ( OR || ) il secondo è HIGH

Guarda bene il codice che avevi scritto.

Se il sensore esterno è ATTIVATO e quello interno DISATTIVATO il codice:

  • vede che l'esterno è attivo e porta il buzzer ad ATTIVO
  • subito dopo vede che l'interno è disattivato e porta il buzzer a DISATTIVATO

quindi in realtà il buzzer si attiva ma per un istante...

se invece è attivo quello interno, allora quel delay te lo fa stare attivo e poi si disattiva per un istante e si riattiva.

Per questo motivo ti hanno detto di usare quell'OR.

In generale i digitalWrite li puoi usare dove ti pare, però devi vedere cosa succede...

Credo ci sia una altro errore, più che altro concettuale: i pin 50, 51, 52 e 53 della MEGA sono riservati alla comunicazione SPI e, anche se utilizzabili, è meglio non usarli.

Porco giuda avete ragione, sono proprio fuori in questo periodo..

Se anche un sensore si attiva, c'è la l'altro che mi tiene l'uscita disattivata.. Praticamente per funzionare dovrebbero attivarsi tutti e due contemporaneamente..

cyberhs, non sapevo questa cosa, cambio subito i pin, grazie per la segnalazione.

Vi ringrazio tutti quanti per l'aiuto e vi auguro una buona serata! :slight_smile: