Bonjour, j'ai utilisé le code fourni dans la FAQ VC++ pour écrire un programme qui lit les donnée sur le port série.
voici le lien vers la FAQ : http://c.developpez.com/faq/vc/?page...WithSerialPort
et voici le code que j'ai écrit :le projet que j'ai créé est un projet console avec prise en compte MFC.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 // Qtrak.cpp : définit le point d'entrée pour l'application console. // #include "SerialCom.h" #include "stdafx.h" #include "Qtrak.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // Seul et unique objet application CWinApp theApp; using namespace std; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // Initialise MFC et affiche un message d'erreur en cas d'échec if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO : modifiez le code d'erreur selon les besoins _tprintf(_T("Erreur irrécupérable : l'initialisation MFC a échoué\n")); nRetCode = 1; } else { // TODO : codez le comportement de l'application à cet emplacement. cout << "Création de l'objet Com" << endl; CCom com; cout << "Objet créé à l'adresse "<< &com << endl; cout << "Ouverture du port" << endl; com.PortOpen(1,57600,'N',8,0); cout << "Port ouvert" << endl; cout << "Réglage du mode de communication Rts/Cts"<< endl; com.UseXonXoff(); cout << "Mode de communication réglé" << endl; cout << "Définition de l'événement d'attente" << endl; com.SetCommMask(EV_RXCHAR); // spécifie l'événement d'attente. cout << "Evenement d'attente spécifié" << endl; cout << "Envoi d'une commande au Fastrak" << endl; com.WriteBuffer("C\r\n"); cout << "Commande envoyée" << endl; DWORD EvtMask; com.WaitCommEvent(EvtMask);// attente réception char sz[50]; com.ReadBuffer(sz,sizeof(sz)); for (int i = 0; i<50; i++) { cout << "SZ :: " << sz[i] << endl; } AfxMessageBox(CString(sz,com.GetCountRead())); } return nRetCode; }
A l'éxécution de ce projet, la chaine de caractère renvoyée est uniquement remplie de I avec un accent ÍÍÍÍÍÍ et en console, ça donne des caractères comme ça : ╠╠╠╠╠╠ et lorsque je fais une conversion vers un entier, ça donne -52 ( ce qui correspond à 204 = 256 + (-52), 204 étant le code ascii pour ╠)
j'ai essayé les différents modes de communications (XON/XOFF, RTC/CTS, DTR/DSR) mais le résultat est toujours le même.
La commande C qui est envoyée par cette commandepermet la réception continue des données.
Code : Sélectionner tout - Visualiser dans une fenêtre à part com.WriteBuffer("C\r\n");
Voici mes questions :
- Que pensez vous du code ? (erreurs d'écritures, optimisation, etc.)
- Comment configurer le port pour assurer une réception correcte des données ?
Partager