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 :
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;
}
le projet que j'ai créé est un projet console avec prise en compte MFC.
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 commande
Code : Sélectionner tout - Visualiser dans une fenêtre à part
com.WriteBuffer("C\r\n");
permet la réception continue des données.

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 ?