come faccio a vedere se la comunicazione funziona?
ho seguito anche il tutorial sulla pagina ufficiale http://arduino.cc/en/Tutorial/ArduinoSoftwareRS232, ma non ho i risultati aspettati. in quest ultimo caso, non leggo la parola hi, e non indietro il maiuscolo delle lettere inviate
in rete trovo schemi uno diverso dall'altro, qualcuno mi può indicare quello giusto? o perlomeno uno schema che funziona?
perchè quando faccio il test elettrico succede non riesco ad ottenere in uscita dal max232 i livelli di tensione necessari per lo standard 232
aureliusss:
ho seguito anche il tutorial sulla pagina ufficiale http://arduino.cc/en/Tutorial/ArduinoSoftwareRS232, ma non ho i risultati aspettati. in quest ultimo caso, non leggo la parola hi, e non indietro il maiuscolo delle lettere inviate
Questo é un esempio molto rozzo e brutto di come implementare iuna comunicazione seriale. Non ha un buffer e non puó spedire e in contemporanea ricevere dati.
Usa la seriale HW sui pin 0 e 1 o la libreria SoftwareSerial http://arduino.cc/en/Reference/SoftwareSerial.
Collega il TX di Arduino al T1in del MAX232 e il RX al R1out del MAX. Per il primo test collega il T1out con R1in e vedi se i dati mandati corrispondono a quelli ricevuti.
ma sei i pin 0 e 1 sono già occupati dalla seriale HW come faccio a gestire la comunicazione fra due dispositivi?
il progetto finale che devo terminare come tesi consiste nell'usare arduino come 'ponte' fra due device collegati via seriale.
come test iniziale vorrei semplicemente far comunicare due porte seriali.
i problemi che ho incontrato sono due:
non riesco a trovare uno schema hardware univoco per collegare il max232;
non riesco a trovare uno schema hardware univoco per collegare il max232;
non so come controllare sul pc la comunicazione
Come collegamento, quello fornito dal Datasheet e' esatto. Consiglio solo di usare condensatori da 10µF.
ATTENZIONE alla polarita' dei condensatori. E mettere i ponticelli sul connettore DB9, altrimenti il PC non sa' che c'e' una periferica collegata
Un qualunque programma Terminal puo' gestire la comunicazione.
Ma, visto che Arduino deve fare da "ponte" tra due PC, presumo che tu debba usare un "tuo" software di comunicazione
il progetto finale sarà il controllo remoto di un riflettometro attraverso seriale rs232. prima di passare alla gestione dello strumento, devo sapere gestire la comunicazione tra due serial devices collegati usando arduino come ponte, come gestore della comunicazione.
adesso, come test, vorrei semplicemente far comunicare due porte seriali.
esempio: se sul terminal dell'IDE arduino scrivo "ciao" allora l'altro terminale(quello che collego via rs232) mi risponde "ciao". spero di essere stato chiaro.
per questo vi chiedo, i pin di trasmissione e ricezione dell'integrato(11 e 12) non dovrebbero andare ad altri due pin digitali di arduino? se li collego a 0 e 1 occupo già la serialeHW, giusto?
finalmente sono risucito a collegare tutti i componenti e a far funzionare il MAX232.
ora però mi sono abbastanza impu*****ato sul codice:
#define RX 6
#define TX 7
#include <SoftwareSerial.h>
#include <ctype.h>
String comando;
String string;
SoftwareSerial mySerial(RX,TX);
void setup(){
Serial.begin(9600);
Serial.flush();
mySerial.begin(9600);
mySerial.flush();
}
void loop(){
float a,b;
comando = "";
if(Serial.available()){
Serial.println("inserire il valore di a");
delay(10);
a=Serial.parseFloat();
mySerial.print("il valore di a e' ");
mySerial.write(a);
mySerial.println();
}
if(mySerial.available()){
Serial.println("inserire valore di b");
delay(10);
b=Serial.parseFloat();
mySerial.print("il valore di b e' ");
mySerial.write(b);
mySerial.println();
}
if(Serial.available()){
Serial.print("inserire un comando da eseguire");
comando = Serial.readStringUntil('\n');
comando.trim();
}
mySerial.print("il comando da eseguire è " + comando);
if(comando == "somma"){
a=a+b;
mySerial.print("il risultato e' " );
mySerial.write(a);
}
else if(comando == "prodotto"){
a=a*b;
mySerial.print("il risultato e' ");
mySerial.write(a);
}
}
vorrei compiere una semplice operazione scrivendo, comunicando tra le due seriali, il problema è che non riesco a gestire proprio i tempi della comunicazione: quello che vorrei fare è questo:
1.serial dice:inserire valore di a;
2.inserisco valore di a;
3.mySerial dice: il valore di a è...;
4 serial dice : inserire valore di b;
5. inserisco valore di b;
6.mySerial dice : il valore di b è...;
7.serial dice: inserire comando da eseguire;
8.inserisco la stringa "somma" o "prodotto";
9. mySerial legge e interpreta la stringa;
10. mySerial mi restituisce il valore dell'operazione;
con il codice che ho scritto non riesco a ottenere passi "discreti" nel senso che non riesco a mettere in pausa la porta finchè non inserisco il valore o comando. suppongo che centri l'uso scorretto che faccio della funzione available().
Senza usare il loop fai così, la available ti dica il numero di caratteri in attesa, a te invece serve un carattere speciale che indichi la fine del numero
il problema è che con questo tipo di codice sul monitor seriale continua a stampare "inserire il valore di a" anche se io non ho inserito nessun valore, del tipo:
inserire il valore di a
inserire il valore di a
inserire il valore di a
.
.
.
etc
io vorrei che succeda questo:
serial dice:inserire valore di a;
niente finchè non inserisco un valore;
inserisco un valore;
serial legge valore;
serial dice: il valore è "qualsiasi";
quindi se la seriale non ha caratteri salti la lettura. Invece tu devi metterti in attesa finchè non c'è qualcosa da scrivere;
while(Serial.available()==0){
//aspetta
}
in pratica blecca il programma fiunchè non c'è qualcosa sulla seriale. non è detto che sia abbastanza per essere un float o che sia un valore valido, però