Cosa si riceve da seriale bluetooth? Un bit, un byte o sempre un char?

Ciao,
mi sono incasinato col ragionamento :confused:
Ho un BT che mi trasmette dei dati in formato binario, quando li ricevo da un'altro BT, come li salvo? arriva un bit per volta? Arriva un byte? Ovvero in questo caso, "h" come lo dichiaro? Scusate la domanda banale

h = Serial1.read();

Tu leggi dalla seriale quindi DIMENTICA il bluetooth e consideralo un filo ... quello che devi conoscere bene è come si riceve dalla seriale ! Che sia dal BT, che sia dal monitor seriale ... per te è sempre uguale.

Guglielmo

Ok, dove posso trovare queste info? Perchè un po' di confusione lo fa il terminale, visto che fa vedere i caratteri ascii, quindi se devo vedere un binario, è giusto che "h" lo dichiaro "int" o "byte"

Hai molta confusione in testa ...
... un byte è UN BYTE e la sua rappresentazione non ha nulla a che vedere con il contenuto.

01000001 (binario) è esattamente uguale a 0x41 (esadecimale) che è esattamente uguale a 61 (decimale) che è esattamente uguale ad 'A' (ASCII).

Quindi ... il contenuto NON è legato alla rappresentazione che è una cosa che facciamo noi solo per nostra comodità ... per la seriale e per la MCU ... quanto sopra sempre 01000001 è.

Morale, NON ti porre il problema, perché sempre 8 bit trasmetti :smiley:

Guglielmo

Ah, ok, questo volevo sapere, quindi minimo ricevo sempre un byte, ok. Allora posso leggere un byte per volta e dopo la lettura salvare il byte in una variabile mia, giusto?
Altra domanda, questa condizione:

if (Serial1.available())

in caso si trasmettono 2 byte, rimane vera fino alla lettura di tutti e 2 i byte? Oppure diventa falsa dopo la lettura di un byte? Non so se mi sono spiegato

Veramente il metodo available() ritorna il numero dei caratteri nel buffer ...
... che poi l'IF interpreti 0 come FALSE e qualsiasi cosa diversa da 0 come TRUE NON significa che avaiilable() ritorni un valore logico.

Guglielmo

Azz, questo lo apprendo ora :-[ Quindi questo legge fino a che non è 0? Non va bene allora com'è fatto, vedrò sempre solo l'ultimo byte ricevuto...

void leggi()                          // leggo i dati seriali 
{ 

  while (Serial1.available())     // Controlla se il bt ha qualche dato
  {
    int h = Serial1.read();       // Il dato va in una variabile di tipo int
    Serial.write(h);                // Scrive sul terminale i dati ricevuti
    lettura = h;                     // copio il carattere nella mia stringa
  }

}

Dove ritorna quel valore dei byte nel buffer? Allora serve per sapere quanti byte salvare? mi potresti fare un esempio? Conviene quindi usare un array?

Forse meglio così:
dove c è un byte e la variabile lettura è un array int

void leggi()                // leggo i dati seriali dal bt remoto
{
  for (conta = 0; conta < 40; conta++)  // cancello l'array, svuoto il buffer (mio)
  {
    lettura[conta] = 0;
  }
  conta = 0;

  while (Serial1.available())           // Controlla se il bt ha qualche dato
  {
    c = Serial1.read();                 // Il dato va in una variabile di tipo int
    Serial.write(c);                    // Scrive sul terminale i dati ricevuti
    lettura[conta] = c;                 // copio il carattere nella mia stringa
    conta++;                            // incrementa di 1
    fatto = true;                       // avviso che ho dei dati
  }
}