Printf sous Arduino

Bonjour :smiley:

j'ai un élément que j'ai du mal à comprendre, j'essaie d'importer une librairie c++ sous Arduino (qui du coup, contiens des printf).

Je sait bien que la fonction qui viens replacer cela suis Arduino est Serial.print() cependant, dans une fonction j'ai :

void * UMLRTController::run ( void * args )
{
    printf("Controller \"%s\" running.\n", name());
    printf("ALED");
    // reste du code ...
}

Et, a priori, le premiers printf s'affche dans le moniteur série mais pas le 2e

La fonction run est bien la première appelé dans mon programme et j'ai dans le moniteur serie

Controller "DefaultController" running.

Du coup j'ai du mal à comprendre comment le printf() est géré sous arduino si quelqu'un peut éclairé ma lanterne ^^

Merci d'avance.

EDIT :
Pour essayer de debuger j'ai fait :

Serial.println("pré printf()");
printf("Controller \"%s\" running.\n", name());
Serial.println("post printf()");

Et dans mon moniteur serie j'ai :

11:16:17.460 -> pré printf()
11:16:17.460 -> Controller "DefaultController" running.
11:16:17.460 -> post printf()

Donc visiblement le printf() est bien interpréter mais pas dans tout les cas

printf() existe sur ARDUINO mais il n'y a pas de flux associé, à moins qu'il ne s'agisse d'une plateforme ESP8266 ou ESP32 ?

printf("ALED"); // manque \n

Dans tous les cas printf est bufferisé. L'affichage se produit uniquement après un '\n'.

La recette pour ARDUINO : printf

Effectivement, je tourne sous ESP32

Donc c'est bien un problème de \n absent.

il y a une raison particulière pour que le \n soit obligatoire ?

C'est comme ça sur toutes les plateformes.
Il est possible de supprimer la bufferisation avec setvbuf :

   setvbuf(stdout, NULL, _IONBF, 0); //turn off buffering

Cela marche t'il sur ESP32 ? Aucune idée.

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