Réception de chaines de caractère sur le port série

Bonjour,

J'aimerais savoir comment on réceptionne une chaine de caractères sur le port série. Les caractères sont envoyées par le terminal d'arduino. Voici mon programme

int incomingByte=0; // variable de stockage des données entrantes

void setup(){ Serial.begin(9600); } void loop(){ // envoie des données niquement si le µC en reçoit if(Serial.available()>0){// si des données entrantes sont présentes // lit le 1er octet arrivé incomingByte = Serial.read(); Serial.println("J'ai recu : "); Serial.println(incomingByte,BYTE); } }``

Ce programme ne va afficher à chaque fois seulement un caractère. Si je tape "OK" puis CR, hyperterminal affichera le message suivant : J'ai recu : O J'ai recu : K

Ce que je voudrais c'est pouvoir faire une chaine de caractères où se mettrait O et K, pour afficher le message suivant :

J'ai recu : OK

Merci d'avance

Tu fais une boucle qui te mets à chaque fois le byte reçu dans un tableau... le sujet à été traité la semaine passée sur le forum. :sleeping:

Darkduino, ton problème vient du fait que tu n'as pas compris que la fonction Serial.read() ne lit qu'un seul caractère à la fois, c'est pour celà que quand on veut recevoir par le port série, il faut faire une boucle du genre :

x=0;
while (Serial.available()) BufferSerie[x++]=Serial.read();

Pour répondre à Jean-François, j’ai effectivement vu qu’il y a vait déjà un sujet là-dessus, mais la réponse n’était pas claire pour moi.

Cette histoire de boucle, je ne la saisis pas bien. En fait j’ai réalisé un projet de commande à distance par SMS, il fonctionne, mais je l’ai fait en bascom, j’aimerais maintenant le faire en C ( arduino ). Pour faire simple j’aimerais traduire le programme suivant écrit en basic en C

Print “AT” ’ envoi de la commande AT
Do
A = Ischarwaiting()
If A = 1 Then
A = Inkey()
If A <> 13 And A <> 10 Then
Response = Response + Chr(a)
Else
Incr B
Select Case B
Case 3
If Response <> “OK” Then
B = 0
Else
Response = “”
End If
End Select
End If
Else
Print “AT”
End If
Waitms 20
Loop Until B = 4
B = 0

Sinon B@tto, j’ai bien saisi que Serial.read() ne reçoit qu’un caractère à la fois mais j’aimerais détourné cet inconvénient autrement qu’avec la boucle, comme dans mon programme en basic

Merci d’avance

En fait si je comprends bien, tu veux recevoir les caractères un à un, et que ton programme attende à chaque fois qu'un nouveau caractère arrive pour continuer à avancer ?

En fait je veux attendre un caractère un à un mais lorsqu'ils sont différents de LF et de CR je voudrais les placer dans une chaine de caractère. Le téléphone envoie LF CR LF CR O K LF CR. J'aimerais en fait mettre OK dans un string