Pages: [1]   Go Down
Author Topic: Réception de chaines de caractère sur le port série  (Read 2240 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 95
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3839
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
x=0;
while (Serial.available()) BufferSerie[x++]=Serial.read();
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 95
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3839
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 95
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: