Monitor seriale Arduino Uno

Salve a tutti sono nuovo del forum e nuovo anche per quanto riguarda l'utilizzo di arduino.
Dopo aver preso il kit base e aver fatto un po' di esperienza ho deciso di prendere il modulo HC-05 per la gestione tramite bluetooth.
Arrivo al problema durante la configurazione del modulo HC05 in modalità AT, mi sono accorto che quello che scrivo come input sul monitor seriale arriva con valori diversi su arduino, esempio scrivo AT e premo "invia" sul monitor e su arduino arriva T?. Ora ho fatto varie prove ma non sono riuscito a capire il motivo.
Di seguito lo sketch che ho utilizzato:

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(2, 3);
int a ;

void setup() {
  Serial.begin(38400);
  BTSerial.begin(38400);
  a = 0;
}

void loop() {
  if (a == 0)  {
  Serial.println("AT");  
  a = 1;
  }
  
  if(BTSerial.available())  {
    Serial.write(BTSerial.read());
    Serial.write("01");
  }
  if(Serial.available() > 0)  {
    BTSerial.write(Serial.read());
 //   Serial.write("02");
    Serial.println(Serial.read());
  }
  delay(10);
}

Il comando Serial.println(Serial.read()) se sul monitor ho digitato AT mi stampa T? o altri caratteri strani, mentre
l'istruzione Serial.println("AT") che ho messo ad inizio sketch per la prova viene stampata correttamente.
E' forse un problema di diversa codifica ? Devo impostare qualcosa nel monitor o sul PC ? Il sistema operativo è Windows 10 la porta è la COM6.
Per tutto il resto funziona, ma non riesco a dare input ad arduino tramite monitor seriale da PC verso Arduino.

Buongiorno,
essendo il tuo primo post nella sezione Italiana del forum, nel rispetto del nostro regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie. :slight_smile:

... poi, in conformità al suddetto regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).
In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo.

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread e sistemato il codice come da regolamento, nessuno ti potrà rispondere, quindi ti consiglio di fare il tutto al più presto. :wink:

Dovrei aver sistemato tutto come da richiesta.

Grazie Roberto.

Ti perdi un carattere perché leggi il primo e lo mandi al dispositivo bluetooth

BTSerial.write(Serial.read());

e poi leggi il secondo e lo stampi sul monitor seriale

Serial.println(Serial.read());

Per fare la cosa nel modo corretto dovresti leggere tutti i caratteri e metterli in una stringa classica del C (array di char).
Solo quando hai terminato di leggerli invii il comando al dispositivo bluetooth

Provo a fare la modifica che mi hai indicato, però lo sketch che ho scritto l'ho preso da un tutorial per il collegamento con modulo bluetooth HC05 e nel tutorial funziona correttamente anche scritto così.
Il problema è che digitando il comando AT sul monitor e inviandolo ad arduino dovrei avere in risposta OK dal modulo bluetooht, non avendo nessuna risposta ho provato a stampare i dati che il monitor invia al bluetooth per essere certo che fossero corretti.

Scritto così no, non può funzionare, la modifica che hai fatto tu per farti stampare il codice ne inficia la funzionalità.
Per stamparti tutto quello che arriva dalla seriale e mandarlo anche al BT ti posso suggerire questa piccola modifica:

char fromSerial = Serial.read();
BTSerial.write(fromSerial );
Serial.print(fromSerial);

Non so quale sia la destinazione d'uso di quel che vuoi fare ma di sicuro posso consigliarti di rivedere dei tutorial sull'uso della seriale (puoi cercare negli esempi dell'ide della libreria softwareserial) per capire come è il suo funzionamento, perché altrimenti andando avati con il progetto troveri sicuramente degli scogli che non ti permetteranno di proseguire.
Se cerchi anche sul forum poi troverai molte discussioni inerenti al fatto che prima di mandare i comandi ad un dispositivo sulla seriale bisogna accertarsi che il comando sia terminato perché basandosi solo sul metodo available si richia di non ricevere tutta la trasmissione in caso di programmi così veloci (ovvero ricevi un carattere e lo processi prima che il seguente sia arrivato, quindi esci dal ciclo).
Nel tutorial certe considerazioni non vengono fatte proprio perché è un tutorial a scopo didattico e quindi si approssima.

Modifico il mio sketch con i tuoi suggerimenti e provo il tutto di nuovo.

Se può interessare questo è il link al tutorial dal quale ho preso lo sketch, nel filamto tutto funziona correttamente.

Il mio obiettivo è quello di comandare tramite bluetooth led e movimento armi tramite microservi su un modello di astronave che sto assemblando e poi dovrò verniciare e automatizzare tramite arduino e bluetooth HC05.

apache70:
Se può interessare questo è il link al tutorial dal quale ho preso lo sketch, nel filamto tutto funziona correttamente.

Ma anche no...:wink: Questo è il codice di quel video, ti pare uguale al tuo?

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(2, 3);

void setup(){
  Serial.begin(38400);
  BTSerial.begin(38400);
}

void loop(){
  if(BTSerial.available()){
    Serial.write(BTSerial.read());
  }
  if(Serial.available()){
    BTSerial.write(Serial.read());
  }
  delay(10);
}

Si ero partito da quello poi ho fatto modifiche per capire il problema della mancata risposta in configurazione AT da parte del modulo HC05.
Comunque ho risolto ora funziona tutto e il modulo HC05 risponde, il blocco era dovuto all'errato montaggio del convertitore di livello logico che mi serviva per avere la tensione di 3,3V sui pin TX-RX del modulo HC05.
Ora devo fare la prova collegando lo smartphone, ma non dovrei avere problemi spero.
Grazie a tutti per i preziosi consigli.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.