Arduino con connessione bluetooth

Ragazzi sto provando ad accendere un led tramite bluetooth, ma nonostante il monitor serial emi segni la recezione del carattere poi arduino non accende il led, quale puo' essere il problema?

#include <SoftwareSerial.h>
SoftwareSerial BT(10,11);
char lettera;
int led=13;
void setup() {
  pinMode(led, OUTPUT);
 Serial.begin(9600);
 BT.begin(9600);
 while(!Serial);
 Serial.println("AT OK");
}
void loop() {
  char lettera;
  if(BT.available())
  Serial.write(BT.read());
    lettera=BT.read();
 
  if(lettera=="a")
  digitalWrite(led, HIGH);
  
  if(lettera=="b")
    digitalWrite(led,LOW);
  
}

pensavo che il primo BT.read fosse per scrivere il risultato di quello che riceve il bluetooth nel monitor seriale, e il secondo fosse per assegnare il carattere che riceve a "lettera"

... non vedi che fai DUE volte di fila BT.read()? Salvo che non ti aspetti DUE caratteri, in cui il primo è da buttare ... la prima volta recuperi il carattere, la seconda volta ti ritorna -1 perchè non c'è più il carattere ricevuto ed il buffer è vuoto.

Guglielmo

Quindi basta eliminare "Serial.write(BT.read());" ?

E perché? Non trovi più semplice fare:

if(BT.available())
    lettera=BT.read();
    Serial.write(lettera);

... così "lettera" contiene il carattere letto e ci puoi dopo fare quello che ti pare :wink:

Guglielmo

Niente Guglielmo, il risultato non cambia, il monitor rileva tutti i caratteri inviati dal telefono ma arduino non accende alcun led, anche dopo aver eseguito l'accorgimento che mi hai dato.

La variabile "lettera" è una char e tu la confronti con una stringa ('a' è un carattere, "a" è una stringa composta dai caratteri 'a' e 0x0)!

Al posto di:

 if(lettera=="a")
  digitalWrite(led, HIGH);
  
  if(lettera=="b")
    digitalWrite(led,LOW);

devi mettere:

 if(lettera=='a')
  digitalWrite(led, HIGH);
  
  if(lettera=='b')
    digitalWrite(led,LOW);