SoftwareSerial

Non riesco a leggere da una porta seriale con SoftwareSerial() riga 19, non entra nella if.

Alla riga 13 stampa il messaggio correttamente quindi sembra funzionare.

Ho provato a inserire Ser_2.listen(); prima ma non cambia.

Utilizo un convertitore USB/UART CP210

Se questo convertitore lo sposto sui pin 0 e 1 con Serial funziona sia in lettura che scrittura

questo per capire se il problema fosse il convertitore.

01 #include <SoftwareSerial.h>
02 #define LED 3
03 #define RXD 10
04 #define TXD 11
05 SoftwareSerial Ser_2(RXD,TXD);  //RXD, TXD.
06 //---Predisposizione----------------------
07 void setup(){
08   Serial.begin(19200);
09   Ser_2.begin(19200);
10   delay(100);
11   pinMode(LED,OUTPUT);
12   digitalWrite(LED,HIGH);
13   Ser_2.print("Ser_2");
14   
15 } 
16 //---Ciclo principale---------------------
17 void loop(){
18   //Ser_2.listen();
19   if(Ser_2.available()>0){
20     digitalWrite(LED,HIGH);
21     Ser_2.print(Ser_2.read());
22   }
23   if(digitalRead(3)==1){ 
24     delay(1000);
25     digitalWrite(LED,LOW);
26   }

La riga 5 meglio spostarla all'interno di setup(), prima della riga 9.

cyberhs:
La riga 5 meglio spostarla all’interno di setup(), prima della riga 9.

Non l’accetta

Vedi errore ritornato

Errore.png

Hai ragione, scusami ma mi basavo su una libreria fatta da me!

Bisogna per forza creare l'oggetto dichiarando la classe in ambito globale.

Quindi è giusto quello che hai fatto.

Prova a definire in setup() il pinMode:

pinMode(RXD, INPUT); pinMode(TXD, OUTPUT); Ser_2.begin(19200);

No Cyberhs, non serve … la SoftwareSerial gestisce lei i pin e funziona bene, quindi … è qualche altra cosa.

Busco, su che Arduino sei ? Uno, Mega, Leonardo ? Che versione dell’IDE stai usando ?

Prova con il seguente programma che è ampiamente collaudato e che uso normalmente per fare le prove con i moduli bluetooth :

// *****************************************************
//
//        Bluetooth module serial communication
//              Bluetooth <--> USB_Serial
//
// *****************************************************

#include <SoftwareSerial.h>

#define  BT_RX 10            // PIN to receive from bluetooth
#define  BT_TX 11            // PIN TO transmit to bluetooth

SoftwareSerial btSerial(BT_RX, BT_TX);

void setup()
{
  delay (2000);
  //
  Serial.begin(9600);        // Initialize USB Serial port
  btSerial.begin(9600);      // Initialize Bluetooth SoftwareSerial port for selected data speed
  //
  Serial.println("--- Ports ready ---");
  Serial.println("");
  //
}

void loop()
{
  if (btSerial.available() > 0) Serial.write(btSerial.read());
  if (Serial.available() > 0) btSerial.write(Serial.read());
}

Quello che ricevi sulla SoftwareSerial va sulla Serial e viceversa …

Naturalmente adattalo alle velocità che stai usando.

Guglielmo

gpb01:
Busco, su che Arduino sei ? Uno, Mega, Leonardo ? Che versione dell’IDE stai usando ?

Hardware: ATmega328P-PU su bread board
Board: Arduino Pro or Pro Mini(3,3V 8Mhz) w/ATmega328
IDE 1.0.6

Ho utilizzato questa board per la frequenza 8Mhz con quarzo

Prova con il seguente programma che è ampiamente collaudato e che uso normalmente per fare le prove con i moduli bluetooth :

// *****************************************************

//
//        Bluetooth module serial communication
//              Bluetooth <–> USB_Serial
//
// *****************************************************

#include <SoftwareSerial.h>

#define  BT_RX 10            // PIN to receive from bluetooth
#define  BT_TX 11            // PIN TO transmit to bluetooth

SoftwareSerial btSerial(BT_RX, BT_TX);

void setup()
{
 delay (2000);
 //
 Serial.begin(9600);        // Initialize USB Serial port
 btSerial.begin(9600);      // Initialize Bluetooth SoftwareSerial port for selected data speed
 //
 Serial.println("— Ports ready —");
 Serial.println("");
 //
}

void loop()
{
 if (btSerial.available() > 0) Serial.write(btSerial.read());
 if (Serial.available() > 0) btSerial.write(Serial.read());
}




Quello che ricevi sulla SoftwareSerial va sulla Serial e viceversa ...

Naturalmente adattalo alle velocità che stai usando.

Guglielmo

Ho provato lo scambio delle informazioni tra le 2 porte però visto che non funzionava
ho semplificato per la ricerca del problema

... dato che quel codice è [u]ampiamente collaudato e funziona sicuramente[/u] ... il problema è allora altrove, o nell'hardware o nei collegamenti ::)

Guglielmo

gpb01:
… dato che quel codice è ampiamente collaudato e funziona sicuramente … il problema è allora altrove, o nell’hardware o nei collegamenti ::slight_smile:

Guglielmo

Risolto.

Problema dovuto alle connessioni.

Grazie per i suggerimenti

busco:
Non riesco a leggere da una porta seriale con SoftwareSerial() riga 19, non entra nella if.

Alla riga 13 stampa il messaggio correttamente quindi sembra funzionare.

Ho provato a inserire Ser_2.listen(); prima ma non cambia.

Utilizo un convertitore USB/UART CP210

Se questo convertitore lo sposto sui pin 0 e 1 con Serial funziona sia in lettura che scrittura

questo per capire se il problema fosse il convertitore.

01 #include <SoftwareSerial.h>

02 #define LED 3
03 #define RXD 10
04 #define TXD 11
05 SoftwareSerial Ser_2(RXD,TXD);  //RXD, TXD.
06 //—Predisposizione----------------------
07 void setup(){
08   Serial.begin(19200);
09   Ser_2.begin(19200);
10   delay(100);
11   pinMode(LED,OUTPUT);
12   digitalWrite(LED,HIGH);
13   Ser_2.print(“Ser_2”);
14  
15 }
16 //—Ciclo principale---------------------
17 void loop(){
18   //Ser_2.listen();
19   if(Ser_2.available()>0){
20     digitalWrite(LED,HIGH);
21     Ser_2.print(Ser_2.read());
22   }
23   if(digitalRead(3)==1){
24     delay(1000);
25     digitalWrite(LED,LOW);
26   }