toint leer float example concatenate caracteres cadena array arduino serial-port

leer - ¿Cómo transmitir una cadena en Arduino?



string to int arduino (2)

Está utilizando el objeto String (Cableado / C ++). La función utiliza cadenas de caracteres: Serial.write (char *). Para convertirlo en una cadena C, use el método toCharArray ().

char* cString = (char*) malloc(sizeof(char)*(outMessage.length() + 1); outMessage.stoCharArray(cString, outMessage.length() + 1); Serial1.write(cString);

Si no asignamos la memoria para nuestra cadena C con malloc, obtendremos una falla. El siguiente código se bloqueará.

void setup() { Serial.begin(9600); String myString = "This is some new text"; char* buf; Serial.println("Using toCharArray"); myString.toCharArray(buf, myString.length()+1); // **CRASH** buf is not allocated! Serial.println(buf); } void loop() { // put your main code here, to run repeatedly: }

En el Monitor Serial, el único mensaje que obtendremos es: Usando toCharArray. En ese punto, la ejecución se detiene. Ahora si corregimos el problema y usamos malloc () para asignar memoria para nuestro buffer y también usamos free () cuando termine ...

void setup() { Serial.begin(9600); String myString = "This is some new text"; char* buf = (char*) malloc(sizeof(char)*myString.length()+1); Serial.println("Using toCharArray"); myString.toCharArray(buf, myString.length()+1); Serial.println(buf); Serial.println("Freeing the memory"); free(buf); Serial.println("No leaking!"); } void loop() { // put your main code here, to run repeatedly: }

La salida que vemos en el Monitor Serial es: Usando toCharArray Este es un texto nuevo Liberando la memoria ¡Sin fugas!

Quiero que 2 Arduinos Leonardo se comuniquen, envíe una cadena, por ejemplo, así que tengo que usar Serial1 para comunicarme a través de RS232 en los pines 0 (RX) y 1 (TX).

Necesito escribir datos binarios en esos pines, el problema es cómo puedo enviar un String usando Serial1.write . Serial1.print funciona sin errores, pero creo que no hace lo que quiero. ¿Cualquier sugerencia?

void setup() { Serial.begin(9600); Serial1.begin(9600); while (!Serial); // while not open, do nothing. Needed for Leonardo only } void loop() { String outMessage = ""; // String to hold input while (Serial.available() > 0) { // check if at least one char is available char inChar = Serial.read(); outMessage.concat(inChar); // add Chars to outMessage (concatenate) } if (outMessage != "") { Serial.println("Sent: " + outMessage); // see in Serial Monitor Serial1.write(outMessage); // Send to the other Arduino } }

esta línea Serial1.write(outMessage); me está dando el error

" no matching function for call to ''HardwareSerial::write(String&)'' "


Usar toCharArry (), write () usa char *, no cadena, esto es lo que quiero decir:

void setup() { Serial.begin(9600); Serial1.begin(9600); while (!Serial); } void loop() { String outMessage = ""; while (Serial.available() > 0) { char inChar = Serial.read(); outMessage.concat(inChar); } if (outMessage != "") { Serial.println("Sent: " + outMessage); char* CharString; // outMessage.toCharArray(cString, outMessage.length()) // My Changes Are Here Serial1.write(CharString); // } }