Bonjour,
comment faire la communication entre Matlab et un pic 16f877a cad je veut que le pic attend que matlab lui donne l'ordre pour travail..
merci
Bonjour,
comment faire la communication entre Matlab et un pic 16f877a cad je veut que le pic attend que matlab lui donne l'ordre pour travail..
merci
bonjour,
je ne connais pas "PIC 16f877a" mais en général, lorsqu'on veut faire communiquer matlab avec un autre logiciel on utilise soit des fichiers texte
(matlab peut lire les fichiers écrits par ton autre logiciel) soit on peut utiliser la commande (system de matlab) pour lancer ton logiciel externe.
bon courage
Bonjour,
Ce que tu cherches à faire est extrêmement spécifique. Comment as-tu fait pour connecter ton micro-contrôleur à l'ordinateur déjà ? Tu utilises un outil type easy-pic ? Ou bien tu n'as rien du tout pour l'instant ?
En tout cas, matlab ne possède pas d'outil tout fait pour faire ce genre de chose. Il va falloir que tu te coltines la communication toi-même. Du côté de ce genre de PIC, tu as l'I2C et peut-être l'USB de disponible, c'est à peu près tout, après du côté de matlab, il faut que tu regardes du côté des toolbox de communication, et que tu fouilles dans l'aide... Mes connaissances s'arrêtent là. Il faudrait qu'un expert réseau matlab te réponde.
En tout cas c'est très spécifique. Je te conseille de détailler le plus possible pour que tu aies des réponses.
Cordialement,
Je ne réponds pas aux MP techniques. Le forum est là pour ça.
La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3
Bonjour,
Tu peux utiliser la communication série.
Configurer le PIC au niveau hard et soft
Serial Port and RS-232 for communication
Et après construire ton protocole entre Matlab et le PIC.
Exemple comm avec arduino
Il existe une toolbox pour Arduino;tu peux analyser ses fichier .m pour comprendre comment ça marche.
Je confirme que l'utilisation de la communication série est la solution la plus simple.
Il est vrai qu'aujourd'hui nos chers ordinateurs portables ne disposent plus de port série "COM", pour autant l'utilisation d'un convertisseur USB vers série rend la communication possible, comme par exemple l'utilisation de la puce FT232RL que l'on retrouve sous différents formats ou le MCP2200 ou bien encore directement par l'usage d'un PIC USB en le programment avec un firmware CDC.
Dans ce dernier cas, on trouve le code source sur www.microchip.com/mla à la section "Downloads", puis dans le répertoire C:\microchip_solutions_v2013-02-15\USB\Device - CDC - Basic Demo\Firmware
Ce firmware est compatible avec le PIC18F4550 (sélectionner la configuration PICDEM_FSUSB), je ne peux donc que vous recommander ce microcontrôleur 8 bits, qui permettra à une personne débutante de démarrer sur une architecture simple et pour lequel on trouve pléthore d'informations et d'exemples sur le Net.
En pièce jointe le script MATLAB pour établir une communication sur le COM1.
Dans l'exemple que je donne, le PC envoie la chaîne de caractère "ping", via la fonction:
>> send_serial_data('ping')
et le microcontrôleur répond la chaîne de caractère "pong" comme acquittement du message.
J'espère que cela vous sera utile pour votre développement
Vous pouvez également consulter:
>> help fopen
C:\Program Files\MATLAB\R2012b\toolbox\matlab\iofun\@serial\serial.m
et
Instrument Control Toolbox, pour le contrôle plus poussé des bus de communication depuis MATLAB
J'ai connecté mon micro-contrôleur (pic 16f877a) avec un port série rs232 et je fait l'initialisation de ce port sur MATLAB et tout..
Mon problème c'est de faire la communication entre MATLAB et le pic16f877a..au début je dois programmer mon pic 16f877a pour faire un comptage de 0 a 255 avec un programme pic puis je dois faire une communication entre MATLAB et le pic 16f877a pour que MATLAB donne l'ordre pour start le comptage et le close de comptage.
Enfin je dois faire une interface avec MATLAB qui comporte un button start et un bouton close et une fenêtre d'affichage de comptage de 0 jusqu'à 255.
Voici un pseudo code pour le PIC pouvant répondant à la demande de mise en route et à l'arrêt d'un compteur. Lorsque celui-ci est en fonction, sa valeur est transmise à MATLAB.
Code C : 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 /** D E F I N I T I O N S *****************************************************/ /* Commande pour le controle du compteur */ typedef enum { CPT_STOP, // fixer l'état du compteur à "STOP" CPT_START // fixer l'état du compteur à "START" } CPT_CMD_MATLAB; /** M A I N F U N C T I O N *************************************************/ void main(void) { unsigned char cpt_value; // valeur du compteur unsigned char cpt_state = 0; // état du compteur /* Initialize MCU peripherals */ InitializeSystem(); // initialisation des périphériques du PIC // [FR] Boucle d'exécution principale (boucle sans fin) - [EN] Main loop runtime (never ending loop) while (1) // Run loop { /* Lecture de l'UART de la donnée transmise par le PC */ if (PIR1bits.RCIF) // A data has been received by the PIC ? { DataSendByMATLAB = RCREG; // Lecture de l'UART switch (DataSendByMATLAB) { case CPT_START: // reception de la commande "START" cpt_value = 0; // initialiser la valeur du compteur cpt_state = CPT_START; // modifier l'état du compteur break; case CPT_STOP: // reception de la commande "STOP" cpt_state = CPT_STOP; // modifier l'état du compteur break; default : Nop(); // erreur de reception du message :(, Ne rien faire ! } // end of switch (UART_RX_State) // RCIF: EUSART Receive Interrupt Flag bit -> cleared when RCREG is read (voir PIR1 Registers, DS39632D-page 102) PIR1bits.RCIF = 0; // effacer le drapeau d'INT avant de sortir de la routine } /* Ecriture de la valeur courante du compteur vers MATLAB */ if (cpt_state == CPT_START) { cpt_value++; // incrémentation du compteur if (cpt_value == 255) { cpt_state = CPT_STOP; // modifier l'état du compteur } TXREG = cpt_value; // transmission de la nouvelle valeur à MATLAB while (!TXSTAbits.TRMT); // Waiting for Transmit Shift Register Status bit empty, idem to routine BusyUSART() } } // end of while(1) } // end of main()
Pour ce qui est de l'interface avec MATLAB, avec un bouton start et un bouton stop, ainsi qu'une fenêtre d'affichage de la valeur du comptage, je vous recommande l'utilisation du GUI, en voici un exemple à titre indicatif :
Bonne continuation
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 % Creation d'un paneau de controle pour l'etat du compteur gui.etat = uipanel ( 'Title', 'Etat du compteur', ... 'BackgroundColor', [255/255, 228/255, 196/255], ... 'Position', [.02 .89 .96 0.1], 'FontSize', 12 ); gui.cmd = uicontrol ( 'style', 'pushbutton', ... 'parent', gui.etat, ... 'units', 'normalized', ... 'position', [0.1 0.25 0.2 0.5], ... 'FontSize', 14, ... 'FontWeight', 'bold', ... 'String', 'Start Compteur', ... 'callback', @cpt_start ); % etc...
salut,
le code ne marche pas...je doit programmer le pic 16f877a avec un programme pic.c
Impossible de vous apporter plus d'aide sans autres informations...
A vous de voir si vous souhaitez aller au bout de votre question technique, pour cela il faudrait que l'on puisse étudier votre programme et regarder pourquoi il ne fonctionne pas !
Pour rappel, un programme C pour microcontrôleur doit au moins avoir :
- l'include des fichiers systèmes
- l'initialisation des fusibles de configuration du PIC (permettant le démarrage du microcontrôleur)
- une seule fonction main() dans le projet
Merci de préciser le type d'horloge utiliser pour le fonctionnement du PIC, ainsi que la chaîne de développement (avec les numéro de version des outils)
Bonne continuation
bonjour
merci bien...j'ai trouvé une solution pour commander mon pic 16f877a avec matlab et maintenant je doit faire une interface gui qui comporte deux boutons (start et close) et une espace pour afficher des nombres de 0 a 255
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
56
57
58 %------------------------------------------------------------- %Creation d'interface %------------------------------------------------------------- function acquisition_serie_donnees() %Ouverture de la fenetre %------------------------------------------------------------- handle(1) = figure('Name','Acquisition des données',... 'Position',[500, 300, 400, 200],... 'menubar','none'); %------------------------------------------------------------- %Creation de la zone d'acquisition %------------------------------------------------------------- %Bouton : lancer acquisition handle(2) = uicontrol('pos',[250,160,140,30],... 'style','pushbutton',... 'callback',@cb_start_acquisition,... 'String','start'); 'backgroundcolor',[0.9,0.1,0.1] %Bouton : Fermer port handle(7) = uicontrol('pos',[250,10,140,30],... 'style','pushbutton',... 'callback',@cb_fermer_port,... 'String','Fermer port'); 'backgroundcolor',[0.9,0.1,0.1] %------------------------------------------------------------- %Callback : ouvrir port function cb_start_acquisition(obj,event) s=serial('com1','BaudRate',9600,'DataBits',8,'StopBits',1,'Terminator','CR') % C'était l'initialisation fopen(s) fprintf(s,'2') for i=1:3; x=fgetl(s) end fclose(s) delete(s) clear s %------------------------------------------------------------- %Callback : fermer port function cb_fermer_port(obj,event) fopen(s) fprintf(s,'3') fclose(s) delete(s) clear s
mon problème c'est :
- les boutons close ne marche pas dès que le programme de pic16f877a et fonctionelle
- et je veux que l'affichage des nombres de 0 a 255 qui ce fait sur la Command Window ce fait dans l'interface
aidez moi svp
Bonjour,
Est-ce normal que tu veuilles ouvrir et fermer ton port COM à chaque fois que tu appuies sur START ou sur STOP ?
Pour afficher un texte dans un GUI, tu peux utiliser un uicontrol de type 'text'. Tu peux ajouter ceci avant les fonctions callback.
Par exemple :
Là où tu obtiens ta variable 'x' que tu peux aussi obtenir avec ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 handle(8)=uicontrol('style','text',... 'units','normalized',... 'position',[0.02 0.075 0.4 0.1],... 'string','data');
Tu peux faire un set dans ton objet handle(8) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part x=fread(s,s.BytesAvailable);
Cordialement,
Code : Sélectionner tout - Visualiser dans une fenêtre à part set(handle(8),'string',num2str(x))
Christophe Halgand
PS : ce petit tutoriel pourra éventuellement t'aider
INCIA : MATLAB R2014a sous MAC OS 10.9.3
Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov
oui c'est sa j'ai programmer mon pic 16f877a avec un programme pic.c, lorsque j'appuie sur le caractère 2 le pic fonctionne et affiche des nombres de 0 a 255 si j'appuie sur 3 le pic arrête et cette programme fonctionne avec le Hyper terminale mais lorsque j'utilise MATLAB fonctionne lorsque j'appuie sur 2 mais lorsque j'appuie sur 3 le pic reste fonctionnel
voila mon code de programmation de pic 16f877a sur pic.c
Code C : 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 #include <16F877a.h> #use delay (clock=20000000) #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7) char received,a; void main () { while(true) { int i; received = getc(); if(received ==50) { for (i=1;i<256;i++) { if(kbhit()){ (a=getc()); if (a==51) break; } output_b(i); printf(" %u ",i); delay_ms(100); if(i==255) break ; } } else { printf(" \n\r 'wrong' ==> clic botton 2"); } } }
merci
Je pense que tu pourrais créer l'objet 's' lié au port com en même temps que tu crées ta figure et l'ouverture du port également. Le callback du bouton "start" enverra donc la chaine de caractère que tu souhaites. Le bouton "close" enverra l'autre chaine de caractère et fermera le port com et supprimera l'objet associé au port com.
Cordialement,
Christophe Halgand
PS : Quel type de port utilises-tu ? Est-ce un port USB ? Peux tu nous montrer à quoi ressemble ce que tu obtiens dans la command window ?
INCIA : MATLAB R2014a sous MAC OS 10.9.3
Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov
salut,
j'utilise un port serie RS232.
Dans la command window j'obtiens des chiferes de 0 à 255, dont le but de tracer une spectre avec ces chiferes .
Bonjour
Si j'ai bien compris, tu utilises ces lignes de code pour lire les données sur ton cable DB9 avec la norme RS232 pour le codage de tes données :
En matlab, le fait de ne pas utiliser l'index de ta boucle va engendrer que x ne va contenir que le troisième "fgetl". Pour t'en rendre compte, tu peux changer le code ci-dessus par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for i=1:3; x=fgetl(s) end
Ensuite, y'a t'il un séparateur (exemple tabulation) dans ta ligne de texte (x) ? Peux-tu nous montrer les 20 premiers caractères, en faisant un copier/coller de ce que tu obtiens dans ta command window ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for i=1:3; x=fgetl(s); end x
Cordialement,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for i=1:3; x=fgetl(s); end x(1:20)
Christophe Halgand
INCIA : MATLAB R2014a sous MAC OS 10.9.3
Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov
Re,
Une fois que tu as obtenu ta ligne de texte, c'est-à-dire x, tu peux faire ceci :
Sachant que tu dois avoir créer un uicontrol de type edit, exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 [outstring,newpos] = textwrap(hgui.text,string); set(handle(8),'String',outstring,'Position',newpos);
Cordialement,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 handle(8)=uicontrol('style','text',... 'units','normalized',... 'position',[0.02 0.075 0.4 0.1],... 'string','data');
Christophe Halgand
INCIA : MATLAB R2014a sous MAC OS 10.9.3
Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov
salut,
si j'applique cette code
dans la Command Window je trouve sa :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for i=1:3; x=fgetl(s); end x
mon but c'est : -donner l'ordre pour arrêter l'affichage (deux boutons start/close) le bouton start fonctionne mais l'autre non
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 x = 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 Warning: The input buffer was filled before the Terminator was reached. x = 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 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 Warning: A timeout occurred before the Terminator was reached. x = 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255
-afficher cet résultat (qui se trouve dans la Command Window) dans une interface
-tracer une spectre à partir de ces chiffres
Bonjour,
Comme te dis Matlab, tu as déjà problème de lecture de tes données... Ensuite, tu nous dis vouloir faire un bouton qui lance un affichage et un bouton pour arrêter l'affichage. Ca pourrait fonctionner si les données qui arrivent du PIC sont en flux continu, hors là tu as un vecteur... De ce que j'en comprends, tu veux lancer le pic à envoyer des valeurs en continu de 0 à 255 lorsque tu appuies sur le bouton start et tu veux qu'il arrête d'envoyer des valeurs lorsque tu vas appuyer sur le bouton stop. Entre le moment où tu appuies sur le bouton start et le bouton stop, tu voudrais que matlab affiche ces valeurs ?
SI c'est ça, personnellement, j'utilise un câble USB qui m'a permis d'utiliser le buffer du port COM. Dans le pic, il m'a fallu deux tableaux car pendant que j'en utilisais un pour envoyer, l'autre se remplissait.
Vais-je dans la bonne direction ?
Cordialement,
Christophe Halgand
INCIA : MATLAB R2014a sous MAC OS 10.9.3
Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov
salut,
j'ai pas un problème de lecture de donner, et j'ai trouver une solution pour lancer et stopper le programme et afficher le résultat dans l’interface avec cette code sur MATLAB :
mais le code affiche les chiffres ligne par ligne comme une chaine de caractères à cause de la fonction fgetl et mon but c'est de lire chiffre par chiffre si vous pouvez aider moi.
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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %DEBUT DE LA FONCTION PRINCIPALE% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function gui_globales % Définition de nCompteur et handles comme variables globales dans chaque fonction et sous-fonction % nCompteur : valeur courante du compteur (scalaire) % handles : identifiants des objets graphiques (vecteur) global a handles global close handles global s handles % Initialisation a=' '; close=0; s=serial('com1','baudrate',9600,'databits',8,'stopbits',1,'Terminator','CR') fopen(s) %Ouverture de la fenetre %------------------------------------------------------------- handle(1) = figure('Name','interface de commande',... 'Position',[300, 85, 1000, 800],... 'menubar','none'); %------------------------------------------------------------- %Bouton : ouvrir : start handle(2) = uicontrol('pos',[800,500,160,40],... 'style','pushbutton',... 'callback',@start,... 'String','start ',... 'SelectionHighlight','on',... 'tag','bt1',... 'backgroundcolor','blue'); %Bouton : stop handle(3) = uicontrol('pos',[800,400,160,40],... 'style','pushbutton',... 'callback',@stop,... 'String','stop',... 'tag','bt2',... 'backgroundcolor','red'); % afficher les données handles(4)=uicontrol('style','text',... 'units','normalized',... 'position',[0.1 0.2 0.6 0.5],... 'string','start boutton',... 'HorizontalAlignment','left'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %DEBUT DE LA FONCTION START% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function start(obj,event) a=[]; global close handles global a handles global s handles fprintf(s,'2'); for i=1:13; if close==1 fprintf(s,51); break ; end; x=fgetl(s); a= [a x]; set(handles(4),'string',num2str(a)); pause(0.01); end; fclose(s); delete(s); clear s; %%%%%%%%%%%%%%%%%%%%%%%%%%%%% %debut de la fonction stop% %%%%%%%%%%%%%%%%%%%%%%%%%%%%% function stop(obj,event) global a handles global close handles global s handles close=1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %FIN DE LA SOUS-FONCTION stop% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
mercii
Bonjour,
Je dis que tu as un problème de lecture car fgetl s'attends à ce que tu es un caractère de nouvelle ligne et qui ne le trouve pas tout le temps. Ce n'est donc pas la meilleure solution bien que ça reste un warning... As-tu essayer la fonction fread(s) ? Cette fonction te donnera des nombres plutôt qu'une chaîne de caractère.
Deuxième chose : Quel est le caractère entre tes chiffres ? Des espaces ou des tabulations ? Pour extraires les chiffres, tu peux utiliser les fonctions strfind et str2double
Troisième chose, c'est qu'une fois qu'il aura fait ces 13 itérations, ça ne sert plus à rien de cliquer sur ton bouton CLOSE puisque il n'y aura plus de nouvelles données. Je te conseillerais d'utiliser un timer qui démarre quand tu appuies sur le bouton start et qui s'arrête quand tu appuies sur le bouton stop. Et ce sans fermer ta connexion avec le PIC. C'est à dire que tu pourras recommencer si ça te fais plaisir contrairement à ton code actuel où tu ne peux relancer la réception de tes données...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 a='1 2 3 4' a = 1 2 3 4 >> positionDesEspaces=strfind(a,' ') positionDesEspaces = 2 4 6 b=sprintf('%s\t%s\t%s','1','2','3') b = 1 2 3 >> positionDesTabulations=strfind(b,char(9)) positionDesTabulations = 2 4
Je n'aime pas trop les variables globales, j'utilise plutôt les fonctions imbriquées. Tu as moins de ligne de code et c'est plus clair... Voilà ce que ça donne pour ton code avec
- un petit try/catch sur l'ouverture du port com au cas où ton pic n'est pas ouvert (comme sur mon ordi par exemple)
- une fonction de fermeture de ton port com si tu fermes ta fenêtre alors que le port com est toujours ouvert
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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %DEBUT DE LA FONCTION PRINCIPALE% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function gui_globales % Initialisation a=' '; close=0; s=serial('com1','baudrate',9600,'databits',8,'stopbits',1,'Terminator','CR') try fopen(s) catch disp('PIC not connected') end %Ouverture de la fenetre %------------------------------------------------------------- handle(1) = figure('Name','interface de commande',... 'Position',[300, 85, 1000, 800],... 'menubar','none',... 'CloseRequestFcn',@my_closereq); %------------------------------------------------------------- %Bouton : ouvrir : start handle(2) = uicontrol('pos',[800,500,160,40],... 'style','pushbutton',... 'callback',@start,... 'String','start ',... 'SelectionHighlight','on',... 'tag','bt1',... 'backgroundcolor','blue'); %Bouton : stop handle(3) = uicontrol('pos',[800,400,160,40],... 'style','pushbutton',... 'callback',@stop,... 'String','stop',... 'tag','bt2',... 'backgroundcolor','red'); % afficher les données handles(4)=uicontrol('style','text',... 'units','normalized',... 'position',[0.1 0.2 0.6 0.5],... 'string','start boutton',... 'HorizontalAlignment','left'); %%%%%%%%%%%%%%%%%%%%%%%%%%%% %DEBUT DE LA FONCTION START% %%%%%%%%%%%%%%%%%%%%%%%%%%%% function start(obj,event) a=[]; fprintf(s,'2'); for i=1:13; if close==1 fprintf(s,51); break end x=fgetl(s); a= [a x]; set(handles(4),'string',num2str(a)); pause(0.01); end if ishandle(s) fclose(s); delete(s); clear s; end end %%%%%%%%%%%%%%%%%%%%%%%%%%% %debut de la fonction stop% %%%%%%%%%%%%%%%%%%%%%%%%%%% function stop(obj,event) close=1; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %FIN DE LA SOUS-FONCTION stop% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %debut de la sous-fonction fermeture GUI% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function my_closereq(obj,evt) selection = questdlg('Close This Figure?',... 'Close Request Function',... 'Yes','No','Yes'); switch selection, case 'Yes', if ishandle(s) fclose(s); delete(s) clear s end delete(gcf) case 'No' return end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %fin de la sous-fonction fermeture GUI% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% end
INCIA : MATLAB R2014a sous MAC OS 10.9.3
Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager