Go Down

Topic: Accendere un led con bluetooth... qualcosa non và... (Read 4549 times) previous topic - next topic

Ivan_Isk

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

gpb01

#16
Nov 19, 2013, 08:49 pm Last Edit: Nov 19, 2013, 08:51 pm by gpb01 Reason: 1
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  :

Quote
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
Search is Your friend ... or I am Your enemy !

Ivan_Isk

HELLO WORLD!

Ivan_Isk

Non sò come ringraziarti! :)
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
HELLO WORLD!

gpb01


Non sò come ringraziarti! :)


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

Buon proseguimento :)

Guglielmo
Search is Your friend ... or I am Your enemy !

Ivan_Isk

Adesso mi sembra giusto pubblicare il codice che ho finito di realizzare per controllare dei relè...
Code: [Select]

#include  // includo la libreria per la comunicazione seriale

SoftwareSerial mySerial(10, 11); // imposto i pin per la comunicazione seriale
// Collegare i pin nel seguente modo: RX=>11 TX=>10

void setup()
{
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);

   mySerial.begin(9600); // setto la comunicazione
   Serial.println("Ivan Scordato Creation");
   delay(1000);
}


void loop()
{
   while (mySerial.available())
   {
       char dato= mySerial.read(); // "dato" è il valore che viene ricevuto dalla seriale
       switch(dato)
       {
         case 'A': // Se ricevo la lettera A,
         {
  digitalWrite(12, HIGH); // eccito il relè collegato al pin12
            mySerial.println("Relè 1 ON");
           break;
         }
         case 'a': // Se ricevo la lettera a
         {
  digitalWrite(12, LOW); // Spenfo il relè
           mySerial.println("Relè 1 OFF");
           break;
         }   
                   // E così anche di seguito...
                  case 'B':
         {
  digitalWrite(12, HIGH);
            mySerial.println("Relè 2 ON");
           break;
         }
         case 'b':
         {
  digitalWrite(12, LOW);
           mySerial.println("Relè 2 OFF");
           break;
         }   


         case 'C':
         {
  digitalWrite(12, HIGH);
            mySerial.println("Relè 3 ON");
           break;
         }
         case 'c':
         {
  digitalWrite(12, LOW);
           mySerial.println("Relè 3 OFF");
           break;
         }   
                  case 'D':
         {
  digitalWrite(12, HIGH);
            mySerial.println("Relè 4 ON");
           break;
         }
         case 'd':
         {
  digitalWrite(12, LOW);
           mySerial.println("Relè 4 OFF");
           break;
         }   
                  case 'E':
         {
  digitalWrite(12, HIGH);
            mySerial.println("Relè 5 ON");
           break;
         }
         case 'e':
         {
  digitalWrite(12, LOW);
           mySerial.println("Relè 5 OFF");
           break;
         }   
                  case 'F':
         {
  digitalWrite(12, HIGH);
            mySerial.println("Relè 6 ON");
           break;
         }
         case 'f':
         {
  digitalWrite(12, LOW);
           mySerial.println("Relè 6 OFF");
           break;
         }   
                  case 'G':
         {
  digitalWrite(12, HIGH);
            mySerial.println("Relè 7 ON");
           break;
         }
         case 'g':
         {
  digitalWrite(12, LOW);
           mySerial.println("Relè 7 OFF");
           break;
         }   
                  case 'H':
         {
  digitalWrite(12, HIGH);
            mySerial.println("Relè 8 ON");
           break;
         }
         case 'h':
         {
  digitalWrite(12, LOW);
           mySerial.println("Relè 8 OFF");
           break;
         }   
       }       
   }
}
// BUONA SPERIMENTAZIONE!
HELLO WORLD!

Ivan_Isk

P.S. Nel codice che ho postato ho dimenticato di cambiare i pin... in tutti ho scritto 12
HELLO WORLD!

gpb01


P.S. Nel codice che ho postato ho dimenticato di cambiare i pin... in tutti ho scritto 12


:smiley-mr-green: :smiley-mr-green: :smiley-mr-green: :smiley-mr-green: ... puoi sempre editare il post e correggere  ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

gpb01

Dato che hai i relè tutti collegati uno dopo l'altro, dal pin 2 al pin 9 ... ti do un'indicazione ... sulla quale, se riesci a ragionare sopra ... riduci il codice a pochissime righe ...

In ASCII (lo standard con cui sono codificati i caratteri) ...

... il carattere '1' vale 0x31, il carattere '2' vale 0x32 ... il carattere '9' vale 0x39
... il carattere 'A' vale 0x41, il carattere 'B' vale 0x42 ... il carattere 'I' vale 0x49

Quindi '1' ... '9' meno 0x30 da un numero da 1 a 9
Quindi 'A' ... 'I' meno 0x40 da un numero da 1 a 9

Se il carattere è tra '1' e '9' ... sottraggo 0x30 e, ad esempio, accendo il pin 1 .. 9
Se il carattere è tra 'A' e 'I' ... sottrago 0x40 e, ad esempio, spengo il pin 1 .. 9

.....

E' un giochetto da smanazzatori di bit ... ma, a volte, come in questo caso, permette di ridurre drasticamente il codice ... ;)

Salvando quanto hai fatto e che funziona ... se non hai fretta, puoi provare a pensarci e trovare una soluzione più compatta  :smiley-mr-green:

Buon divertimento ...

Guglielmo
Search is Your friend ... or I am Your enemy !


Go Up