sketch PIR e Bluetooth

Salve a tutti,
ho da poco iniziato,
desidero collegare il sensore PIR con il modulo Bluetooth
per inviare i dati ad una applicazione Android,
lo sketch dovrebbe essere questo:

#define trigPin 13
#define echoPin 12

int pirPin = 8;
int val;


void setup() {
  Serial.begin (9600);
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);

}

void loop() {

 val = digitalRead(pirPin); 
  
  digitalWrite(trigPin, LOW);  
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10); 
  digitalWrite(trigPin, LOW);
 
if (val == LOW) {
    Serial.print("  "); 
  }
  else {
    Serial.print(" motion "); 
  }

  
  delay(100);
}

è corretto questo sketch?

Per quanto riguarda i collegamenti
desideravo chiederVi:

Secondo il mio sketch

TXD deve essere collegato a RX 0 ?
RXD deve essere collegato a TX 1 ?

oppure alle uscite digitali 13 e 12 come in #define ?

scusate per la poca chiarezza
e grazie per il Vostro aiuto!

Ciao,
il mio consiglio è di NON usare la vera seriale (pin 0 e 1) che invece è conveniente lasciare libera per il debug (… attraverso il monitor seriale) e di usare per il bluetooth una seriale virtuale creata con la SoftwareSerial utilizzando il pin 10 come RX ed il pin 11 come TX.

Ho già visto, in molti casi, cattivi funzionamenti dei moduli bluetooth (HC-05) direttamente collegati alla vera seriale … suppongo per problemi di livelli di segnale … quindi sempre meglio usare la SoftwareSerial :wink:

Ovviamente devi collegare.

TX Bluetooth —> RX Arduino
RX Bluetooth <— TX Arduino

Guglielmo

In questo caso il mio sketch cambia,

Dovrebbe essere così con l’aggiunta di SoftwareSerial…

#include <SoftwareSerial.h>


SoftwareSerial mySerial(10, 11);

int pirPin = 8;
int val;


void setup() {
  Serial.begin (9600);
  pinMode(11, OUTPUT);
  pinMode(10, INPUT);

}

void loop() {
 val = digitalRead(pirPin); //read state of the PIR
  
  digitalWrite(10, LOW);  // Added this line
  digitalWrite(11, HIGH);
  delayMicroseconds(10); // Added this line
  digitalWrite(10, LOW);
 
if (val == LOW) {
    Serial.print("  "); //if the value read is low, there was no motion
  }
  else {
    Serial.print(" motion "); //if the value read was high, there was motion
  }

  
  delay(100);
}

è giusto?

Grazie!

No, la SoftwareSerial crea una seriale virtuale … nel tua caso la mySerial …

  1. Non occorre la pinMode() per i pin usarti dalla SoftwareSerial

  2. la usi come usi la Serial … quindi mySerial.print(), mySerial.println(), mySerial.read(), ecc. ecc. NON gestendo tu i pin.

Magari studiati bene il reference che ti ho linkato e gli esempi a corredo della libreria.

Guglielmo