Enviar + de 1 caracter puerto serial..

Hola a todos! quería hacerles una consulta a ver si me pueden ayudar, quiero enviar una cadena de caracteres por serial, pongo mi código:

#include <SoftwareSerial.h>
char c;
int a;
void setup()
{
  Serial.begin(9600);
  pinMode(5, OUTPUT);
  digitalWrite(5, HIGH);
}
void loop()
{
          if (Serial.available()) {
          c=Serial.read();
          switch (c) {
          case "vPMW2a6Cd5xxvqS2":
          digitalWrite(5, LOW);
          medir();
          break;
         } 
       }   
     }

  
void medir() {
while(c!="vPMW2a6Cd5xxvqS2"){
a=analogRead(0);
Serial.println(a);
if(Serial.available()){
c = Serial.read();
if(c=='D') {
  digitalWrite(5, HIGH);
return;
   }
  }
 }
}

pero al no se 1 caracter da error…como puedo hacer para enviar los caracteres del Case y leerlos?
yo los envío por monitor, con 1 caracter anda bien:

#include <SoftwareSerial.h>
char c;
int a;
void setup()
{
  Serial.begin(9600);
  pinMode(5, OUTPUT);
  digitalWrite(5, HIGH);
}
void loop()
{
          if (Serial.available()) {
          c=Serial.read();
          switch (c) {
          case 'A':
          digitalWrite(5, LOW);
          medir();
          break;
         } 
       }   
     }

  
void medir() {
while(c!='A'){
a=analogRead(0);
Serial.println(a);
if(Serial.available()){
c = Serial.read();
if(c=='D') {
  digitalWrite(5, HIGH);
return;
   }
  }
 }
}

así con 1 solo caracter anda bárbaro, pero como puedo hacer para enviar mas de 1, no se 4 o 5 o 15 por ejemplo…
Ojala me puedan ayudar, saludos y gracias de antemano…

Any.

También probé así:

#include <SoftwareSerial.h>
void setup()
{
  Serial.begin(9600);
  Serial.setTimeout(2000);
  pinMode(5, OUTPUT);
  digitalWrite(5, HIGH);
}
void loop()
{
  if (Serial.available() > 0) {
  Serial.println(Serial.readString());
  
    if(Serial.readString() =="vPMW2a6Cd5xxvqS2") {
    digitalWrite(5, HIGH);
  }
    if(Serial.readString() =="uakPCTcUQJqPVKWg") {
    digitalWrite(5, LOW);
  }
 }
}

pero no hace la comparación aparentemente, porque no enciende el rele…
asi tampoco:

#include <SoftwareSerial.h>

String cadena;

void setup()
{
  Serial.begin(9600);
  Serial.setTimeout(500);
  pinMode(5, OUTPUT);
  digitalWrite(5, HIGH);
}
void loop()
{
  if (Serial.available() > 0) {
  Serial.println(Serial.readString());
  cadena = Serial.readString();
  
  if(cadena == "1") {
  digitalWrite(5, LOW);
 }
  if(cadena =="2") {
  digitalWrite(5, HIGH);
  cadena == "";
  }
 }
}
c=Serial.read();

esta línea lee solo un caracter.
No tienes una instrucción que acumule los caracteres y los guarde en un vector para luego poder hacer comparaciones.

if (Serial.available()) {
          c=Serial.read();
          switch (c) {
          case "vPMW2a6Cd5xxvqS2":

Esto jamás funcionará. Porque solo lees caracteres así que el ejemplo que te indico ahora si funcionará

if (Serial.available()) {
          c=Serial.read();
          switch (c) {
          case 'A':
          digitalWrite(5, LOW);
          medir();
          break;
         }

Lees y comparas caracteres. Ese si funciona.

Este otro ejemplo :

if (Serial.available() > 0) {
  Serial.println(Serial.readString());
  cadena = Serial.readString();
 
  if (cadena == "1") {
      digitalWrite(5, LOW);
 }

Si funciona porque Serial.readString() devuelve un String.

Hola Surbyte, gracias por tu respuesta…el tema es que yo quisiera que no sea solo 1 caracter sino varios…
estuve probando este otro código pero no logro que se muestre nada

#include <SoftwareSerial.h>
char c[16];
int a;
void setup()
{
  Serial.begin(9600);
  pinMode(5, OUTPUT);
  digitalWrite(5, HIGH);
}
void loop()
{

  if (Serial.available() > 0) {

     Serial.println(Serial.readString());

    String num = Serial.readString();

    Serial.println("el código guardado en la variable es :");

    Serial.println(num);

    if (num =="vPMW2a6Cd5xxvqS2"){

      digitalWrite(5, LOW);
  }
      if (num =="uakPCTcUQJqPVKWg"){

      digitalWrite(5, HIGH);
  }
 }
}

pero no escribe la variable, o sea esta vacía…

Si hago esto:

#include <SoftwareSerial.h>

String cadena;

void setup()
{
  Serial.begin(9600);
  Serial.setTimeout(500);
  pinMode(5, OUTPUT);
  digitalWrite(5, HIGH);
}
void loop()
{
  if (Serial.available() > 0) {
  Serial.println(Serial.readString());
  cadena = Serial.readString();
  Serial.println("Cadena es igual a:");
  Serial.println(cadena);
  if (cadena == "1") {
      digitalWrite(5, LOW);
  }
  if (cadena == "2") {
      digitalWrite(5, HIGH);
  }
 }
}

cadena esta vacía…como hago para que guarde la info de Serial.readString(); en cadena?
cadena = Serial.readString(); así no lo guarda…

Retira esto

Serial.println(Serial.readString());

y dejalo asi

if (Serial.available() > 0) {
  cadena = Serial.readString();
  Serial.println("Cadena es igual a:");
  Serial.println(cadena);

Ahi debe funcionar.

Hola de nuevo Surbyte, gracias por responderme, funciona lo que me dijiste pero no hace la comparación con el if, o si la hace algo sale mal y no activa el rele…

#include <SoftwareSerial.h>

String cadena;

void setup()
{
  Serial.begin(9600);
  //Serial.setTimeout(500);
  pinMode(5, OUTPUT);
  digitalWrite(5, HIGH);
}
void loop()
{
  if (Serial.available() > 0) {
  //Serial.println(Serial.readString());
  cadena = Serial.readString();
  //Serial.println("Cadena es igual a:");
  Serial.println(cadena);
  
  if (cadena == "vPMW2a6Cd5xxvqS2") {  //probé con 'A' y también con "A" pero tampoco compara
      digitalWrite(5, LOW);
  }
  if (cadena == "uakPCTcUQJqPVKWg") {
      digitalWrite(5, HIGH);
  }
 }
}

como puedo hacer para que compare y encienda el rele en caso de coincidir?

Hola!! solucionado con este código:

#define DEBUG(a) Serial.println(a);
 
void setup()
{
   Serial.begin(9600);
   pinMode(5, OUTPUT);
   digitalWrite(5, HIGH);
}
 
void loop()
{
   if (Serial.available())
   {
      String data = Serial.readStringUntil('\n');
      DEBUG(data);
      if (data == "vPMW2a6Cd5xxvqS2") {
      digitalWrite(5, LOW);
  }
  if (data == "uakPCTcUQJqPVKWg") {
      digitalWrite(5, HIGH);
  }
   }
}

agradezco a Surbyte por haberme respondido..
espero que el código le sirva a alguien, gracias igual a todos, saludos

Any.