[SOLUCIONADO] Rescate de un antiguo codigo publicado en Documentacion

.

El código siguiente, lo he leido y copiado de la sección Documentacion y no funciona.
Seria posible que lo comprobarais por si tiene algún fallo .
Me gustaría recuperarlo y hacer alguna variación.

Un saludo !!! :cocktail: :cocktail:

 /*
  * 
  *  Codigo rescatado de la seccion documentacion
  * 
  * NO FUNCIONA !!!!
  * 
  * https://forum.arduino.cc/t/arduino-leer-monitor-serial/1109405
  * 
  * 
  */
 String inputString = "";
bool strinComplete = false;

void setup() {
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);
}

void loop() {
    if (strinComplete) {
    inputString.trim();
    Serial.println(inputString);
    if (inputString.equals("on")) {
      digitalWrite(LED_BUILTIN, HIGH);}
    
    else if (inputString.equals("off")) {
      digitalWrite(LED_BUILTIN, LOW);}
    
    inputString = "";
    strinComplete = false;
  }
}
void serialEvent() {
  while (Serial.available()) {
    char inChar = (char)Serial.read();
    if (inChar == '\n') {
      strinComplete = true;
    }
    else {
      inputString += inChar;
    }
  }
} 

Si que funciona, mira

Saludos

1 Like

No tiene nada de antiguo.
Si no hay librerías involucradas los códigos siguen funconando porque son digamos standard.

1 Like

Qué versión de Arduino estás utilizando?

1 Like

Hola Maestros (por orden de respuesta):
MaximoEsfuerzo, Surbyte y mancera1979.
A mi no me funciona, he probado con mayúsculas y minúsculas: NADA.

He re-copiado desde aquí otra vez el código (una vez me funciono): NADA.

Mi version:1.8.3.

Compruebo que RX parpadea cada vez que envio por Monitor "on" u "off", por tanto se esta enviando la orden. Pero...NADA.

De todas maneras, os doy las gracias por vuestra rápida y atenta respuesta. !!!

Lo seguiré intentando !! :cocktail: :cocktail:

Pregunto por la versión de la placa (Uno, Mega, etc. ), porque Serial.event() no funciona con todas

https://www.arduino.cc/reference/en/language/functions/communication/serial/serialevent/

1 Like

.

Hola mancera1979:

Utilizo placa UNO de 2015 (tal vez antigua ??).
Leyendo tu sugerencia, no veo que la UNO tenga limitaciones. (?)
He probado cambiar el pin de salida, de LED_BUILTIN a Pin 10, pero... NADA.

Saludos !!!
Gracias por tu interés !!! :cocktail: :cocktail:

.

El Led esta en pin 13.

  • D13 - 101
  • D13 - Due
  • D1 - Gemma
  • D13 - Intel Edison
  • D13 - Intel Galileo Gen2
  • D13 - Leonardo and Micro
  • D13 - LilyPad
  • D13 - LilyPad USB
  • D13 - MEGA2560
  • D13 - Mini
  • D6 - MKR1000
  • D13 - Nano
  • D13 - Pro
  • D13 - Pro Mini
  • D13 - UNO
  • D13 - Yún
  • D13 - Zero

Hice una prueba y no me funcionó. Entonces verifiqué la velocidad (9600) y nada.

Luego me di cuenta de que mi interfaz serial estaba configurada como "Sin ajuste de línea".

La cambié a "Retorno de carro" y funcionó!

Captura de pantalla 2023-09-28 a las 9.04.39 a.m.

1 Like

La documentación dice ademas que debes reservar espacio para el String.reserve(200) donde 200 son caracteres reservados y es un ejemplo. Usa lo que funcione.

String inputString = "";      // a String to hold incoming data
bool stringComplete = false;  // whether the string is complete

void setup() {
  // initialize serial:
  Serial.begin(9600);
  // reserve 200 bytes for the inputString:
  inputString.reserve(200);
}

void loop() {
  // print the string when a newline arrives:
  if (stringComplete) {
    Serial.println(inputString);
    // clear the string:
    inputString = "";
    stringComplete = false;
  }
}

/*
  SerialEvent occurs whenever a new data comes in the hardware serial RX. This
  routine is run between each time loop() runs, so using delay inside loop can
  delay response. Multiple bytes of data may be available.
*/
void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringComplete = true;
    }
  }
}
1 Like

.

Hola mancera1979:

Siguiendo tus indicaciones:
He probado todas las configuraciones del Monitor y....NADA.
Parece mentira, un código tan sencillo, que nos este dando tanta guerra.

Un saludo !!! :cocktail: :cocktail:

.

Vamos a lo más obvio. Estás tecleando aquí y terminando con "return" (o "Enter"), con la interfaz serial a 9600?

1 Like

Hola Surbyte:

He seguido tus instrucciones:

Ni añadiendo el "reserve", ni nada.
Que extraño, que a todos os funcione y a mi no,????
Siento darte tanto trabajo con un código tan sencillo, pero que no funciona de ninguna manera. Ufff!!!

Un saludo !!! :cocktail: :cocktail:

.

Hola mancera1979:

Aleluya !!! ya funciona.

Todas tus indicaciones, ya las hacia, (elemental querido Watson)

Al ver tu pantallazo del monitor...., vi que tenias la configuración en: Nueva linea.
Yo, ya había probado varias configuraciones sin éxito, al fin puse esta (que nunca la había utilizado) y...FUNCIONO.
Todos las variantes que he hecho me han funcionado, inclusive el genérico que apuntaba Surbyte:

https://www.arduino.cc/en/Tutorial/BuiltInExamples/SerialEvent

Un pequeño detalle, nos puede causar un desastre !!!
Al menos,... que sirva a otros !!!

Gracias a ti y a todos por vuestras aportaciones !!!! :cocktail: :cocktail:

.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.