Se connecter avec
S'enregistrer | Connectez-vous

Test 1er programme (TPE)

Dernière réponse : dans Programmation

Bonjour, dans le cadre des TPE à l'école (1è S SI), je réalise une éolienne sur laquelle je met une girouette. Pendant les vacances, je me suis mis à programmer la girouette en C afin qu'elle indique la direction du vent. Le mât de la girouette sera monté sur un potentiomètre sans fin. Le problème c'est que je ne sais pas comment tester le programme que j'ai commencé à écrire... :heink: 

Je voulais aussi savoir en même temps si vous pouviez me dire comment introduire le test pour les autres directions du vent (nord-est, est, sud-est...) après le 1er if. Un seul else ne suffirait pas...

Voilà le programme (pas trop cousu de fautes, je l'espère)

  1. int 8 tension;
  2.  
  3. void config (void)
  4. {
  5. setup_adc(adc_clock_div_2);
  6. setup_adc_ports(all_analog);
  7. set_adc_channel(0);
  8. }
  9.  
  10. void main (void)
  11. SET_TRIS_A(0x01)
  12. SET_TRIS_B(0x00)
  13. config();
  14. do
  15. {
  16. tension=read_adc();
  17. if((tension=0x10)&&(tension>0xE0))
  18. {
  19. printf("Nord/n");
  20. }


Merci !

Autres pages sur : test programme tpe

Lassé par la pub ? Créez un compte

excuse moi pour la balise, par contre un switch/case c'est a dire ??

Pour tester mon programme j'ai entendu qu'il y avait des émulateurs sur pc disponible en shareware mais je ne sais pas lesquelles ni rien, c'est pr ca que je m'adresse a vous
Expert Programmation

switch est un mot réservé du langage C. En lisant ton manuel sur le sujet, tu vas tout de suite comprendre pourquoi boubpopsyteam te le propose.

A propos d'émulateurs, tu cherches un programme qui simule ton environnement ? C'est peut être trop spécifique, non. Sinon, il est possible que le fabriquant de ton système électronique mette gracieusement les outils dont tu as besoin. C'est un problème récurrent en info indus et le monde Linux propose pas mal de solutions dans le cadre de la compilation croisée (crosscompil).

J'ai aucun manuel sur le sujet, on a fait que 2 cours sur le sujet en classe...

Le fabricant du système électronique c'est moi, donc j'ai aucun manuel ni quoi que ce soit. Ms le prof m'a parlé juste avant les vacs, pdt le TPE, d'un logiciel qui me permettait de simuler tout ca, mais il ne se souvenait plus lequel...:s
Expert Programmation

2h de cours pour maîtriser le C ????
Bon, alors tu fais 4 tests différents pour Nord Sud Est Ouest et tu te prends pas la tête. Sauf si la programmation t'intéresse vraiment, mais là il faut investir dans un bon bouquin.

Tu as bien une interface entre ton potard et ton PC. Tu as utilisé un truc tout fait ou tu as refais la gestion RS232 dans un PIC ?

Explique-nous un peu d'où sortent les fonctions xxxxx_adc(). La clef est peut-être là.

On a eu 8h de cours (2*4h)
Je pourrais faire des tests différents à chaque fois c'est vrai mais en effet la programmation m'intéresse vraiment. Je pensais acheter le 1er bouquin de cette page http://www.developpez.com/c/livres/ mais en attendant de l'avoir faut bien que j'avance :) 

Sinon en cours, on envoyait tout le toutime dans une petite carte avec un microcontroleur en passant par un boitier (c'est ça le PIC nan ??) et on avait un logiciel qui faisait la compilation et l'envoi tout seul, mais on m'a di qu'il ne pouvait pas simuler...:s

Les fonctions xxxxx_adc() ce sont des facilités du logiciel en questions qui lui sont intégrées.
Expert Programmation

Ah !!! Je savais bien que tu n'avais pas tout fait tout seul !!
PIC c'est une marque de microcontroleur. Il est possible que ce soit une puce d'une autre marque.

Bon, donne un peu plus de précision. Le programme compilé, il doit tourner sur un PC ou dans le µC ?
Expert Programmation

Autre question. Quelles sont les valeurs renvoyées par read_adc() ? Min, Max. Pour quelle valeur a-t-on le Nord, le Sud, etc. Combien de branche a ta rose des vents ?

Envoie, on va essayer de t'aider.

aloys du 13 a dit :
Bonjour, dans le cadre des TPE à l'école (1è S SI), je réalise une éolienne sur laquelle je met une girouette. Pendant les vacances, je me suis mis à programmer la girouette en C afin qu'elle indique la direction du vent. Le mât de la girouette sera monté sur un potentiomètre sans fin. Le problème c'est que je ne sais pas comment tester le programme que j'ai commencé à écrire... :heink: 

Bah, un programme, c'est plus ou moins tçujours des entrées, des traitements et des sorties. Il suffiu donc de simuller les entrées, de visualiser les sorties, et de comparer avec les valeurs attendues.

A toi de définir le lien entre la position du potentiomètre et la direction du vent (ça, c'est évident) et surtout entre la grandeur physique mesurée (resistance, tension, linéarité...) et la position. Là, çà peut être plus complexe. Voir aussi les problèmes de résolution. (Tu as un CAN ? Combien de bits ?, Quelle fréquence d'échantillonage...)

Nota : une roue codeuse serait, AMA, plus adaptée à la situation...
Citation :

Je voulais aussi savoir en même temps si vous pouviez me dire comment introduire le test pour les autres directions du vent (nord-est, est, sud-est...) après le 1er if. Un seul else ne suffirait pas...

Tant qu'on ne connait pas le lien entre grandeur physique et position, on ne peut rien dire...
Citation :

Voilà le programme (pas trop cousu de fautes, je l'espère)

int 8 tension;

Merci de lire les regles du forum et d'utiliser les balises 'code'...
Citation :

void main (void)

main() retourne int. Toujours.

http://mapage.noos.fr/emdel/notes.htm#typemain

Citation :

printf("Nord/n");

printf("Nord\n");

Sinon, pour définir des intervalles, tu peux continuer avec if else etc.

if (tension >= V_WNW && tension < V_NNE)
{
printf ("Secteur Nord\n");
}
else if (tension >= V_NNE && tension < V_ENE)
{
printf ("Secteur Nord Est\n");
}
else if (tension >= V_ENE && tension < V_ESE)
{
printf ("Secteur Est\n");
}

etc.

Je vais essayer de répondre à toutes les questions :) 
Le programme va ds un CAN pour qu'ensuite on puisse retourner Nord, Sud...
Les valeurs pour Nord, Sud etc etc je ne les connais pas encore (j'ai eu le potard juste avant les vacances donc pas eu de temps pour les tests)
Les branches de la roses des vents : Nord, Nord-Est, Est, Sud-Est, Sud, Sud-Ouest, Ouest, Nord-Ouest.
Citation :
Il suffiu donc de simuller les entrées, de visualiser les sorties, et de comparer avec les valeurs attendues.

Et je fais ca comment et avec quel logiciel ?
Citation :
Et surtout entre la grandeur physique mesurée (resistance, tension, linéarité...) et la position

C'est une tension qui rentre ds le CAN.
Citation :
Nota : une roue codeuse serait, AMA, plus adaptée à la situation...

C'est quoi ? :D 
Citation :
Merci de lire les regles du forum et d'utiliser les balises 'code'...

Désolé, c'est maintenant fait.
Citation :

Sinon, pour définir des intervalles, tu peux continuer avec if else etc.

Merci, je vais pouvoir faire le reste.
Citation :
main() retourne int. Toujours.

J'ai toujours du mal a comprendre ce qu'est int... :??: 
Expert Programmation

Emmanuel est un intégriste orthodoxe. Et ce qui m'énerve le plus, c'est qu'il a toujours raison. :ange:  int c'est entier en C. Un programme doit toujours renvoyer un code entier au système d'exploitation, en C c'est le return de main() qui fait ça. Je crois que tu es loin de ces considérations mais puisque tu débutes, autant prendre tout de suite de bonnes habitudes.

C'est quoi ton histoire de programme dans un CAN ? Un CAN pour moi (et sans doute pour d'autres) c'est un convertisseur analogique/numérique, pas un µP ou un µC. Comme je n'ai toujours pas compris ton montage, je vais encore te demander des précisions sur ton montage complet : un potard (analogique), un convertisseur (analogique-->numérique), un PC (numérique) ?

J'ai tellement envie qu'il y ait un PC, juste pour que printf() est un sens dans ton programme.

Il est interdit sur un forum de dire : "C'est quoi un ......." , même quand il s'agit d'une roue codeuse. Google est ton ami pour ça.

Bon, on revient au C.

  1. /* Valeur bidon : à mesurer ! */
  2. #define TENSION_UN_TOUR 0x012A
  3.  
  4. int tension2degre ( int tension )
  5. {
  6. /* Transforme une tension en degré
  7. *
  8. * Un tour complet de potard, c'est tant d'unité en tension : TENSION_UN_TOUR
  9. * On espère que le potard est linéaire.
  10. *
  11. * Le signe pourcent, c'est le modulo (reste de la division entière)
  12. *
  13. */
  14.  
  15. return ( tension * 360 / TENSION_UN_TOUR ) % 360 ;
  16. }
  17.  
  18. void degre2rose ( int degre )
  19. {
  20. / * Tranforme des degrés en affichage "Rose des vents"
  21. *
  22. * Le Nord, (zéro) c'est donc une plage de 45° entre -22.5° et +22.5°
  23. * On travaille en entier et de 0° à 359°,
  24. * donc je propose de décaler de 22°. Faire un dessin !!
  25. *
  26. * Modulo 360 et Division par 45, il y a donc 8 valeurs possibles :
  27. *
  28. * /
  29.  
  30. switch ( ( ( degre + 360 - 22 ) % 360 ) / 45 )
  31. {
  32. case 0 : printf ( "Nord" ); break;
  33. case 1 : printf ( "Nord-Est" ); break;
  34. case 2 : printf ( "Est" ); break;
  35. case 3 : printf ( "Sud-Est" ); break;
  36. case 4 : printf ( "Sud" ); break;
  37. case 5 : printf ( "Sud-Ouest" ); break;
  38. case 6 : printf ( "Ouest" ); break;
  39. case 7 : printf ( "Nord-Ouest" ); break;
  40. }
  41. }


Bon, maintenant les tests.
Soit tu testes les entrées, soit tu testes les sorties.

Pour tester les entrées, tu te refais un ptit bout de programme qui ne fait qu'afficher les données brutes :

  1. [...]
  2.  
  3. int main ( )
  4. {
  5. int tension;
  6.  
  7. [...]
  8.  
  9. tension = read_adc();
  10. printf ( "%x\n", read_adc() );
  11.  
  12. return 0;
  13. }


Pour les sorties, tu mets en commentaires la récupération des valeurs de la girouette et tu mets un simple scanf. Tu peux alors entrer des valeurs (au format décimal, hein!) à la main :

  1. [...]
  2.  
  3. int main ( )
  4. {
  5. int tension;
  6.  
  7. [...]
  8.  
  9. /* tension = read_adc(); */
  10. scanf ( "%d", & tension ) ;
  11.  
  12. [...]
  13. }

aloys du 13 a dit :
Je vais essayer de répondre à toutes les questions :) 
Le programme va ds un CAN pour qu'ensuite on puisse retourner Nord, Sud...

Tu veux dire le potentiomètre, je suppose ?
Citation :

Les valeurs pour Nord, Sud etc etc je ne les connais pas encore (j'ai eu le potard juste avant les vacances donc pas eu de temps pour les tests)
Les branches de la roses des vents : Nord, Nord-Est, Est, Sud-Est, Sud, Sud-Ouest, Ouest, Nord-Ouest.

Et non en ° d'angle. Donc tu vas te contenter de définir des plages d'angle, et d'indiquer des secteurs, pas des directions. (comme dans l'exemple que j'avais posté). Attention, je suis un ancien marin (d'eau plus ou moins douce), alors soyons précis ... dans l'inexactitude.



Un petit logiciel pour calculer les secteurs :

#include <stdio.h>
#include <math.h>

int main (void)
{
int nb_sect = 8;
double const angle_sect = 360 / nb_sect;
double const offset = angle_sect / 2;

static char const *as[] =
{
"NE",
"E",
"SE",
"S",
"SW",
"W",
"NW",
"N",
};
int i;
for (i = 0; i < nb_sect; i++)
{
printf ("%10s : %.2f .. %.2f\n", as[i]
, fmod (offset + ((i + 0) * angle_sect), 360)
, fmod (offset + ((i + 1) * angle_sect), 360)
);
}

return 0;
}

Ce qui donne

NE : 22.50 .. 67.50
E : 67.50 .. 112.50
SE : 112.50 .. 157.50
S : 157.50 .. 202.50
SW : 202.50 .. 247.50
W : 247.50 .. 292.50
NW : 292.50 .. 337.50
N : 337.50 .. 22.50

Citation :
Il suffit donc de simuler les entrées, de visualiser les sorties, et de comparer avec les valeurs attendues.

Et je fais ca comment et avec quel logiciel ?
[/quote]
Un logiciel que tu écris. Un tableau avec des valeurs, un fichier..
Citation :

Citation :
Et surtout entre la grandeur physique mesurée (resistance, tension, linéarité...) et la position

C'est une tension qui rentre ds le CAN.

Est-elle bien linéaire ? sinon, il va valloir apporter une correction (tableau de conversion...). Il va falloir faire une mesure très précise de la tension, que celle-ci soit très stable (quelque soit la météo) etc.
Citation :

Citation :
Nota : une roue codeuse serait, AMA, plus adaptée à la situation...

C'est quoi ? :D 

Marche plus ton Google ?
Citation :

Citation :
main() retourne int. Toujours.

J'ai toujours du mal a comprendre ce qu'est int... :??: 

Là je dis stop. Si tu ne connais pas les bases du C, pas la peine de continuer. Il faut te former et vite. Tu ne peux pas apprendre 25 choses en même temps. Une à la fois et ensuite la suivante.
Expert Programmation

C'est surtout parce qu'une rose des vents, ce sont des angles. Alors un marin comme Emmanuel ou un aviateur comme votre serviteur pensent en degré d'angle. Mais tu peux sauter cette étape et convertir directement tes tensions.

Pour info, un cap se donne en 4 directions : N,S,E,O, en 8 : N, NE, E, etc., en seize N, NNE, NE, ENE, E, etc, en 36 : 01, 02, 03, .. 36 ou en 360 ..... D'où le réflexe de te proposer des angles... Et puis surtout, un modulo 360° est clair et évident...
Lassé par la pub ? Créez un compte