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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 46
    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
    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...

  6. #6
    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).

  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 : 46
    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