IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Programme RS232! Envoie de donné météolorogiques puis enregistrement dans un fichier text!


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Par défaut Programme RS232! Envoie de donné météolorogiques puis enregistrement dans un fichier text!
    Bonjour j'utilise visual C++ 2008 express.

    Ce que je souhaite faire c'est lire une température, un vent fort ou un vent faible que l'on envoie du PIC16F877a par liaison RS232 pour cela on envoie avant une température le nombre 45, avant un vent faible le nombre 96 et avant un vent fort le nombre 20.
    Donc à mon avis le programme devrait être comme ca :
    -lire
    -Si c'est une température
    -lire
    -écrire dans un fichier text
    -lire
    -écrire dans un fichier text (si cela est trop dur on peut avoir qu'une donné température mais cela est moins précis)
    -retourner au debut
    -Si c'est un vent fort
    -lire
    -écire dans un fichier text
    -retourner au debut
    -Si c'est un vent faible
    -lire
    -écire dans un fichier text
    -retourner au debut

    Ce que j'ai fait :

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    DWORD TCommManager::ReadBlock(LPVOID lpBuffer, DWORD dwNbBytesToRead)
    {
    	// nombres d'octets que l'on peut lire sur le port
    	DWORD dwErrorFlags;
    	COMSTAT	ComStat;
    	m_pComm->ClearError(&dwErrorFlags, &ComStat);
    	dwNbBytesToRead = min(dwNbBytesToRead, ComStat.cbInQue);
     
    	// si aucune donnée à lire
    	if(dwNbBytesToRead == 0)
    		return 0;
     
    	// lecture
    	DWORD dwNbBytesRead;
    	OVERLAPPED ov = {0};
    	if(!m_pComm->Read(lpBuffer, dwNbBytesToRead, &dwNbBytesRead, &ov))
    	{
    		// si erreur autre que lecture non terminée
    		if(GetLastError() != ERROR_IO_PENDING)
    			return 0;
     
    		// on attend que la lecture soit finie
    		while(!GetOverlappedResult(m_pComm->GetHandle(), &ov, &dwNbBytesRead, TRUE))
    		{
    			if(GetLastError() != ERROR_IO_INCOMPLETE)
    				break;
    		}
    	}
     
    	// on renvoi le nombre d'octets lu
    	return dwNbBytesRead;
     
    	// Voir si le bytes est égal à 45
    	if(lpBuffer = 00101101)
    	{		
    			int A = 1;
    			int B = 0;
    			int C = 0;
    	}
     
    	// Voir si le bytes est égal à 20
    	if(lpBuffer = 00010100)
    	{ 		
    			int A = 0;
    			int B = 1;
    			int C = 0;
    	}
     
    	// Voir si le bytes est égal à 96
    	if( lpBuffer = 01100000)
    	{	
    			int A = 0;
    			int B = 0;
    			int C = 1;
    	}
     
    	//Voir si c'est une température
    	if(A = 1)
    	{
     
    			// ouverture en écriture avec ajout du fichier ouvert
            	ofstream fichier("Donne-meteolorogique.txt", ios::out | ios::app);  
     
    			if(fichier)
    			{	
    				int A = 0;
    				int temp =  lpBuffer;
                    fichier << "Temperature : " << temp << endl;
     
                    fichier.close();
            	}
            	else
                    	cerr << "Impossible d'ouvrir le fichier !" << endl;
     
            	return 0;
     
    	}
     
    	//Voir si c'est un vent faible
    	if(B = 1)
    	{  
    			// ouverture en écriture avec ajout du fichier ouvert
            	ofstream fichier("Donne-meteolorogique.txt", ios::out | ios::app);  
     
            	if(fichier)
            	{	
    				int B = 0;
    		    	int faible =  lpBuffer;
    		    	fichier << "Vent faible : " << faible << endl;
     
                    	fichier.close();
            	}
            	else
                    	cerr << "Impossible d'ouvrir le fichier !" << endl;
     
            	return 0;
     
    	}
     
    	//Voir si c'est un vent fort
    	if(C = 1)
    	{
    			// ouverture en écriture avec ajout du fichier ouvert
            	ofstream fichier("Donne-meteolorogique.txt", ios::out | ios::app);  
     
            	if(fichier)
            	{		
    				int C = 0;
    		    	int fort =  lpBuffer;
    		    	fichier << "Vent fort : " << fort << endl;
     
    					fichier.close();
            	}
            	else
                    	cerr << "Impossible d'ouvrir le fichier !" << endl;
     
            	return 0;
     
    	}
    }
    Voila les erreur que j'obtient maintenant :

    1>------ Début de la génération : Projet : Serial, Configuration : Debug Win32 ------
    1>Compilation en cours...
    1>CommManager.cpp
    1>c:\users\luffy44\downloads\serial\serial.h(40) : warning C4005: '_countof' : redéfinition de macro
    1> c:\program files\microsoft visual studio 9.0\vc\include\stdlib.h(362) : voir la définition précédente de '_countof'
    1>c:\users\luffy44\downloads\serial\commmanager.cpp(611) : error C2440: '=' : impossible de convertir de 'int' en 'LPVOID'
    1> La conversion d'un type intégral en type pointeur nécessite reinterpret_cast, un cast de style C ou un cast de style fonction
    1>c:\users\luffy44\downloads\serial\commmanager.cpp(619) : error C2440: '=' : impossible de convertir de 'int' en 'LPVOID'
    1> La conversion d'un type intégral en type pointeur nécessite reinterpret_cast, un cast de style C ou un cast de style fonction
    1>c:\users\luffy44\downloads\serial\commmanager.cpp(627) : error C2440: '=' : impossible de convertir de 'int' en 'LPVOID'
    1> La conversion d'un type intégral en type pointeur nécessite reinterpret_cast, un cast de style C ou un cast de style fonction
    1>c:\users\luffy44\downloads\serial\commmanager.cpp(635) : error C2065: 'A' : identificateur non déclaré
    1>c:\users\luffy44\downloads\serial\commmanager.cpp(644) : error C2440: 'initialisation' : impossible de convertir de 'LPVOID' en 'int'
    1> Aucun contexte dans lequel cette conversion est possible
    1>c:\users\luffy44\downloads\serial\commmanager.cpp(657) : error C2065: 'B' : identificateur non déclaré
    1>c:\users\luffy44\downloads\serial\commmanager.cpp(665) : error C2440: 'initialisation' : impossible de convertir de 'LPVOID' en 'int'
    1> Aucun contexte dans lequel cette conversion est possible
    1>c:\users\luffy44\downloads\serial\commmanager.cpp(678) : error C2065: 'C' : identificateur non déclaré
    1>c:\users\luffy44\downloads\serial\commmanager.cpp(686) : error C2440: 'initialisation' : impossible de convertir de 'LPVOID' en 'int'
    1> Aucun contexte dans lequel cette conversion est possible
    1>Le journal de génération a été enregistré à l'emplacement "file://c:\Users\Luffy44\Downloads\Serial\Debug\BuildLog.htm"
    1>Serial - 9 erreur(s), 1 avertissement(s)
    ========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

    Es ce que j'ai bien fait d'enlever int main() avant toute les paragraphe ou il y avait des int cela ne pose pas de soucis? Mais pour les autres erreur je comprend vraiment pas pourquoi seulement certain ipbuffer ou A ne veut-il pas? pourquoi le signe = ne marche pas, comment écire le code alors?

    Voila est merci de votre aide, je vais continuer à chercher même si j'ai rien trouver pour l'instant.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2010
    Messages : 19
    Par défaut
    Citation Envoyé par Luffy44 Voir le message
    [...].
    essayer de modifier les instructions dans if(A=B) par if(A==B)

  3. #3
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Qu'essaies-tu de faire avec des lignes comme if(lpBuffer = 00101101) ?

    En C++ :
    • L'opérateur de comparaison est == pas =.
    • Il n'existe pas de notation binaire pour les nombres (seulement décimal, héxa et octal).

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Par défaut
    dwNbBytesToRead j'ai mît sa a la place de ipbuffer et sa marche mais es ce bon car ce que je veut faire avec sa c que si le nombre 45 par ex arrive par rs232 sa rentre dedans le code. Dsl je croit que ce que je dit et un peu brouillons.

    Sinon pourquoi a==b

    Mon nouveau code ^^ (grâce à vous et à un pote):

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    DWORD TCommManager::ReadBlock(LPVOID lpBuffer, DWORD dwNbBytesToRead)
    {	
    	int A = 0;
    	int B = 0;
    	int C = 0;
    	int temp = 0;
    	int faible = 0;
    	int fort = 0;
    	FILE* fichier = NULL;
     
    	// nombres d'octets que l'on peut lire sur le port
    	DWORD dwErrorFlags;
    	COMSTAT	ComStat;
    	m_pComm->ClearError(&dwErrorFlags, &ComStat);
    	dwNbBytesToRead = min(dwNbBytesToRead, ComStat.cbInQue);
     
    	// si aucune donnée à lire
    	if(dwNbBytesToRead == 0)
    		return 0;
     
    	// lecture
    	DWORD dwNbBytesRead;
    	OVERLAPPED ov = {0};
    	if(!m_pComm->Read(lpBuffer, dwNbBytesToRead, &dwNbBytesRead, &ov))
    	{
    		// si erreur autre que lecture non terminée
    		if(GetLastError() != ERROR_IO_PENDING)
    			return 0;
     
    		// on attend que la lecture soit finie
    		while(!GetOverlappedResult(m_pComm->GetHandle(), &ov, &dwNbBytesRead, TRUE))
    		{
    			if(GetLastError() != ERROR_IO_INCOMPLETE)
    				break;
    		}
     
    	}
     
    	// on renvoi le nombre d'octets lu
    		return dwNbBytesRead;
     
    	// Voir si le bytes est égal à 45
    	if(dwNbBytesRead == 45)
    	{		
    			A = 1;
    			B = 0;
    			C = 0;
    	}
     
    	// Voir si le bytes est égal à 20
    	if(dwNbBytesRead == 20)
    	{ 		
    			A = 0;
    			B = 1;
    			C = 0;
    	}
     
    	// Voir si le bytes est égal à 96
    	if(dwNbBytesRead == 96)
    	{	
    			A = 0;
    			B = 0;
    			C = 1;
    	}
     
    	//Voir si c'est une température
    	if(A = 1)
    	{
     
    			// ouverture en écriture avec ajout du fichier ouvert
            	ofstream fichier("Donne-meteolorogique.txt", ios::out | ios::app);  
     
    			if(fichier != NULL)
    			{	
    				A = 0;
    				temp =  dwNbBytesRead;
                    fichier << "Temperature : " << temp << endl;
     
                    fichier.close();
     
            	}
            	else
                    	cerr << "Impossible d'ouvrir le fichier !" << endl;
     
            	return 0;
     
    	}
     
    	//Voir si c'est un vent faible
    	if(B = 1)
    	{  
    			// ouverture en écriture avec ajout du fichier ouvert
            	ofstream fichier("Donne-meteolorogique.txt", ios::out | ios::app);  
     
            	if(fichier != NULL)
            	{	
    				B = 0;
    		    	faible =  dwNbBytesRead;
    		    	fichier << "Vent faible : " << faible << endl;
     
    				fichier.close();
     
            	}
            	else
                    	cerr << "Impossible d'ouvrir le fichier !" << endl;
     
            	return 0;
     
    	}
     
    	//Voir si c'est un vent fort
    	if(C = 1)
    	{
    			// ouverture en écriture avec ajout du fichier ouvert
            	ofstream fichier("Donne-meteolorogique.txt", ios::out | ios::app);  
     
            	if(fichier != NULL)
            	{		
    				C = 0;
    		    	fort =  dwNbBytesRead;
    		    	fichier << "Vent fort : " << fort << endl;
     
    				fichier.close();
     
            	}
            	else
                    	cerr << "Impossible d'ouvrir le fichier !" << endl;
     
            	return 0;
     
    	}
    }
    Les avertissements que j'obtient que j'obtient (est ce grave?) :

    1>------ Début de la régénération globale*: Projet*: Serial, Configuration*: Debug Win32 ------
    1>Suppression des fichiers de sortie et des fichiers intermédiaires du projet 'Serial', configuration 'Debug|Win32'
    1>Compilation en cours...
    1>FctBar.cpp
    1>c:\users\luffy44\downloads\serial\serial.h(40) : warning C4005: '_countof'*: redéfinition de macro
    1> c:\program files\microsoft visual studio 9.0\vc\include\stdlib.h(362)*: voir la définition précédente de '_countof'
    1>c:\users\luffy44\downloads\serial\fctbar.cpp(86) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 9.0\vc\include\string.h(74)*: voir la déclaration de 'strcpy'
    1>c:\users\luffy44\downloads\serial\fctbar.cpp(111) : warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1> c:\program files\microsoft visual studio 9.0\vc\include\string.h(74)*: voir la déclaration de 'strcpy'
    1>MainFrame.cpp
    1>c:\users\luffy44\downloads\serial\serial.h(40) : warning C4005: '_countof'*: redéfinition de macro
    1> c:\program files\microsoft visual studio 9.0\vc\include\stdlib.h(362)*: voir la définition précédente de '_countof'
    1>Serial.cpp
    1>c:\users\luffy44\downloads\serial\serial.h(40) : warning C4005: '_countof'*: redéfinition de macro
    1> c:\program files\microsoft visual studio 9.0\vc\include\stdlib.h(362)*: voir la définition précédente de '_countof'
    1>StaticURL.cpp
    1>c:\users\luffy44\downloads\serial\serial.h(40) : warning C4005: '_countof'*: redéfinition de macro
    1> c:\program files\microsoft visual studio 9.0\vc\include\stdlib.h(362)*: voir la définition précédente de '_countof'
    1>Comm.cpp
    1>c:\users\luffy44\downloads\serial\serial.h(40) : warning C4005: '_countof'*: redéfinition de macro
    1> c:\program files\microsoft visual studio 9.0\vc\include\stdlib.h(362)*: voir la définition précédente de '_countof'
    1>CommManager.cpp
    1>c:\users\luffy44\downloads\serial\serial.h(40) : warning C4005: '_countof'*: redéfinition de macro
    1> c:\program files\microsoft visual studio 9.0\vc\include\stdlib.h(362)*: voir la définition précédente de '_countof'
    1>DlgAbout.cpp
    1>c:\users\luffy44\downloads\serial\serial.h(40) : warning C4005: '_countof'*: redéfinition de macro
    1> c:\program files\microsoft visual studio 9.0\vc\include\stdlib.h(362)*: voir la définition précédente de '_countof'
    1>DlgCommConfig.cpp
    1>c:\users\luffy44\downloads\serial\serial.h(40) : warning C4005: '_countof'*: redéfinition de macro
    1> c:\program files\microsoft visual studio 9.0\vc\include\stdlib.h(362)*: voir la définition précédente de '_countof'
    1>DlgFctCfg.cpp
    1>c:\users\luffy44\downloads\serial\serial.h(40) : warning C4005: '_countof'*: redéfinition de macro
    1> c:\program files\microsoft visual studio 9.0\vc\include\stdlib.h(362)*: voir la définition précédente de '_countof'
    1>DlgReceiveFile.cpp
    1>c:\users\luffy44\downloads\serial\serial.h(40) : warning C4005: '_countof'*: redéfinition de macro
    1> c:\program files\microsoft visual studio 9.0\vc\include\stdlib.h(362)*: voir la définition précédente de '_countof'
    1>DlgSendFile.cpp
    1>c:\users\luffy44\downloads\serial\serial.h(40) : warning C4005: '_countof'*: redéfinition de macro
    1> c:\program files\microsoft visual studio 9.0\vc\include\stdlib.h(362)*: voir la définition précédente de '_countof'
    1>Génération de code en cours...
    1>Compilation des ressources en cours...
    1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
    1>Copyright (C) Microsoft Corporation. All rights reserved.
    1>Compilation du manifeste en ressources en cours...
    1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
    1>Copyright (C) Microsoft Corporation. All rights reserved.
    1>Édition des liens en cours...
    1>Incorporation du manifeste en cours...
    1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
    1>Copyright (C) Microsoft Corporation. All rights reserved.
    1>Le journal de génération a été enregistré à l'emplacement "file://c:\Users\Luffy44\Downloads\Serial\Debug\BuildLog.htm"
    1>Serial - 0 erreur(s), 13 avertissement(s)
    ========== Régénération globale*: 1 a réussi, 0 a échoué, 0 a été ignoré ==========
    Et est ce que cela fait ce que je veut que sa fasse ou pas? (normalement?)


    Ce que je souhaite faire c'est lire une température, un vent fort ou un vent faible que l'on envoie du PIC16F877a par liaison RS232 pour cela on envoie avant une température le nombre 45, avant un vent faible le nombre 96 et avant un vent fort le nombre 20.

    Es ce bien dwNbBytesToRead le code que recoit le programme si non le quel es ce?

    Et merci à tous pour l'aide que vous m'apportez et dsl pour tous les fautes orthographiques et dans languages C++ que vous avez du supporter à cause de moi.

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Luffy44 Voir le message
    Et est ce que cela fait ce que je veut que sa fasse ou pas? (normalement?)
    Probablement pas.

    En effet, ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // on renvoi le nombre d'octets lu
    return dwNbBytesRead;
     
    // Voir si le bytes est égal à 45
    if(dwNbBytesRead == 45)
    {		
    	A = 1;
    	B = 0;
    	C = 0;
    }
    le return te fait quitter la fonction, le code qui suit n'est donc pas exécuté.

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Par défaut
    Merci, voila j'ai changé de place le code car à mon avis il devrait plutot être ici pour faire ce dont j'ai envie non?

    Et je l'ai un peu modifier pour que si ma température est à 45 par exemple que sa coince pas. ( c'est bien ce que penser pouvoir compiler sa veut juste dire que c'est grammaticalement correct mais pas le code est bon^^").

    Et j'ai bien regarder pour respecter ce que tu m'a dit que sa ne quitter pas avant.

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
     
    DWORD WINAPI TCommManager::ReadThreadFunc(LPVOID lpData)
    {
    	// récupération objet TCommManager associé
    	TCommManager* pManager = (TCommManager*)lpData;
     
    	// tant que le thread est actif
    	while(pManager->m_bReadThreadRunning)
    	{
    		// attente de la réception d'un caractère
    		DWORD dwEvtMask = 0;
    		OVERLAPPED ov = {0};
    		ov.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
    		if(!pManager->m_pComm->WaitEvent(&dwEvtMask, &ov))
    		{
    			// si toujours en attente
    			if(GetLastError() == ERROR_IO_PENDING)
    			{
    				// on attent que l'opération se termine ou qu'elle soit interrompue
    				// (lors de l'appel à SetEvtMak(0) à la deconnexion par exemple)
    				DWORD dwResult;
    				while(!GetOverlappedResult(pManager->m_pComm->GetHandle(), &ov,
    						&dwResult, TRUE))
    				{
    					if(GetLastError() != ERROR_IO_INCOMPLETE)
    						break;
    				}
    			}
    		}
     
    		// lecture si des caractères ont été reçus
    		if(dwEvtMask & EV_RXCHAR)
    		{
    			// lecture des données
    			DWORD dwLength;
    			BYTE buffer[RX_SIZE+1];
    			do
    			{
    				// lecture d'un bloc
    				dwLength = pManager->ReadBlock(buffer, RX_SIZE);
     
    				// envoi des données à la fenêtre
    				if(dwLength > 0)
     
    			    if(D = 0)
    				{
    					// Voir si le caractéres est égal à 45
    					if(dwLength == 45)
    					{		
    						A = 1;
    						B = 0;
    						C = 0;
    						D = 1;
    					}
     
    					// Voir si le caractéres est égal à 20
    					if(dwLength == 20)
    					{ 		
    						A = 0;
    						B = 1;
    						C = 0;
    						D = 1;
    					}
     
    					// Voir si le caractéres est égal à 96
    					if(dwLength == 96)
    					{	
    						A = 0;
    						B = 0;
    						C = 1;
    						D = 1;
    					}
    				}
     
    				//Voir si c'est une température
    				if(A = 1)
    				{
     
    					// ouverture en écriture avec ajout du fichier ouvert
            			ofstream fichier("Donne-meteolorogique.txt", ios::out | ios::app);  
     
    					if(fichier != NULL)
    					{	
    						A = 0;
    						D = 0;
    						temp =  dwLength;
    						fichier << "Temperature : " << temp << endl;
    						fichier.close();
    					}
     
    					else
                    		cerr << "Impossible d'ouvrir le fichier !" << endl;
     
            			return 0;
     
    				}
     
    				//Voir si c'est un vent faible
    				if(B = 1)
    				{  
    					// ouverture en écriture avec ajout du fichier ouvert
            			ofstream fichier("Donne-meteolorogique.txt", ios::out | ios::app);  
     
            			if(fichier != NULL)
            			{	
    						B = 0;
    						D = 0;
    		    			faible =  dwLength;
    		    			fichier << "Vent faible : " << faible << endl;
    						fichier.close();
    					}
     
    					else
                    		cerr << "Impossible d'ouvrir le fichier !" << endl;
     
    					return 0;
     
    				}
     
    			//Voir si c'est un vent fort
    			if(C = 1)
    			{
    				// ouverture en écriture avec ajout du fichier ouvert
            		ofstream fichier("Donne-meteolorogique.txt", ios::out | ios::app);  
     
    		      	if(fichier != NULL)
    				{		
    					C = 0;
    					D = 0;
    		    		fort =  dwLength;
    		    		fichier << "Vent fort : " << fort << endl;
    					fichier.close();
    	        	}
     
    				else
                    	cerr << "Impossible d'ouvrir le fichier !" << endl;
     
    	        	return 0;
     
    			}
    				{
    					// ajout NUL de terminaison
    					buffer[dwLength] = '\0';
    					SendMessage(pManager ->m_hWndMsgDest, WM_COMM_RX, dwLength,
    							(LPARAM) buffer);
    				}
    			}while(dwLength > 0 && pManager->m_bReadThreadRunning);
    		}
    		CloseHandle(ov.hEvent);
    	}
     
    	// fin du thread
    	return 0;
    }
    J'ai regarder pour l'avertissement warning C4996: 'strcpy', a ce que j'ai comprit c'est le que certaine chaine sont trop vielle et que si on veut pu avoir le message il faut mettre ca devant :

    # define _CRT_SECURE_NO_DEPRECATE
    #define _CRT_NONSTDC_NO_DEPRECATE

    Par contre pour warning C4005: '_countof' j'ai pas trouvé donc je c'est pas si c'est grave dans mon cas (ce que je ne pense pas)
    <--- j'ai trouvé c'était qu'elle était deja definie dans une autre librerie ^^

    Serial - 0 erreur(s), 0 avertissement(s)

    Il y a autre chose que je ne comprend pas quel est la valeur qui est envoyer si
    Citation Envoyé par gl Voir le message
    Il n'existe pas de notation binaire pour les nombres (seulement décimal, héxa et octal).
    Or ce que l'on envoie par RS232 est un caractère ASCII ou un nombre binaire non?

    Donc est ce que j'aurais besoin de ce code qui transformer du binaire en deximal
    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
     
    #include <stdio.h>
    int main(void)
    {
    	char leBinaire;
    	int leDecimal = 0;
    	while (leBinaire != '\n')
    	{
    		scanf("%c",&leBinaire);
    		if (leBinaire == '1')
    			leDecimal = leDecimal * 2 + 1;
    		else if (leBinaire == '0')
    			leDecimal *= 2;
    	}
    	printf("%d\n", leDecimal);
    	return 0;
    }

    Si vous voyer d'autre erreur dite le moi svp et encore merci

  7. #7
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Luffy44 Voir le message
    Or ce que l'on envoie par RS232 est un caractère ASCII ou un nombre binaire non?
    Je ne sais pas ce que tu envoies précisément, ça dépends de ton protocole.

    Maintenant, j'ai juste qu'il n'y avait pas de représentation binaire des nombres en C++. Ce qui ne veut pas dire que tu ne sais pas traiter des nombres, seulement que dans le code, ils doivent apparaitre dans une autre notation, mais cela ne change pas la valeur (1010 binaire est égale à 10 décimal et à A héxa, que tu utilises 10 ou 0xA dans le code ça n'a pas d'incidence sur le fonctionnement).

  8. #8
    Futur Membre du Club
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Par défaut
    Citation Envoyé par gl Voir le message
    Je ne sais pas ce que tu envoies précisément, ça dépends de ton protocole.

    Maintenant, j'ai juste qu'il n'y avait pas de représentation binaire des nombres en C++. Ce qui ne veut pas dire que tu ne sais pas traiter des nombres, seulement que dans le code, ils doivent apparaitre dans une autre notation, mais cela ne change pas la valeur (1010 binaire est égale à 10 décimal et à A héxa, que tu utilises 10 ou 0xA dans le code ça n'a pas d'incidence sur le fonctionnement).
    Donc si j'ai bien compris ton message je n'ai pas besoin de transformer les binaire en decimal. (il va marquer la valeur dans le fichier text en decimal ou hexa ou ...)
    Et il reconnait bien ceci "dwLength == 45" et pour le protocole que j'utilise flowcode pour mes programmes que j'envoie sur mon pic et dedans il y a que ces deux choix là.

    Pour la température vu que sa varie entre -10 et 40 (pour -10 sa envoie 246 pour 40 cela envoie 40, pour 0 cela envoie 0 et ainsi suite)
    donc je doit faire sa (non?)

    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
    //Voir si c'est une température
    if(A = 1)
    {
        if(E = 1)
        {
            // ouverture en écriture avec ajout du fichier ouvert
            ofstream fichier("Donne-meteolorogique.txt", ios::out | ios::app);  
     
            if(fichier != NULL)
            {	
                A = 0;
                D = 0;
                E = 0;
                Virgule = dwLength;
                fichier << "Temperature : " << temp << "," << Virgule << endl;
                fichier.close();
            }
     
            else
                cerr << "Impossible d'ouvrir le fichier !" << endl;
     
            return 0;
     
        }
     
        if(E = 0)
        {
            if(dwLength > 150)
            {
                E = 1;
                temp = dwLength - 256;
            }
     
            else
            { 
                E = 1;
                temp = dwLength;
            }
        }
    }
    et comment faire pour le vent qui varie entre 0 et 600 car c'est la même chose que la température c'est la valeur modulo 256 mais au dessus de 256 on fait comment ^^". (le seule moyen que je voit c'est decouper le signal en 3)
    j'ai donc fait ca :

    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
    //Voir si c'est un vent faible
    if(B = 1)
    {  
        if(dwLength < 222)
        { 
            if(H = 0)
            {
                if(F = 0)
                {
                    faible =  dwLength;
                }
     
                if(F = 1)
                {
                    F = 0;
                    faible = faible1 + dwLength;
                }
            }
     
            if(H = 1)
            {
                F = 0;
                H = 0;
                faible = faible2 + faible1 + dwLength;
            }
     
            // ouverture en écriture avec ajout du fichier ouvert
            ofstream fichier("Donne-meteolorogique.txt", ios::out | ios::app);  
     
            if(fichier != NULL)
            {	
                B = 0;
                D = 0;
                faible =  dwLength;
                fichier << "Vent faible : " << faible << endl;
                fichier.close();
            }
     
            else
                cerr << "Impossible d'ouvrir le fichier !" << endl;
     
            return 0;
     
        }
     
        if(dwLength == 222)
        {
            if(F = 0)
            {
                F = 1;
                faible1 = dwLength;
            }
     
            if(F = 1)
            {
                H = 1;
                faible2 = dwLength;
            }
        }
     
    }


    Mais je preferais pas faire cette méthode car elle m'a l'air compliquer n'y a t-il pas une méthode plus simple!!!!

    J'ai aussi rajouter ceci à la fin pour effacer le fichier car il y aura trop de text dessus
    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
    if(I = 50)
    {		
        // ouverture en écriture suppression du contenu
        ofstream fichier("Donne-meteolorogique.txt", ios::out | ios::trunc);  
     
        if(fichier != NULL) // si l'ouverture a réussi
        {	
            fichier.close();  // on referme le fichier
            I = 0;
     
        }
     
        else
            cerr << "Impossible d'ouvrir le fichier !" << endl;
     
        return 0;
    }

  9. #9
    Membre expérimenté Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Par défaut
    si tu continues à faire des


    if ( a = 5 )

    tu n'auras pas le fonctionnement attendu. Le résultat d'une affectation n'est jamais fausse, donc ton test sera toujours vrai...

    pour effectuer une comparaison, tu dois avoir if ( a == 5 )...
    C'est de la syntaxe de base...

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    * A noter que si tes variables ne prennent que les valeurs 0 ou 1, alors tu peux utiliser le type booléen (bool) et ses valeurs true et false.

    * Pour t'éviter les erreurs de type if(A=1) à la place de if(A==1), je te conseille d'écrire tes tests comme ça : if(1==A) en inversant la variable et la constante. C'est une habitude que j'ai régulièrement vu en entreprise et qui a un gros avantage : if(1=A) ne compile pas !

    * A,B,C,D,E,F,G,H, I sont des noms de variables pas très explicites. Difficile pour quelqu'un de comprendre la signification du test if(I==50) par exemple. Tu devrais utiliser des variables au nom plus évocateur. Il est important d'avoir un code lisible pour sa maintenance.

    * Les nombres en durs compliquent aussi la relecture du code, sa compréhension et son évolution. Il ne coûte rien de les regrouper et d'utiliser une variable constante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    static int const seuil_trucmuche = 50;
    // ....
    // plus loin
    if(seuil_trucmuche==I)
    * Pas besoin de faire un close sur un flux. La fermeture est automatique à la destruction de la variable (sortie de sa portée).

  11. #11
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    * Pour t'éviter les erreurs de type if(A=1) à la place de if(A==1), je te conseille d'écrire tes tests comme ça : if(1==A) en inversant la variable et la constante. C'est une habitude que j'ai régulièrement vu en entreprise et qui a un gros avantage : if(1=A) ne compile pas !
    Indépendamment de cette méthode, un compilateur correct correctement réglé (c'est à dire avec les warnings activés) devrait signaler ce type d'erreur.

Discussions similaires

  1. Enregistrer dans un fichier text
    Par elhani dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/07/2009, 12h35
  2. Mettre les données d'un formulaire dans un fichier texte
    Par superjordan dans le forum Langage
    Réponses: 1
    Dernier message: 30/03/2008, 16h35
  3. Réponses: 12
    Dernier message: 21/02/2007, 09h44
  4. Enregistrer les données d'une table dans un fichier texte word ou excel
    Par maamar1979 dans le forum Connexion aux bases de données
    Réponses: 2
    Dernier message: 14/06/2006, 13h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo