Go Down

Topic: come impartire comandi AT uzilizzando una connesione seriale da arduino? (Read 1 time) previous topic - next topic

ƎR

Dec 05, 2011, 09:10 pm Last Edit: Dec 05, 2011, 09:39 pm by er_like_no_other Reason: 1
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: [Select]
void setup() {                
 Serial1.begin(38400);
 Serial1.print("AT\r\n");
 Serial1.print("AT+...\r\n");
}


ho visto fare anche così:
Code: [Select]
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!
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

lesto

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 :-)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

ƎR

ok grazie adesso mi è più chiaro il discorso ;)
quindi adesso devo capire che comandi mandare...
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

astrobeed


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.

lesto

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?
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

ƎR

interessante questo cenno storico, ora so anche da dove derivano questi comandi
grazie ;)
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

ƎR

se io devo impartire questo comando:
Code: [Select]
"---"<cr>
come faccio? mi da errore perchè apro e chiudo le virgolette nel Serial.print... come dovrei fare?
grazie per l'aiuto
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

lesto

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

\r = <cr>
\n = <ln>
guardati la tabella ascii :)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

ƎR

cioè <cr>= \r ?  :~
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?
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

lesto

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
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

ƎR

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

Testato

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  :D
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Go Up