SoftwareSerial

Elegiremos dos pines digitales para crear un nuevo puerto serie, Rx/Tx que yo le llamo “vserial”, Este nuevo puerto se comunicará a la velocidad elegida con el dispositivo que le conectemos (por ejemplo un HC-08), si hubiera sido un HC-05 la velocidad debe establecerse en (38400)) si queremos entrar en su configuración.

Enlace bidireccional entre la consola y el dispositivo:

Establecemos un canal bidireccional de comunicaciones serie que nos va a servir para enlazar el monitor o consola con módulos bluetooth HC-0X y otros dispositivos

La velocidad del monitor de puerto serie del Ide Arduíno, no tiene nada que ver con la velocidad del nuevo puerto virtual creado. En este ejemplo el monitor esta conectado a 9600 Bd y el dispositivo a 115200 Bd. Lo que envie desde el monitor(serial.Read()),se enviará al dispositivo y(vserial.println), y lo que se reciba del dispositivo (vserial.read) se recibirá en el monitor(serial.println)

#include <SoftwareSerial.h>

SoftwareSerial vserial(3, 2); // RX, TX (placa) que se conectara con Tx,Rx del dispositivo

void setup() {
  Serial.begin(9600);
while(Serial.available()>0)Serial.read();

  Serial.println("INTRODUCIR COMANDOS AT");
  vserial.begin(115200);
 }

void loop() 
{
 if ((Serial.available()>0)) {
      vserial.println(Serial.readStringUntil('\n'));

    }
    if ((vserial.available()>0)) {
      Serial.println(vserial.readStringUntil('\n'));

    }
}

Ejemplo de envío de datos con un solo caracter”

SoftwareSerial mySerial(3,2);

void setup()
{
 
mySerial.begin(115200);

 mySerial.println('A');
  delay(100);
 

Ejemplo de recepción de datos de un solo caracter

Para ello utilizaremos la variable “char” unica posible en este caso usando la función switch()…case(), lo que se traduce que solo podremos usar caractéres y no cadenas.



SoftwareSerial mySerial(3,2);

char rxserial;

void setup()
{
  myserial.begin(115200);

void loop()
{
  if (myserial.available()>0)
  {
    rxserial=myserial.read();
  }
  switch (rxserial)
  {
    case 'A':
      /instrucciones;
      break;
    case'B':
      robot.reverse(100,100,200);
      break;
        default:
     //instrucciones;
      rxserial='X';
     
      
  }
}

Ejemplo de envío de datos de una cadena de cacteres



SoftwareSerial mySerial(3,2);


void setup(){
mySerial.begin(115200);
}




void loop(){

if (analogRead(A0)>=4) {
     mySerial.println("abc...");
delay()
}
}

Recibir una cadena de caracteres :

Si un texto contiene la cadena “abc…”.

Uso de la función indexOf(): Busqueda de la primera / última instancia de un carácter en una cadena.

!=-1 —ausencia de datos en la entrada Serial-

String Rx=String(mySerial.readStringUntil('\n');



if ((Rx).indexOf("abc...."))!=-1)) {

    //hacer algo; 
    }

El siguiente ejemplo busca la cadena “ABC”. No necesita ninguna otra función, aunque no es tan efectiva como la anterior. Usando while() la recepción de datos esta mas asegurada.



String Rx=String(mySerial.readStringUntil('\n');



if ((Rx)!=-1){
 while (MySerial.find("ABC")){
//instrucciones
}
}

Recepción y presentación en pantalla Oled de una cadena de caractéres

if (myserial.available()>0){ 
   String rx=myserial.readStringUntil('\n');//si escribo char rx=myserial.read(), se imprimira caracter a //caracter.
    oled.clearDisplay();
     oled.setCursor(45,35);
    oled.print(rx);
         oled.display();
    delay(1000);

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Translate »