Go Down

Topic: Réception de chaines de caractère sur le port série (Read 2435 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<br/> eMac PPc G4  os X Leopard 10.5<br/>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();
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

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 ?
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy