Ciao ragazzi,come da titolo ho un problema con la porta serial 1 di arduino micro (dovrebbero essere i pin tx e rx (?)). Quello che voglio fare è semplicemente leggere i dati da un modulo gps (ultimate breakout della adafruit) e poi stamparlo a video sul monitor seriale. Ho letto un po in giro e ho visto che arduino micro divide in Serial e Serial1 rispettivamente la comunicazione con il pc e quella con i moduli collegati a tx e rx. Il problema è che a video non mi stampa niente,ho fatto mille prove ma a video non si vede nulla. Potete aiutarmi? :S Vi posto il codice (FUNZIONANTE SU ARDUINO UNO,Quello che ho postato ha solo le poche modifiche che credevo bastassero per adattarlo ad arduino micro)
#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>
#include <NewSoftwareSerial.h>
NewSoftwareSerial mySerial(1,0);
Adafruit_GPS GPS(&mySerial);
#define PIN_GPS_ENABLE 7
void setup() {
Serial.begin(9600);
//GPS setup
Serial1.begin(9600);
pinMode(PIN_GPS_ENABLE,OUTPUT);
digitalWrite(PIN_GPS_ENABLE,LOW);
start_gps();
}
void loop() {
if(mySerial.overflow()) { //Controllo overflow
Serial.println("\r\n$PXXXX,NewSoftwareSerial overflow!!!");
}
while(mySerial.available()) { //Se il gps è collegato e funzionante acquisisci i dati
long int r = mySerial.read();
Serial.write(r);
}
}
void start_gps() {
mySerial1.listen();
digitalWrite(PIN_GPS_ENABLE,HIGH);
delay(100);
GPS.sendCommand(PMTK_SET_NMEA_UPDATE_10HZ);
GPS.sendCommand(PMTK_API_SET_FIX_CTL_5HZ);
GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
}
Uno dei vantaggi del MICRO rispetto alla UNO è proprio quella di avere due porte seriali come giustamente hai detto.
Il programma scritto per una UNO che usa due comunicazioni seriali, si avvale della libreria SoftwareSerial per simulare una seconda porta seriale.
E' evidente che MICRO non ha bisogno di questo artificio e che i vari esempi a corredo devono essere scelti per funzionare con processori MICRO/LEONARDO.
Ecco come settare il software (manca il loop)
#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>
// If using software serial (sketch example default):
// Connect the GPS TX (transmit) pin to Digital 8
// Connect the GPS RX (receive) pin to Digital 7
// If using hardware serial:
// Connect the GPS TX (transmit) pin to Arduino RX1 (Digital 0)
// Connect the GPS RX (receive) pin to matching TX1 (Digital 1)
// If using software serial, keep these lines enabled
// (you can change the pin numbers to match your wiring):
// SoftwareSerial mySerial(8, 7);
// If using hardware serial, comment
// out the above two lines and enable these two lines instead:
HardwareSerial mySerial = Serial1;
void setup() {
while (!Serial); // wait for leo to be ready
Serial.begin(9600);
mySerial.begin(9600);
}
Non ha senso emulare una porta seriale via software se la seriale é presente in Hardware.
Inoltre col Tuo Sketch stai facendo casino tra le due cose.
Fai partire le due seriali HW ma non quella SW.
Ciao Uwe
...Non ha senso emulare una porta seriale via software...
Adafruit ha preparato a libreria inizialmente per la UNO e quindi usando la lib SoftwareSerial.
Poi ha cercato di adattare la libreria per la MEGA e la LEONARDO/MICRO (negli esempi viene chiamata LEO) usando le porte seriali aggiuntive ed ha usato allo scopo l'oggetto HardwareSerial derivato dalla classe SoftwareSerial.
Non so se la cosa funzioni, ma questo è quello che i loro tecnici hanno fatto.
cyberhs:
Poi ha cercato di adattare la libreria per la MEGA e la LEONARDO/MICRO (negli esempi viene chiamata LEO) usando le porte seriali aggiuntive ed ha usato allo scopo l'oggetto HardwareSerial derivato dalla classe SoftwareSerial.
cyberhs:
Uno dei vantaggi del MICRO rispetto alla UNO è proprio quella di avere due porte seriali come giustamente hai detto.
Solo una precisazione, sulla micro e sulla Leonardo, più in generale tutte le board basate su 32u, non ci sono due seriali hardware, c'è una sola UART, la seconda seriale è la USB che lavora in modalità CDC (seriale virtuale sul pc) è non è sfruttabile come una normale seriale, serve solo per comunicare col pc tramite USB.
cyberhs:
Uno dei vantaggi del MICRO rispetto alla UNO è proprio quella di avere due porte seriali come giustamente hai detto.
Il programma scritto per una UNO che usa due comunicazioni seriali, si avvale della libreria SoftwareSerial per simulare una seconda porta seriale.
E' evidente che MICRO non ha bisogno di questo artificio e che i vari esempi a corredo devono essere scelti per funzionare con processori MICRO/LEONARDO.
Ecco come settare il software (manca il loop)
#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>
// If using software serial (sketch example default):
// Connect the GPS TX (transmit) pin to Digital 8
// Connect the GPS RX (receive) pin to Digital 7
// If using hardware serial:
// Connect the GPS TX (transmit) pin to Arduino RX1 (Digital 0)
// Connect the GPS RX (receive) pin to matching TX1 (Digital 1)
// If using software serial, keep these lines enabled
// (you can change the pin numbers to match your wiring):
// SoftwareSerial mySerial(8, 7);
// If using hardware serial, comment
// out the above two lines and enable these two lines instead:
HardwareSerial mySerial = Serial1;
void setup() {
while (!Serial); // wait for leo to be ready
Serial.begin(9600);
mySerial.begin(9600);
}
Ti ringrazio molto per l'aiuto ma ancora non funziona,sembra avere dei problemi con il comando HardwareSerial infatti mi dice Serial1 was not declared in this scope. Che può essere? :S Grazie mille ancora per il supporto
Piccolo errore: la serial1 credo debba essere inizializzata prima di essere utilizzata.
Comunque non sono un'esperto di quella libreria: ti conviene scaricare gli esempi che iniziano con LEO (Leonardo) all'indirizzo:
void setup() {
while (!Serial); // wait for leo to be ready
Serial.begin(9600);
Serial1.begin(9600);
HardwareSerial mySerial = Serial1;
mySerial.begin(9600);
}
Perché vi ostinate a fare confusione tra le seriali hardware e quelli emulate via software.
La seriale é quella collegata alla USB e percui va sul PC
La seriale 1 é quella collegata ai pin 0 e 1 del Arduino Leonardo / micro. e collegata al modulo GPS
Per cosa serve ancora una seriale software????????
Se serve una terza seriale allora potete usare una emulata via software ma non sui pin 0 e 1.
Sì ma la cosa intelligente da fare è eliminare SoftwareSerial e riscrivere la reale comunicazione seriale con Serial1. SoftwareSerial ha limiti anche di baud, non ha senso utilizzarla quando si ha a disposizione Serial1