Récuperer l'adresse de l'entrée ligne de l'ordinateur - C - Programmation
Marsh Posté le 01-04-2010 à 12:35:53
Bonjour,
Sous windows, il y a l'API directshow http://msdn.microsoft.com/en-us/li [...] 85%29.aspx , il y a aussi l'api de base : http://msdn.microsoft.com/en-us/li [...] 10%29.aspx
Sous linux je sais pas.
Marsh Posté le 01-04-2010 à 13:56:30
Merci de ton aide Breizhbugs mais ces API ne me paraissent pas adaptés a ma demande, je cherche simplement l'adresse de l'entrée ligne. Et je ne l'ai pas trouvé sur tes sites. Je cherche finalement à récupérer la valeur de cette adresse pour l'utiliser comme variable dans mon programme. Pourait-on me guider ?
PS : J'utilise bien Windows xp.
Marsh Posté le 01-04-2010 à 14:10:10
Ça fait un bout de temps que j'ai pas touché du si bas niveau, sur Windows, mais comme ça d'instinct je te dirais d'abandonner cette piste. Tu fais pas ce que tu veux avec le matériel du PC, et t'y accède pas comme ça, parce que sinon ça serait trop facile, tu pourrais écouter et contrôler n'importe quel périphérique en contournant tout l'OS et ses drivers. Si tu tentes toutefois de faire ça, même pas besoin d'antivirus, Windows va te jeter direct ton application parce qu'il est le seul à avoir le droit d'y toucher.
Donc si tu veux toucher le matos, faut faire ça correctement, et utiliser ce que l'OS te met à disposition. Et il se trouve que l'API DirectShow est adaptée à ça. Si tu veux récupérer les infos qui transitent dessus, il faudra passer par l'API qui considère, à juste titre, l'entrée ligne comme un flux audio, et utiliser cette API pour en extraire la valeur.
Ce qui est quand même assez pointu pour un terminale...
Généralement ce qu'on fait pour faire simple, c'est utiliser le port série RS-232 pour récupérer et envoyer des données en numérique. C'est tout con, et ça se fait en 10 secondes.
Marsh Posté le 01-04-2010 à 14:23:02
Merci Kenelm mais malheuresement je suis contraint d'utiliser de l'analogique. J'utilisais pour le moment Codes Block comme api, mais est-ce que le language C est le plus adapté à ma demmande sachant que je dois par la suite effectuer un calcul dans mon programme et l'afficher sous une apparence fenêtrée.
Que pouvez vous me conseiller?
Marsh Posté le 01-04-2010 à 14:29:04
D'aller manifester dans la rue contre l'augmentation trop brusque du niveau des bacs S et STI.
Marsh Posté le 01-04-2010 à 14:37:05
Ouais c'est pas une mauvaise idée en soi, mais je préfererais quand même arriver à faire quelque chose pour éviter de repasser une deuxième année cette épreuve si destructive psychologiquement.
Marsh Posté le 01-04-2010 à 15:26:18
Le truc le plus feignasse pour faire une fenêtre, c'est un bon coup de Visual Studio 2008 C++ Express avec l'éditeur d'interface. Enfin ça dépend ce que t'appelle "fenêtre". Parce que si c'est ça que tu penses comme fenêtre c'est du gateau :
Sinon niveau langage, t'es libre de choisir ce que tu veux ? Parce que si c'est le cas, y'a des trucs bien moins chiants...
Et ça serait bien si tu pouvais expliquer tout l'ensemble du truc que tu cherches à faire, ça aidera pas mal pour trouver une solution bien adaptée
Marsh Posté le 01-04-2010 à 15:52:15
Merci pour tes infos.
Le projet global de notre ppe consiste à réaliser une mini soufflerie pour obtenir le Cx ( aérodynamisme) d'une mini voiture de formule 1 que les sti méca fabriquent en 1ère année.
Ma partie spécifique concerne la récupération des données des capteurs, qui suit le calcul du Cx et un affichage fenêtre (comme celui de la calculette windows).
Pour l'instant j'ai simplement écris le calcul du Cx en lui même (partie la plus simpl ^^):
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double Cx=0, Trainee=2,SurfaceFrontale=0, VitesseDuVent=0, MasseVolumiqueDuFluide=1.204; // Déclaration des variables utilisés dans le calcul du Cx
int choix = 0;
printf("Valeur de La surface frontale de la voiture: " ); //Demmande à l'utilisateur d'indiquer les valeurs qu'il a trouvé
scanf("%lf", &SurfaceFrontale);
printf("\n\nValeur de la vitesse du vent: " );
scanf("%lf", &VitesseDuVent);
Cx=Trainee/(MasseVolumiqueDuFluide*SurfaceFrontale*(pow(VitesseDuVent,2)/2)); // Calcul du Cx
printf("\nLe Cx de votre voiture est de %f\n\n" );
return 0;
}
Mon professeur m'a dirigé sur le language C car nous en avions déjà analysé en tp, mais je n'ai pas d'obligation particulière à ce sujet. D'ailleurs on m'a proposé de voir la partie affichage avec WinDev qui est apperement plus simple à utiliser. Je suis ouvert à toutes les possibilités pour arriver à tout ce qui m'est demmandé.
Marsh Posté le 01-04-2010 à 16:03:02
Tes capteurs te renvoient quoi comme info (4/20mA, 0-10V...)?
D'ailleurs c'est quoi comme capteurs (pressostat?)?
Utiliser l'entrée ligne de la carte son c'est vraiment pas terrible comme idée...
http://delphiforfun.org/Programs/oscilloscope.htm
Voici le lien vers un programme en Delphi pour faire un oscillo qui acquiert le signal via l'entrée ligne, ça se rapproche de ce que tu veux faire mais faut se farcir le code.
Marsh Posté le 01-04-2010 à 16:14:40
Le capteur doit capter une tension comprise entre 0 et 250mV, le signal est analogique, c'est un assemblage potentiomètre + ressort.
Je suis d'accord que l'idée n'est pas terrible, mais c'est la meilleure solution qu'on est trouvé; si tu as d'autres idées en tête je suis preneur.
Marsh Posté le 01-04-2010 à 16:35:31
Ok, donc vous avez adapté le signal pour l'entrée ligne.
Renseigne toi sur l'API wavein de windows qui te donne accès aux ressources de la carte son.
Par contre je ne pense pas que tu pourras exploiter ça en C.
Il faudra utiliser un autre langage de plus haut niveau.
Marsh Posté le 01-04-2010 à 16:38:24
En C, il ne manque que la valeur de la variable d'entrée ligne pour que le programme fonctionne completement.
Marsh Posté le 01-04-2010 à 17:09:29
Voilà:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double Cx=0, Trainee=0, R1=470000, K=0.048, G=100, Ue=12, Us=1; // Us (étant mis à 1 par défault) = Valeur à récupérer en entrée analogique
Trainee=(Us*R1*K)/G*(Ue-Us); // Calcul de la trainée avec le système potentiomètre + ressor
printf("%f",Trainee); // Pour simple vérification du calcul
return 0;
}
Marsh Posté le 01-04-2010 à 17:13:59
Ah...
Ouais mais même si tu avais l'adresse de l'entrée ligne ça ne serais pas aussi simple que tu penses.
Ce n'est pas qu'un simple registre où tu viens lire la valeur courante.
D'autre part comme on te l'a dit tu ne peux pas aller interroger directement le matériel sous windows.
Il faut utiliser les API.
Ton code est bon, mais il faut récupérer la valeur sur l'entrée ligne vie l'API à une certaine fréquence à définir (échantillonage).
Puis la mettre en forme parce que tu vas récupérer une valeur d'amplitude.
Et seulement là tu pourras l'utiliser dans ton calcul.
Regarde les sources de ça, ça devrais t'aider:
http://files.codes-sources.com/fichier.aspx?id=20170
Marsh Posté le 01-04-2010 à 19:18:15
Merci beaucoup pour ces renseignements Garath_.
C'est une bonne base pour essayer de comprendre le principe, mais c'est vrai que je ne pensais pas que cela puisse être si complexe vu mon niveau débutant. Le prof arrive à comprendre les bases dans ce langage mais je ne crois pas qu'il se rend compte de la difficulté pour obtenir ce qui m'est demandé.
Ce serait très sympa de ta part si tu pouvait me guider un peu plus sur cette partie du programme. Encore merci
Marsh Posté le 01-04-2010 à 19:28:04
ce serait possible de voir l'énoncé ? Parce qu'effectivement, soit l'énoncé est rédigé par quelqu'un qui ne mesure pas ce qu'il demande, soit c'est une erreur d'écriture, soit c'est une erreur d'interprétation, mais il doit y avoir un souci quelque part
Marsh Posté le 01-04-2010 à 19:43:58
L'énoncé n'est pas très compliqué en soi :
par rapport au projet que j'ai précédemment énoncé, je dois pouvoir réaliser un petit programme permettant, en connectant un capteur (mesurant la trainée de la voiture) à l'ordinateur et en prenant en compte les autre variables, de calculer le Cx de la voiture tout en l'affichant sur une fenêtre ( l'affichage sous console étant insuffisant pour eux).
Je n'est pas plus de consigne, mais les conclusions des autres groupes sur les capteurs et autres m'oblige à utiliser une entrée analogique et le professeur veux vraiment me diriger sur la sortie auxiliaire dont j'ai parlé au part avant, et l'utilisation du langage C. Mais à l'heure où j'en suis, j'accepte de programmer avec ce que l'on peut me proposer de plus simple (je vais surement essayer Windev ce week-end).
Marsh Posté le 01-04-2010 à 20:11:15
J'y connais pas grand chose en dev windows, mais je dirais qu'à ton niveau il faudrait utiliser visual basic.
C'est facilement compréhensible, tu peux créer une mise en forme satisfaisante, et l'appel aux API windows serait facile (même si je suis bien incapable de t'expliquer comment).
Le capteur t'es imposé?
Vous n'avez pas de PC avec carte d'acquisition?
Marsh Posté le 01-04-2010 à 20:27:56
Le capteur fait l'objet de PPE pour un autre groupe de la classe, je dois donc faire avec ce qu'ils ont choisis. Pour le PC en question je dois avouer que je ne suis pas sur à 100% mais pour moi il a une carte d'acquisition.
Marsh Posté le 01-04-2010 à 12:22:30
Bonjour, je m'appelle Samuel, je suis en classe de Terminale SI en région parisienne.
Je travaille actuellement sur mon PPE dans lequel je dois faire de la programmation en C mais j'ai un soucis qui me bloque complètement dans mon projet.
En effet, j'ai besoin de connaître l'adresse de l'entrée ligne ( port auxiliaire de couleur bleu sur la carte son ) de l'ordinateur pour pouvoir récuperer des informations envoyées de l'extérieur.
Merci de votre attention et merci d'avance pour vos réponses que j'attends impatiemment.
Message édité par Terminale SI le 01-04-2010 à 12:24:19