Go Down

Topic: Réception de chaines de caractère sur le port série (Read 2 times) previous topic - next topic

darkduino

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

Jean-François

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.  :smiley-sleep:
MacBook intel core 2 duo  os X snow Leopard 10.6
 eMac PPc G4  os X Leopard 10.5
powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

B@tto

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 :

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

darkduino

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

B@tto

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 ?

darkduino

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

Go Up