Pages: [1]   Go Down
Author Topic: come impartire comandi AT uzilizzando una connesione seriale da arduino?  (Read 1466 times)
0 Members and 1 Guest are viewing this topic.
Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

io devo programmare un modulo bluetooth come master utilizzando i comandi AT, ma questo è un problema successivo...
io mi chiedevo come impartire questi comandi, va bene farlo con il serial print nel setup?
tipo così:
Code:
void setup() {                
  Serial1.begin(38400);
  Serial1.print("AT\r\n");
  Serial1.print("AT+...\r\n");
}

ho visto fare anche così:
Code:
Serial1.print('A');
  Serial1.print('T');
  Serial1.print('\r');
  Serial1.print('\n');

è lo stesso no?
posso usare println e omettere \n? il modulo come interpreta \n e \r? (mi spiegate un attimo anche cosa significa \r ?)
c'è qualcuno che lo ha già fatto è ha qualche consiglio da darmi?
grazie in anticipo!
« Last Edit: December 05, 2011, 03:39:13 pm by er_like_no_other » Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

la println usa solo '\n', come i sistemi linux e unix. invece i sistemi windows like per andare a capo usano '\r' '\n', e quindi molte cose hanno adottato questo "standard"

i due esempi che fornisci sono ok e fanno quasi la stessa cosa (il primo esempio da un comando in più, ovvero "AT+...\r\n"

se vuoi per i test puoi fare che ciò che leggi dalla Serial lo reinvii alla Serial1 e viceversa, così puoi testare il modulo scrivendo i comandi via serial monitor usando arduino come ripetitore. Quando hai testoto il moculo, i collegamenti e i comandi, puoi automatizzare il tutto.

suggerisco ciò per evitare un sacco di tempo perso dopo :-)
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ok grazie adesso mi è più chiaro il discorso smiley-wink
quindi adesso devo capire che comandi mandare...
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 138
Posts: 9866
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

la println usa solo '\n', come i sistemi linux e unix. invece i sistemi windows like per andare a capo usano '\r' '\n', e quindi molte cose hanno adottato questo "standard"

Va bene che vi piace dare la colpa di tutti i mali a Microsoft e zio Bill, però in questo caso sono innocenti visto che parliamo di una eredità del periodo giurassico delle telecomunicazioni quando non esisteva ancora la Microsoft e tanto meno Unix/Linux.
Si tratta di due comandi per le telescriventi, ovvero i primi terminali della storia informatica costituiti da una tastiera e una stampante, all'epoca non esitavano ancora i terminali video, /r è il Carriage Return e /n è New Line, o Line Feed, 0x0D e 0x0A in esadecimale, che rispettivamente facevano tornare il carrello di stampa alla prima colonna per /r e passare alla riga successiva per /n.
Il motivo per cui ci sono due comandi distinti per fare una cosa che apparentemente si può fare con un solo comando, p.e. con /r tornare alla prima colonna e saltare alla nuova riga, risiede nel fatto che sono stati concepiti per terminali meccanici dove faceva molto comodo potersi spostare su una nuova riga senza dover per forza di cose tornare alla prima colonna, è solo una questione di ottimizzazione dei tempi.
Arrivando ai nostri giorni questo modo di comunicare è rimasto imbrigliato all'interno dello standard ASCII dove i primi 32 caratteri, da 0 a 31, sono riservati a codici di controllo per i terminali.
Non scordatevi che prima dei desktop grafici per decenni si è lavorato su dei videoterminali con interfaccia a caratteri o, al massimo, con semigrafica per le fincature ottenuta tramite caratteri speciali, pertanto faceva molto comodo avere tutta una serie di comandi per gestire le videate incluso il /r e il /n, ma anche cose come il Bell (0x07) che faceva emettere un suono allo speaker del terminale, in principio era un vero e proprio campanello elettromeccanico, oppure 0x0E e 0x0F che sono shiftin e shiftout, spostano il carrello/cursore avanti o indietro di una posizione.
Il protocollo AT è nato con i modem e pure lui è molto vecchio e incorpora molte cose prese dalla tabella ASCII, come /r e /n, la retrocompatibilità è una bella cosa, ma a volte fa pagare un pesante prezzo in termini di praticità e pesantezza d'uso con i sistemi moderni dove molte cose non sono più necessarie e/o sono obsolete.
Logged

0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

grande astro che ci fa le lezioni di storia del pc  smiley-mr-green

se non erro mac usa un altro metodo ancora: \n\r, è giusto?
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

interessante questo cenno storico, ora so anche da dove derivano questi comandi
grazie smiley-wink
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

se io devo impartire questo comando:
Code:
“---“<cr>
come faccio? mi da errore perchè apro e chiudo le virgolette nel Serial.print... come dovrei fare?
grazie per l'aiuto
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

serial.print("---\r");

\r = <cr>
\n = <ln>
guardati la tabella ascii smiley
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

cioè <cr>= \r ?  smiley-confuse
mmmm io pensavo fosse '<' 'c' 'r' '>' questo distrugge tutte le mie certezze, adesso mi riguardo anche tutti gli altri comandi che mi servono che magari non ci siano cose simili  smiley-sweat
e le virgolette sui --- sono un problema?
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

0
Offline Offline
Shannon Member
****
Karma: 136
Posts: 10525
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

no, le virgolette non hanno problemi con ---, anzi se dovessi scrivere ", allora drovrai fare: "\"", il \ davati a " vuol dire che stai scrivendo un carattere speciale.
In questo caso ", vuol dire che deve scrivere ", la n vuol dire <ln>, la r <cr>, un'altra \ vuol dire di stampare una \...

ecco l'elenco di caratteri speciali, o meglio di "sequenze di fuga"

http://it.wikipedia.org/wiki/C_%28linguaggio%29#Sequenze_di_Escape
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ok grazie mille! smiley-wink
Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6017
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bella Astro, avevo gia' letto queste cose quando in un altro post parlammo del print in ascii.
ci sono tante belle cose nella storia delle telescriventi che si sono portate avanti fino ad oggi.
Aggiungo due curiosita', ad esempio il VT100, che per tutti noi e' un sw per emulazione terminale, prende il nome proprio dal vt100 che era un terminale vero.
Un'altra e' il nome delle seriali sotto linux, quel tty deriva proprio da Telescrivente

Mi verrebbe proprio voglia di comprare una telescrivente meccanica ed attaccarla ad arduino, ad esempio un mega orologio, che ogni minuto ti stampa l'orario  smiley-grin
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Pages: [1]   Go Up
Jump to: