[SOLUCIONADO] Se repite el mensaje de salida como loco

Hola:

Lo probaré y avisaré. El detalle es más así, con el LOW 2, 3 y 4, lo mismo para el HIGH que se se escapó. A parte de ello, tiene que haber un espacio después del número porque sino salen todos juntos de esta manera.

LOW 1LOW 2LOW 3LOW 4
-------------------------

Debe salir así:
LOW 1 LOW 2 LOW 3 LOW 4
-------------------------

imprimeEstados(){
  if(estadoBoton1 == 0){
    Serial.print("LOW 1");
  }else{
    Serial.print("HIGH 1");
  }
  if(estadoBoton2 == 0){
    Serial.print("LOW 2");
  }else{
    Serial.print("HIGH 2");
  }
  if(estadoBoton3 == 0){
    Serial.print("LOW 3");
  }else{
    Serial.print("HIGH 3");
  }
  if(estadoBoton4 == 0){
    Serial.println("LOW 4");
  }else{
    Serial.println("HIGH 4");
  }
Serial.println("-------------------");

Voy a probar la función, cuando acabe, editaré este post si nadie ha escrito algo nuevo debajo de este.

Saludos y gracias por las ayudas.

y porque no aprendes a usar sprintf y sacas las impresiones como gustes.

  char buffer[40];

sprintf(buffer,"%c %c %c %c", estadoboton1?"HIGH 1":"LOW 1", estadoboton2?"HIGH 2":"LOW 1", 
                              estadoboton3?"HIGH 3":"LOW 3", estadoboton4?"HIGH 4":"LOW 4");
Serial.println(buffer);

Jajaja, surbyte. Te me has vuelto un talibán del sprintf, ¿eh?

Que conste que yo también lo soy, pero preferí no cambiar demasiado el planteamiento de partida. Las opciones "abreviadas" las suelo dejar para después, que fastidia más :wink:
(evidentemente por "fastidiar" me refiero a que cala más la alternativa, no que sea sádico ;)).

Por cierto, supongo que lo correcto serían %s en lugar de %c.

Buenas:

El libro que he comrpado, precisamente para novatos, no dice nada del sprintf, tendré que leer más por ahí.

Por cierto, tampoco dice nada de los %s y %c. ¿Qué significan?

Saludos.

tienes razón... es %s como bien dices.
Gracias por lo de talibán jajaja sin ofenderlos, no quiero volar por los aires.

Metaconta: si no sabes que debes hacer? GOOGLEEE!!
Arduino sprintf esta página no es de arduino. Es de Linuz y por lo tanto tiene todas las bondades de sprintf bien explicdas.
Lo único que debes obviar es el uso de %f ya que no se puede usar manejo de floats en Arduino por una cuestión de tamaÑo.
Ahora ya es hora que lo hagan no?

surbyte:
tienes razón... es %s como bien dices.
Gracias por lo de talibán jajaja sin ofenderlos, no quiero volar por los aires.

Lo último los ofendes más.

Metaconta: si no sabes que debes hacer? GOOGLEEE!!

Tengo que saber su existencia primero, en un libro debía ponerlo.

Arduino sprintf esta página no es de arduino. Es de Linuz y por lo tanto tiene todas las bondades de sprintf bien explicdas.
Lo único que debes obviar es el uso de %f ya que no se puede usar manejo de floats en Arduino por una cuestión de tamaÑo.
Ahora ya es hora que lo hagan no?

Ahora se vuelve loco una y otra vez.

byte estadoBoton1 = 0; // Guardará el estado del botón HIGH o LOW.
byte estadoBoton2 = 0;
byte estadoBoton3 = 0;
byte estadoBoton4 = 0;
byte estadoBotonAnt1 = 0;
byte estadoBotonAnt2 = 0;
byte estadoBotonAnt3 = 0;
byte estadoBotonAnt4 = 0;
char caracter;
String comando;
char buffer[40];

void setup()
{
  pinMode(13,OUTPUT); // Donde está el Led 13.
  pinMode(12,OUTPUT); 
  pinMode(11,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(8,INPUT); // Entrada digital 8.
  pinMode(7,INPUT);
  pinMode(6,INPUT);
  pinMode(5,INPUT);
  Serial.begin(115200);

  estadoBoton1 = digitalRead(8);

  // imprime el estado al encender arduino
  if(estadoBoton1 == 0){
    Serial.print("LOW 1 ");
  }else{
    Serial.print("HIGH 1 ");
  }
  estadoBotonAnt1 = estadoBoton1;

  if(estadoBoton2 == 0){
    Serial.print("LOW 2 ");
  }else{
    Serial.print("HIGH 2 ");
  }
  estadoBotonAnt2 = estadoBoton2;

    if(estadoBoton3 == 0){
    Serial.print("LOW 3 ");
  }else{
    Serial.print("HIGH 3 ");
  }
  estadoBotonAnt3 = estadoBoton3;

    if(estadoBoton4 == 0){
    Serial.println("LOW 4");
  }else{
    Serial.println("HIGH 4");
  }
  estadoBotonAnt4 = estadoBoton4;

  Serial.println("---------------------------");
}

void loop() {

sprintf(buffer,"%s %s %s %s", 
estadoBoton1?"HIGH 1":"LOW 1", 
estadoBoton2?"HIGH 2":"LOW 1",
estadoBoton3?"HIGH 3":"LOW 3", 
estadoBoton4?"HIGH 4":"LOW 4");

Serial.println(buffer);

estadoBotonAnt1 = estadoBoton1;
estadoBotonAnt2 = estadoBoton2;
estadoBotonAnt3 = estadoBoton3;
estadoBotonAnt4 = estadoBoton4;
}

Gracias por la Web.

Que has hecho Metaconta? Yo solo te sugerí sprintf para que las impresiones por Serial salieran como tu quieres nada mas.
Como lo usas es tu responsabilidad.

Usalo en

imprimeEstados() {
      sprintf(buffer,"%6s %6s %6s %6s", estadoBoton1?"HIGH 1":"LOW 1", estadoBoton2?"HIGH 2":"LOW 1", estadoBoton3?"HIGH 3":"LOW 3",  estadoBoton4?"HIGH 4":"LOW 4");

      Serial.println(buffer);
}

Los estados deben cambiar en otra parte del programa.

Hola:

byte estadoBoton1 = 0; // Guardará el estado del botón HIGH o LOW.
byte estadoBoton2 = 0;
byte estadoBoton3 = 0;
byte estadoBoton4 = 0;
byte estadoBotonAnt1 = 0;
byte estadoBotonAnt2 = 0;
byte estadoBotonAnt3 = 0;
byte estadoBotonAnt4 = 0;
char caracter;
String comando;
char buffer[40];

void setup()
{
  pinMode(13,OUTPUT); // Donde está el Led 13.
  pinMode(12,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(8,INPUT); // Entrada digital 8.
  pinMode(7,INPUT);
  pinMode(6,INPUT);
  pinMode(5,INPUT);
  Serial.begin(115200);



      sprintf(buffer,"%6s %6s %6s %6s", 
      estadoBoton1?"HIGH 1":"LOW 1", 
      estadoBoton2?"HIGH 2":"LOW 1", 
      estadoBoton3?"HIGH 3":"LOW 3", 
      estadoBoton4?"HIGH 4":"LOW 4");

      Serial.println(buffer);

}

void loop() {

  estadoBoton1 = digitalRead(8);
 
    // Si el pulsador está pulsado, se enciende el Led 13 y
    // envía comando HIGH por el puerto serie.
    if (estadoBoton1 == HIGH && estadoBotonAnt1 == LOW)
    {
        digitalWrite(13,HIGH);
        Serial.println("HIGH 1");
        delay(50);
    }
  
    // De lo contrario, Led 13 epagado y envía LOW al puerto serie.
    if (estadoBoton1 == LOW && estadoBotonAnt1 == HIGH) {
        digitalWrite(13,LOW);
        Serial.println("HIGH 1");
        delay(50);
    }

        estadoBotonAnt1 = estadoBoton1;

          estadoBoton2 = digitalRead(7);
 
    // Si el pulsador está pulsado, se enciende el Led 13 y
    // envía comando HIGH por el puerto serie.
    if (estadoBoton2 == HIGH && estadoBotonAnt2 == LOW)
    {
        digitalWrite(12,HIGH);
        Serial.println("HIGH 2");
        delay(50);
    }
  
    // De lo contrario, Led 13 epagado y envía LOW al puerto serie.
    if (estadoBoton2 == LOW && estadoBotonAnt2 == HIGH) {
        digitalWrite(12,LOW);
        Serial.println("LOW 2");
        delay(50);
    }

        estadoBotonAnt2 = estadoBoton2;

          estadoBoton3 = digitalRead(6);
 
    // Si el pulsador está pulsado, se enciende el Led 13 y
    // envía comando HIGH por el puerto serie.
    if (estadoBoton3 == HIGH && estadoBotonAnt3 == LOW)
    {
        digitalWrite(11,HIGH);
        Serial.println("HIGH 3");
        delay(50);
    }
  
    // De lo contrario, Led 13 epagado y envía LOW al puerto serie.
    if (estadoBoton3 == LOW && estadoBotonAnt3 == HIGH) {
        digitalWrite(11,LOW);
        Serial.println("LOW 3");
        delay(50);
    }

        estadoBotonAnt3 = estadoBoton3;

          estadoBoton4 = digitalRead(5);
 
    // Si el pulsador está pulsado, se enciende el Led 13 y
    // envía comando HIGH por el puerto serie.
    if (estadoBoton4 == HIGH && estadoBotonAnt4 == LOW)
    {
        digitalWrite(10,HIGH);
        Serial.println("HIGH 4");
        delay(50);
    }
  
    // De lo contrario, Led 13 epagado y envía LOW al puerto serie.
    if (estadoBoton4 == LOW && estadoBotonAnt4 == HIGH) {
        digitalWrite(10,LOW);
        Serial.println("LOW 4");
        delay(50);
    }

        estadoBotonAnt4 = estadoBoton4;
}

Si, tengo los 4 pulsadores en LOW, en el Monitor Serie muestra:

LOW 1 LOW 1 LOW 3 LOW 4

Apago o Reseteo Arduino, antes dejo todo en HIGH. ME sale estod esto.

LOW 1 LOW 1 LOW 3 LOW 4
HIGH 1
HIGH 2
HIGH 3
HIGH 4

Esto no es normal, jajajjajaja. A parte de eso, no me sale la línea de cuando quiero cambiar un estado, sale solo uno.

Saludos.

Por que combinas mi rutina que imprime todo en una linea con la tuya que no lo hace.
Modifica tus impresiones para que no tengan el println salvo el último

// De lo contrario, Led 13 epagado y envía LOW al puerto serie.
    if (estadoBoton3 == LOW && estadoBotonAnt3 == HIGH) {
        digitalWrite(11,LOW);
        Serial.print("LOW 3");  // todos los anteriores van con Serial.print sin println
        delay(50);
    }
    estadoBotonAnt3 = estadoBoton3;
    estadoBoton4 = digitalRead(5);
    // Si el pulsador está pulsado, se enciende el Led 13 y
    // envía comando HIGH por el puerto serie.
    if (estadoBoton4 == HIGH && estadoBotonAnt4 == LOW)
    {
        digitalWrite(10,HIGH);
        Serial.println("HIGH 4");
        delay(50);
    }
    // De lo contrario, Led 13 epagado y envía LOW al puerto serie.
    if (estadoBoton4 == LOW && estadoBotonAnt4 == HIGH) {
        digitalWrite(10,LOW);
        Serial.println("LOW 4");
        delay(50);
    }
    estadoBotonAnt4 = estadoBoton4;
}

Veo que nos estamos mareando todos un poquillo.
Lo de talibán lo puse sin ánimo de ofender, como supondrás, Ricardo. Va con el sentido de "fundamentalista", y me vino a la mente por un colega mío que decía de otro que era un "talibán del linux". Igual no ha sido muy afortunado. Si es así, pido disculpas.

Y ya que has "descubierto el pastel" del sprintf, exploto ya la traca entera :stuck_out_tongue:

byte estadoBoton1 = 0; // Guardará el estado del botón HIGH o LOW.
byte estadoBoton2 = 0;
byte estadoBoton3 = 0;
byte estadoBoton4 = 0;
byte estadoBotonAnt1 = 0;
byte estadoBotonAnt2 = 0;
byte estadoBotonAnt3 = 0;
byte estadoBotonAnt4 = 0;
char buffer[40];

void setup()
{
  pinMode(13,OUTPUT); // Donde está el Led 13.
  pinMode(12,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(8,INPUT); // Entrada digital 8.
  pinMode(7,INPUT);
  pinMode(6,INPUT);
  pinMode(5,INPUT);
  Serial.begin(115200);
  printEstado();
}

void loop() {

  estadoBoton1 = digitalRead(8);
  estadoBoton2 = digitalRead(7);
  estadoBoton3 = digitalRead(6);
  estadoBoton4 = digitalRead(5);

  if (estadoBoton1 != estadoBotonAnt1 || estadoBoton2 != estadoBotonAnt2 || estadoBoton3 != estadoBotonAnt3 || estadoBoton4 != estadoBotonAnt4)
  {
    digitalWrite(13,estadoBoton1);
    digitalWrite(12,estadoBoton2);
    digitalWrite(11,estadoBoton3);
    digitalWrite(10,estadoBoton4);
    estadoBotonAnt1 = estadoBoton1;
    estadoBotonAnt2 = estadoBoton2;
    estadoBotonAnt3 = estadoBoton3;
    estadoBotonAnt4 = estadoBoton4;
    printEstado();
    delay(50);
  }
}

void printEstado(void) {
  sprintf(buffer,"%s %s %s %s",
    estadoBoton1?"HIGH 1":"LOW 1",
    estadoBoton2?"HIGH 2":"LOW 1",
    estadoBoton3?"HIGH 3":"LOW 3",
    estadoBoton4?"HIGH 4":"LOW 4");
  Serial.println(buffer);
}

Metaconta. No lo he probado, pero aunque funcione a la primera, espero que hagas el esfuerzo de descifrar el funcionamiento de todo el código. Si no entendieras cómo funciona alguna parte, no te quedes con la duda.
Saludos.

Hola:

He probado el código, me ha soltado esto de dos líneas enteras cuando enciendo Arduino.

LOW 1 LOW 1 LOW 3 LOW 4
HIGH 1 HIGH 2 LOW 3 LOW 4

La primera línea no debe sallir. Si pulsas cualquier interruptor, todo funciona muy bien.

Luego modifiqué esta parte que me gusta de esta manera, ordenado los paréntesis.

 if ((estadoBoton1 != estadoBotonAnt1) || 
  (estadoBoton2 != estadoBotonAnt2) || 
  (estadoBoton3 != estadoBotonAnt3) || 
  (estadoBoton4 != estadoBotonAnt4))
  {
    digitalWrite(13,estadoBoton1);
    digitalWrite(12,estadoBoton2);
    digitalWrite(11,estadoBoton3);
    digitalWrite(10,estadoBoton4);
    estadoBotonAnt1 = estadoBoton1;
    estadoBotonAnt2 = estadoBoton2;
    estadoBotonAnt3 = estadoBoton3;
    estadoBotonAnt4 = estadoBoton4;
    printEstado();
    delay(50);
  }

La parte que pusiste aquí abajo.

void printEstado(void)

¿Es obligado si no pones void dentro de ella?

El código de abajo.

char buffer[40];

¿No va 44?
Contando con los espacios por medio.

Saludos.

Bueno.
Si la primera línea sobra, creo que basta con que quites de setup la llamada a printEstado. Lo del void entre los paréntesis no es necesario en este caso, aunque tampoco es incorrecto, y tampoco es mala costumbre ponerlo, porque creo que en definiciones de clases sí que es necesario a veces.
Como te decía, lo importante es que entiendas línea por línea cómo funciona el código, y por qué no funcionaba el tuyo.

Hola:

byte estadoBoton1 = 0; // Guardará el estado del botón HIGH o LOW.
byte estadoBoton2 = 0;
byte estadoBoton3 = 0;
byte estadoBoton4 = 0;
byte estadoBotonAnt1 = 0;
byte estadoBotonAnt2 = 0;
byte estadoBotonAnt3 = 0;
byte estadoBotonAnt4 = 0;
char buffer[44];

void setup()
{
  pinMode(13,OUTPUT); // Donde está el Led 13.
  pinMode(12,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(8,INPUT); // Entrada digital 8.
  pinMode(7,INPUT);
  pinMode(6,INPUT);
  pinMode(5,INPUT);
  Serial.begin(115200);
 // printEstado();
}

void loop() {

  estadoBoton1 = digitalRead(8);
  estadoBoton2 = digitalRead(7);
  estadoBoton3 = digitalRead(6);
  estadoBoton4 = digitalRead(5);

  if ((estadoBoton1 != estadoBotonAnt1) || 
  (estadoBoton2 != estadoBotonAnt2) || 
  (estadoBoton3 != estadoBotonAnt3) || 
  (estadoBoton4 != estadoBotonAnt4))
  {
    digitalWrite(13,estadoBoton1);
    digitalWrite(12,estadoBoton2);
    digitalWrite(11,estadoBoton3);
    digitalWrite(10,estadoBoton4);
    estadoBotonAnt1 = estadoBoton1;
    estadoBotonAnt2 = estadoBoton2;
    estadoBotonAnt3 = estadoBoton3;
    estadoBotonAnt4 = estadoBoton4;
    printEstado();
    delay(50);
  }
}

void printEstado(void) {
  sprintf(buffer,"%s %s %s %s",
    estadoBoton1?"HIGH 1":"LOW 1",
    estadoBoton2?"HIGH 2":"LOW 1",
    estadoBoton3?"HIGH 3":"LOW 3",
    estadoBoton4?"HIGH 4":"LOW 4");
  Serial.println(buffer);
}

Con lo que dijiste, si dejo todos los interruptores en LOW, al reiniciar Arduino, no muestra nada en el Monitor Serie, si dejo algún interruptor en HIGH, solo algunos o todos, se funciona como debería.

Si que cuesta dejar el programa full.

Saludos.

Entonces la idea de dejar en el printEstado en el setup era correcta, pero previamente tendrías que leer estado y establecer los led también. Entonces, sacamos a funciones los trozos de código que estamos repitiendo y queda esto:

byte estadoBoton1, estadoBoton2, estadoBoton3, estadoBoton4;
byte estadoBotonAnt1, estadoBotonAnt2, estadoBotonAnt3, estadoBotonAnt4;
char buffer[44];

void setup()
{
  pinMode(13,OUTPUT); // Donde está el Led 13.
  pinMode(12,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(8,INPUT); // Entrada digital 8.
  pinMode(7,INPUT);
  pinMode(6,INPUT);
  pinMode(5,INPUT);
  Serial.begin(115200);
  leeEstado();
  printEstado();
}

void loop() {
  leeEstado();
  if ((estadoBoton1 != estadoBotonAnt1) ||
  (estadoBoton2 != estadoBotonAnt2) ||
  (estadoBoton3 != estadoBotonAnt3) ||
  (estadoBoton4 != estadoBotonAnt4))
  {
    printEstado();
    delay(50);
  }
}

void leeEstado() {
  estadoBoton1 = digitalRead(8);
  estadoBoton2 = digitalRead(7);
  estadoBoton3 = digitalRead(6);
  estadoBoton4 = digitalRead(5);
}

void printEstado(void) {
  digitalWrite(13,estadoBoton1);
  digitalWrite(12,estadoBoton2);
  digitalWrite(11,estadoBoton3);
  digitalWrite(10,estadoBoton4);
  sprintf(buffer,"%s %s %s %s",
    estadoBoton1?"HIGH 1":"LOW 1",
    estadoBoton2?"HIGH 2":"LOW 1",
    estadoBoton3?"HIGH 3":"LOW 3",
    estadoBoton4?"HIGH 4":"LOW 4");
  Serial.println(buffer);
  estadoBotonAnt1 = estadoBoton1;
  estadoBotonAnt2 = estadoBoton2;
  estadoBotonAnt3 = estadoBoton3;
  estadoBotonAnt4 = estadoBoton4;
}

Ya me funciona todo.

Muchísimas gracias a los participantes que con paciencia, se ha logrado.

:wink:

Como ya te dije, lo importante no es tanto dar con una solución como comprender la solución y por qué tu programa no funcionaba como querías.
Recuerda poner el solucionado.
Saludos.

Gracias por los consejos, eso si, me olvidé una cosa.

En el Monitor Serie, quiero enviar un comando que se llama ACTUALIZAR, si lo envías, muestra los estados al igual que cuando enciende o Resetea Arduino.

Se me vuelve loco, la idea lo dejo en este código.

byte estadoBoton1, 
estadoBoton2, 
estadoBoton3, 
estadoBoton4;
byte estadoBotonAnt1, 
estadoBotonAnt2, 
estadoBotonAnt3, 
estadoBotonAnt4;
char buffer[44];
char caracter;
String comando;

void setup()
{
  pinMode(13,OUTPUT); // Donde está el Led 13.
  pinMode(12,OUTPUT);
  pinMode(11,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(8,INPUT); // Entrada digital 8.
  pinMode(7,INPUT);
  pinMode(6,INPUT);
  pinMode(5,INPUT);
  Serial.begin(115200);
  leeEstado();
  printEstado();
}

void loop() {
  leeEstado();
  if ((estadoBoton1 != estadoBotonAnt1) ||
  (estadoBoton2 != estadoBotonAnt2) ||
  (estadoBoton3 != estadoBotonAnt3) ||
  (estadoBoton4 != estadoBotonAnt4))
  {
    printEstado();
    delay(50);
  }

  while (Serial.available() > 0)
  {
    caracter= Serial.read();
    comando.concat(caracter);
    delay(10);
  }

  if (comando.equals("ACTUALIZAR") == true)
  {
   printEstado();
  }
  
}

void leeEstado() {
  estadoBoton1 = digitalRead(8);
  estadoBoton2 = digitalRead(7);
  estadoBoton3 = digitalRead(6);
  estadoBoton4 = digitalRead(5);
}

void printEstado(void) {
  digitalWrite(13,estadoBoton1);
  digitalWrite(12,estadoBoton2);
  digitalWrite(11,estadoBoton3);
  digitalWrite(10,estadoBoton4);
  sprintf(buffer,"%s %s %s %s",
    estadoBoton1?"HIGH 1":"LOW 1",
    estadoBoton2?"HIGH 2":"LOW 1",
    estadoBoton3?"HIGH 3":"LOW 3",
    estadoBoton4?"HIGH 4":"LOW 4");
  Serial.println(buffer);
  estadoBotonAnt1 = estadoBoton1;
  estadoBotonAnt2 = estadoBoton2;
  estadoBotonAnt3 = estadoBoton3;
  estadoBotonAnt4 = estadoBoton4;
}

Saludos.

Metaconta creo que estas dudando mucho de tu capacidad para resolver los problemas a invocarnos a cada momento que surge algo.
Si miras este post desde el comienzo, no has solucionado ni un solo inconveniente.
Intenta pelear un poco las cosas antes de postear Se me vuelve loco!!!

Este es el criterio que seguramente muchos seguimos al intentar resolver algo:
Aislar el problema.
Ver que parte del programa produce la falla.
Entender que ocurre y buscar su solución.

Claro.
Como dice surbyte, tienes que razonar el problema. El hecho de que tu explicación sea "se me vuelve loco" indica que no te has parado a pensar qué ocurre. Primero concreta qué ocurre (arduino no suele padecer problemas psiquiátricos). Después busca qué condiciones pueden causar ese comportamiento y cómo cambiar esas condiciones.

Buenas campeones:

¿Cómo están todos y todas hoy?

He puesto este código usando while para que lea los bytes de entrada del puerto serie, lo almacena en la variable "caracter". también concatena.

while (Serial.available() > 0)
  {
    caracter= Serial.read();
    comando.concat(caracter);
    delay(10);
  }

En el código de abajo, detecta la palabra ACTUALIZAR si lo envía desde el Monitor Serie.

if (comando.equals("ACTUALIZAR") == true)
  {
   printEstado();
  }

A partir de aquí, se vuelve a repetir mensajes una y otra vez, no lee un asola vez y se para. Eso es lo que me refiero que se vuelve loco. :wink: Pensando bien, no es una forma de expresarse para nada adecuada por mi parte. Sorry.

Desde que acabe la función

printEstado();

Debe salir de ahí. Es lo que creo.

Un cordial saludo.