Ciao a tutti ragazzi , mi sono appena presentato e ho letto tutto il regolamento prima di scrivere cosi non mi linciate
Scherzi a parte , ho acquistato questo modulo e l'ho collegato con il solito partitore resistevo per adattare i livelli logici del modulo con arduino , inoltre ho usato la libreria SoftwareSerial per riuscire a caricare i sketch e lasciare libera la vera seriale.
Vi posto il codice e vi spiego che problema ho , prima però voglio fare una premessa :
Questo codice ha solo lo scopo di farvi capire che tipo di problema ho , infatti il codice non è completo , per esempio sul pin di input non ho "attivato " la resistenza di pullup e nel complesso non ha senso.
#include <SoftwareSerial.h>
SoftwareSerial BT(10, 11);
const int pulsante =6;
int stato =0;
char x;
void setup()Â
{
 pinMode(13, OUTPUT);
 pinMode(pulsante,INPUT);
 BT.begin(9600);
 Serial.begin(9600);
}
void loop(){
 if (BT.available()){
 x=(BT.read());
}Â
  stato=digitalRead(pulsante);
  if (x=='H' && stato=="HIGH"){
   digitalWrite(13, HIGH);
   Serial.println("LED on");
  }
  if (x=='H' && stato=="LOW"){
   digitalWrite(13, LOW);
   Serial.println("LED off");
 }
  if (x=='L' && stato=="LOW"){
   digitalWrite(13, LOW);
   Serial.println("LED off");
 }
  if (x=='L' && stato=="HIGH"){
   digitalWrite(13, LOW);
   Serial.println("LED off");
 }
}
Il mio problema è semplice , se il modulo è connesso con il disposivo , che in questo caso è il mio telefono android, il tutto funziona , quando ovviamente il telefono si scollega dal modulo e quest'ultimo lampeggia , il codice non funziona. Quindi ...come posso riuscire a scrivere in una variabile l'ultimo stato ricevuto dal modulo? Quello che voglio ottenere è ; se io invio al modulo il carattere H , disconnetto il telefono dal modulo e premo il pulsante il led dovrebbe accendersi...
Scusate il ragionamento contorto , ma si è fatta una certa.
Vi ringrazio a tutti ragazzi per il vostro tempo
stato=="HIGH" HIGH mi sembra che non deve stare tra virgolette.
Prova dopo x=(BT.read()); ad inserire un Serial.println(x); così vedi se effettivamente ricevi solo H o L come comandi via BT
Si scusate ho fatto un errore a riscrive il codice qui sul forum , in realtà nella editor di arduino le virgoletti prime e dopo lo stato HIGH e LOW non ci sono, ma vi ringrazio comunque per l'appunto.
Cerco di spiegarmi meglio, se mi collego all'HC-06 e invio il carattere "H" per esempio questo lo riceve e non ci sono problemi , il problema nasce quando il modulo viene disconnesso dal telefono , in quanto la variaible x si svuota e quindi il led non può accendersi se premo il pulsante...
Se mi spiego male chiedete pure...
La variabile "non si svuota", ma più semplicemente riceve qualcos'altro, ad esempio un CR o un LF
Se vuoi che funzioni solo quando riceve un H o un L, controlla semplicemte che sia uno dei due caratteri voluti
Per rispondervi , allora il punto è questo. La "tabella della veria" che ha postato Patrik_M è giusta e tutto funziona bene , però quando disconnetto il modulo dal telefono , come posso far "ricordardare" ad arduino l'ultimo stato ricevuto? Esempio:
Ora il comportamento che ho è questo;
Invio il carattere H , disconnetto il telefono dal modulo bluetooth , premo il pulsante, ma il led non si accende.
Io voglio invece che se invio il carattere H , anche se scollego il telefono dal modulo in un secondo momento , arduino si ricordi l'ultimo carattere che è statto inviato.
Esempio:
Invio il carattere H , disconnetto il telefono dal modulo bluetooth , premo il pulsante, il led si accende.
Patrick vediamo se ho capito provo a commentare il tuo codice.
void loop(){
 char temp; /
 if (BT.available()){ // Se il modulo è associato
  temp=(BT.read()); //Leggo il carattere dal modulo
  if (temp=='H' || temp=='L') { //Se il carattere inviato è 'H' o 'L' scrivo nella variabile x l'ultimo carattere inviato
    x=temp;
  }
 }
No non funziona , ma ho trovato l'inghippo. Come consigliato da brunello22 ho dato un Serial.print della variabile temp e ho notato che quando disconnetto il modulo dal telefono , sul monitor seriale viene scritto questo...