Desde Python hasta Arduino sólo envía 1 carácter [SOLUCIONADO]

Buenas,

Estoy haciendo una conexión Arduino-Python-Python-Arduino y me encuentro con el siguiente problema:

Desde Arduino envío un string perfectamente que recibo en Python y trabajo con él sin problemas.
El problema viene cuando trato de enviar un string que genero en Python hasta Arduino.

Así envío mi cadena de texto desde Python:

PuertoSerie = serial.Serial('/dev/tty.usbmodemXXXX', 115000, timeout=1)
time.sleep(1.8)

cadena = 'PROBANDO'
PuertoSerie.write(cadena)

PuertoSerie.close()

Así trato de recibirla en Arduino para guardarla en una microSD:

if (Serial.available() > 0) {
        
        texto[0] = Serial.read();
        
        File dataFile = SD.open("LEEME.TXT", FILE_WRITE);
        if (dataFile) {
           dataFile.print(texto[0]);
           dataFile.close();
        }
}

Es como si guardara la cadena letra a letra, cada vez que ejecuto el programa guarda una letra.
Algunas veces me guarda un espacio en blanco.

He probado a ponerles pausas en el .INO y en el .PY para ver si es que no da tiempo de grabar de forma correcta, pero dudo que sea eso. La lectura de la tarjeta desde Arduino a Python la hace perfecta y muy rápido.

¿Alguien sabe qué puede estar pasando?

Eso es porque de verdad los recibe letra a letra. para solucionar tu problema debes hacer algo como esto.

while(Serial.available()){
	texto = Serial.read();
}
Serial.close();

if(strlen(texto) > 0){ //  sólo si hay información
	File dataFile = SD.open("LEEME.TXT", FILE_WRITE);
	if (dataFile) {
		dataFile.print(texto);
		dataFile.close();
	}
}

Saludos

gepd, tu solucion tiene un pequeño fallo ya que asi solo grabaria la ultima letra

En verdad serial algo como

String texto = "";
while(Serial.available()){
	texto += Serial.read();
}
Serial.close();

if(strlen(texto) > 0){ //  sólo si hay información
	File dataFile = SD.open("LEEME.TXT", FILE_WRITE);
	if (dataFile) {
		dataFile.print(texto);
		dataFile.close();
	}
}

Seria cuestión de probarlo y ver si funciona

gepd y max_saeta muchas gracias por vuestras respuestas, me han ayudado bastante a solucionar este asunto.

Así lo reconoce como texto correctamente y guarda la cadena completa.

if(Serial.available()){
    String texto = "";
    char character;
        
    while(Serial.available()){
        character = Serial.read();
        texto.concat(character);
    }
    Serial.end();
    File dataFile = SD.open("LEEME.TXT", FILE_WRITE);
    if (dataFile) {
        dataFile.print(texto);
        dataFile.close();
    }else{
        valorArduino = 9999;
        Serial.println(valorArduino);
    }
}

Saludos!!

Cierto max se me había pasado ese detalle!