bonjour,
j'ai un programme qui permet de detecter des carte passant devant un capteur RFID et j'aimerai mesurer le temps écoulé entre deux ou voir plusieurs passage de carte.
Voici mon code:
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 /*--------------------------INCLUDES---------------------------*/ #include <windows.h> // librairie windows #include <stdio.h> // librairie entrées/sorties #include <stdlib.h> #include <time.h> // Librairie d'utlilsation du temps #include <stdio.h> #include "askcsc.h" // librairie ASK-csc /*-------------------------------------------------------------*/ /*-------------------DEFINITION DE VARIABLES-------------------*/ #define TIMEOUT 0x44 // (no) time out when looking for a card #define FORGET 0x01 #define REC_LENGTH 0x08 #define READ_REC 0x00 #define LN_OUT_ACTIVE 0x10 #define SYSTBITS_LENGTH 0x10 #define ADD_SYSTBITS 0x10 #define VERSIONLENGTH 80 /*----------------------SECURITE ACCMODE-----------------------*/ #define DEFAULT 0x00 //Accés en mode par default #define PROTECTED 0x01 //Accés en mode protégé #define STAMPED 0x02 //Accés en mode stamped /*-------------------------------------------------------------*/ /*----------------------------KEYS-----------------------------*/ #define MF_PER_KEY 0x10 #define MF_PAR_KEY 0x12 #define MF_INV_KEY 0x13 #define MF_STR_KEY 0x14 /*-------------------------------------------------------------*/ /*---------------------------DATE------------------------------*/ void Affichage_date() { //Date lors du lancement du programme time_t t; struct tm *tb; t = time(NULL); tb = localtime(&t); printf("Date: %s\n", ctime(&t)); } /*-------------------------------------------------------------*/ /*----------------------CALCUL DU TEMPS------------------------*/ void calcul_temp(char* response) { time_t t1, t2; t1 = time(NULL); Sleep(getchar()); // attente de 2 secondes t2 = time(NULL); printf("Temps Intermediaire: %2.lf secondes\n", difftime(t2, t1) ); } /*-------------------------------------------------------------*/Voici le module qui permet de mesurer l'intervalle de temps entre t1 et t2.
Et j'aimerais le modifier pour qu'il puisse mesurer le temps entre deux lecture de carte.Celle ci qui se fait plus bas dans le code.
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 void main () { /*-------------------------VARIABLES---------------------------*/ DWORD ret; //Valeur de retour DWORD search_mask; //Masque de recherche DWORD respLength; //Response length sCARD_SecurParam securParam; //Parametres de securité BYTE response[10]; //Réponse de la carte BYTE status; BYTE indice=0; BYTE data[REC_LENGTH]; char version[VERSIONLENGTH]; // buffer for SW version /*-------------------------------------------------------------*/ /*-------------------VARIABLES DE RECHERCHE--------------------*/ sCARD_SearchExt SearchExt ; BYTE COM; SearchExt.CONT=0x07; SearchExt.ISOB=0x04; SearchExt.ISOA=0x08; SearchExt.TICK=0x06; SearchExt.INNO=0x03; SearchExt.MIFARE=0x05; SearchExt.MV4k=0x0A; SearchExt.MV5k=0x0B; /*-------------------------------------------------------------*/ /*----------------------MASK de RECHERCHE----------------------*/ search_mask=SEARCH_MASK_TICK | SEARCH_MASK_ISOA ; /*-------------------------------------------------------------*/ /*--------------------VARIABLES DE LECTURES--------------------*/ securParam.AccMode=DEFAULT; securParam.RFU=0x00; securParam.SID=0x03; securParam.LID=0x0003; securParam.NKEY=MF_PER_KEY; /*-------------------------------------------------------------*/ /*-------------------------------------------------------------*/ /*----------------------PARTIE EXECUTIVE-----------------------*/ /*-------------------------------------------------------------*/ printf("--------- CHRONOKART -- Logiciel de gestions de serie ---------\n\n"); Affichage_date(); /*------------RECHERCHE ET OUVERTURE COMMUNICATION-------------*/ ret=CSC_SearchCSC(); if (ret!=RCSC_Ok) //Test d'ouverture { printf("COMMUNICATION IMPOSSIBLE\n"); } else { ret=CSC_CardStartSearch(); //Recherche d'une carte } if(ret==RCSC_Ok) { ret=CSC_SearchCardExt(&SearchExt,search_mask,FORGET,TIMEOUT,&COM,&respLength,response); if(ret==RCSC_Ok) { printf("--------- COMMUNICATION OK & PRESENCE D'UNE CARTE ---------\n") ; } else { printf("--------- COMMUNICATION OK & AUCUNE CARTE ---------\n") ; } /*-------------------------------------------------------------*/ /*--------------------VERSION DU COUPLEUR----------------------*/ ret=CSC_VersionCSC(version); // display SW version if (ret!=RCSC_Ok) { printf("\nERREUR DE LECTURE DE LA VERSION DU COUPLEUR\n"); } else { printf("\nVERSION DU COUPLEUR :\n%s\n\n",version); // print SW version } /*-------------------------------------------------------------*/ /*--------------------LECTURE DES DONNEES----------------------*/ if(ret!=RCSC_Ok) { printf("LECTURE FAILED\n"); } else { do { ret=CSC_SearchCSC(); ret=CSC_CardStartSearch(); //Recherche d'une carte ret=CSC_SearchCardExt(&SearchExt,search_mask,FORGET,TIMEOUT,&COM,&respLength,response); printf("\nLecture des donnees....................................\n\nNumero de serie [Hexa]: 0"); for (indice=0; indice<REC_LENGTH; indice++) //Incrémentation { printf("%x", response[indice]);le numero de série est donc stocké dans la variable response.
Je l'ai donc récupérer dans la fonction //calcul_temp(response);Voila j'aimerais savoir s'il était possible de modifier le module temps pour qu'a chaque fois qu'il detecte le numero de série de la carte il lance le chronometre et que quand une autre carte est testé avec un numero de serie different il m'affiche le temps écoulé entre les deux acquisition.
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 } printf("\n"); calcul_temp(response); printf("\n\n....................................Lecture effectuee avec succes\n\n"); printf("Voulez vous testez une autre carte ?(PRESS ENTRER ou n)"); } while (getchar()!= 'n'); } } /*-------------------------------------------------------------*/ /*-------------------FERMETURE COMMUNICATION-------------------*/ CSC_Close() ; } /*-------------------------------------------------------------*/
cf:Voir le temps intermediaire que je simulé grace a une attente au clavier sur l'apercu de l'éxécution.
NB: Un apercu du programme compiler ci joint.
Merci d'avance
A+ Matt
Partager