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); //
}
}