Accendere un led con bluetooth... qualcosa non và...

Buona sera a tutti, ho realizzato il seguente sketch che dovrebbe far accendere un led quando Arduino tramite bluetooth riceve "A" e spegnersi quando riceve "a".

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11);
int led1= 12;

void setup()
{
  pinMode(led1, OUTPUT);


   mySerial.begin(9600);
   Serial.println("Ivan Scordato");
   delay(1000);
}


void loop()
{
   while (mySerial.available())
   {
       char dato= mySerial.read();
       switch(dato)
       {
         case 'A':
         {
  digitalWrite(12, HIGH);
            mySerial.println("Led 1 Acceso");
           break;
         }
         case 'a':
         {
  digitalWrite(12, LOW);
           mySerial.println("Led 1 Spento");
           break;
         }    
       }       
   } 
}

Le lettere vengono ricevute e stampate correttamente sul monitor seriale, ma il led non si accende :.
Non riesco a comprendere quale sia il problema o l'errore/orrore,
C'è qualcuno che potrebbe darmi una mano?

Grazie,
Ivan

Quindi, ricapitolando, tu vedi correttamente i due messaggi "Led 1 Acceso" e "Led 1 Spento" ... ma il LED non da segni di vita ... giusto ?

Se è così potrebbe essere un problema di come hai collegato il LED ... facci uno schemino ...

Guglielmo

non sono sicuro,
le parentesi graffe nei "case" si devono mettere?

No, non sono necessarie ... ma non mi hai risposto ... i messaggi sulla seriale escono correttamente ???

Guglielmo

Ciao, ho sistemato un po il codice prova con questo:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11);
int led1= 12;

void setup()
{
  pinMode(led1, OUTPUT);
   mySerial.begin(9600);
   Serial.println("Ivan Scordato");
   delay(1000);
}


void loop() {
   if (mySerial.available()) {
    char ch = mySerial.read();
    switch (ch) {
    case 'A':
    digitalWrite(led1, HIGH);
    mySerial.println("Led 1 Acceso");
      break;
    case 'a':
    digitalWrite(led1, LOW);
    mySerial.println("Led 1 Spento");
      break;
    }
  }
}

Davide-1991:
Ciao, ho sistemato un po il codice prova con questo:
...

Davide ... tu pensi di aver fatto una cosa utile ??? E anche se il tuo codice risolvesse, secondo te cosa avrebbe imparato
Ivan_Isk ? A copiare il codice di un altro ?

Aiutare significa portare gli altri a "capire" ed a risolvere da soli, non fornirgli la "pappa fatta" ... quello non serve a nulla, domani sono di nuovo qui a chiedere aiuto !

Guglielmo

@ gpb 01
ivan_isk chiede,
camperos ha solo notato le graffe :wink:

camperos:
@ gpb 01
ivan_isk chiede,
camperos ha solo notato le graffe :wink:

@camperos : giusto ... correggo il post :wink:

Guglielmo

Buona sera, ringrazio a chi sta cercando di aiutarmi.
Premessa: Il mio interesse, oltre a quello che lo sketch debba funzionare, è principalmente che io impara per non sbagliare di nuovo e non di avere uno sketch funzionante e basta.

Sul monitor seriale quello che visualizzo appena invio una lettera, è soltanto la lettera (ad esempio "A") e non il messaggio che mi dovrebbe confermare l'avvenuta accensione del Led.
Il led è collegato correttamente, in quanto ho effettuato una prova con il classico BLINK e funziona perfettamente.

Siccome il carattere viene effettivamente ricevuto, questo significa che il problema sta nella parte che setta le condizioni in cui il pin (quello programmato, in questo caso il 12) debba andare su HIGH.
Cioè questa parte:

void loop()
{
   while (mySerial.available())
   {
       char dato= mySerial.read();
       switch(dato)
       {
         case 'A':
         {
  digitalWrite(12, HIGH);
            mySerial.println("Led 1 Acceso");
           break;
         }
         case 'a':
         {
  digitalWrite(12, LOW);
           mySerial.println("Led 1 Spento");
           break;
         }    
       }       
   }

Però, dovrebbe funzionare! Non riesco completamente a capire dove stia il problema...
Forse non và bene questo?

char dato= mySerial.read();
       switch(dato)

Spero in una vostra illuminazione.
A presto,
Ivan

Ivan_Isk:
...
Sul monitor seriale quello che visualizzo appena invio una lettera, è soltanto la lettera (ad esempio "A") e non il messaggio che mi dovrebbe confermare l'avvenuta accensione del Led.
Il led è collegato correttamente, in quanto ho effettuato una prova con il classico BLINK e funziona perfettamente.

Scusa Ivan, ma stai mischiando diversi programmi ??? Perché nel codice che hai messo NON vedo nessun punto dove ci sia la stampa della lettera ricevuta ... c'è la mySerial.read() ma non vedo una Serial.print(), quindi ... come fai a vedere il carattere ricevuto ??? :astonished:

Guglielmo

Sto utilizzando il codice che ho postato io, effettivamente hai ragione! Forse il problema sta proprio quì? :grin:
Fatto sta che sul monitor seriale viene stampata la lettera :~

Scusa, ma come parli con il modulo bluetooth ??? Con uno smatphone o con cosa ?

Guglielmo

Si, tramite un applicazione che invia appunto la lettera "A" o "a" ad arduino, che effettivamente la riceve

Puoi fare una foto ... nitida ... del tutto ? Così controlliamo assieme tutti i collegamenti ... perché c'è qualche cosa che non quadra ... :roll_eyes:

Guglielmo

Ok, non c'è problema, eccola:
http://img24.imageshack.us/img24/4285/ugrm.jpg

Inoltre ecco il codice che viene suggerito di utilizzare per il programma che ho installato sullo smartphone:
www.microcontrollerkits.blogspot.it/2012/02/arduino-control-8-devices-via-android.html

Perrò mi piacerebbe riuscire a farlo da me, magari con il vostro aiuto.
A presto,
Ivan

I collegamenti che ho effettuato sono:
TX A TX
RX A RX
GND A GND
VCC A 5.0V

Aaaarrrrggghhhh ... ma hai collegato il TX e RX del modulo Bluetooth ai pin 0 e 1 ... ORRORE XD XD XD

Nel codice hai dichiarato che la SoftwareSerial, quella che devi usare per il Bluetooth, va sui pin 10 e 11 :

SoftwareSerial mySerial(10, 11); // 10 RX, 11 TX

... quindi il modulo bluetooth lo devi collegare a quelli (TX bluetooth -> RX SoftwareSerial, RX Bluetooth <- TX SoftwareSerial) ... ecco perché vedi i caratteri ... finiscono sul monitor seriale ...

Guglielmo

TESTO SUBITO XD

Non sò come ringraziarti! :slight_smile:
Funziona alla grande, praticamente mi ero fatto confondere dal fatto che viene utilizzata una connessione seriale, per cui in automatico mi è venuto di collegare il modulo a rx e tx.

Grazie ancora,
Ivan

Ivan_Isk:
Non sò come ringraziarti! :slight_smile:

Figurati ... l'importante è che tutto funziona che ora hai capito cosa c'era che non andava :wink:

Buon proseguimento :slight_smile:

Guglielmo