Revision 63 branch/maincent/tp_info6/Emb_App/programme_principal_etud.c

View differences:

programme_principal_etud.c
14 14
/***********************************************************************/
15 15
#include "sfr32c87.h"
16 16
#include <stdio.h>
17
#include <stdlib.h>
17
#include <stdlib.h>p
18 18
#include <itron.h>
19 19
#include <kernel.h>
20 20
#include "kernel_id.h"
......
121 121
//				correspondant au nom du v?hicule si le nom se termine par '*'
122 122

  
123 123
short alpha;
124
short d;
125
void tri(void)
126
{
127
	CanFrame m;
128
		while (1)
129
		{
130
			rcv dtq(CanRx,&m.msg);  //Attente et lecture de la r?ponse
131
			switch(m.data.id)
132
			{
133
				case 'T': //Tourelle 
134
					alpha = m.data.val;
135
					break;
136
				case 'U': //distance mur
137
					d = m.data.val;	 
138
			}
139
		}
124
short distance;
125
short angleR;
126
void tourelle(){
127
	while(1)
128
	{
129
        short k=1; //Gain du correcteur P
130
        //lecture de la position de la tourelle
131
        CanFrame req,comm;
132
        UINT flag;
133
        
134
        req.data.id='R';
135
        req.data.rtr=1;
136
        periph[ADDR('R')].ev=0x01;
137
        snd_dtq(CanTx, req.msg);
138
        //Attente de la r?ponse
139
        wai_flg (ev_periph, 0x01, TWF_ANDW, &flag);
140
        alpha=periph[ADDR('R')].val;
141
        //Commande vitesse de la tourelle
142
        comm.data.id='T';
143
        comm.data.rtr=0; //indique une ?criture
144
        comm.data.val=k*(450/*ou ad00*/-alpha);
145
        snd_dtq(CanTx, comm.msg);
146
 		dly_tsk(50);
147
	}      
140 148
}
141

  
142

  
143

  
144
short k=1;
145
void asserv0(){
146
	
147
	CanFrame requete, reponse, comm;	
148
	//commande en vitesse de la tourelle
149
	comm.data.id = 'T';
150
	comm.data.rtr = 0; //indique une ecriture
151
	comm.data.val = k*(-900-alpha);
152
	snd_dtq(CanTx, comm.msg);
153
		
154
	//position tourelle
155
	requete.data.id='R';
156
	requete.data.rtr=1; //Indique une requ?te de lecture
157
	snd_dtq(CanTx, requete.msg);
158
//	rcv_dtq(CanRx, &reponse.msg);
159
	alpha=reponse.data.val;
160
	
161
	//Avancer
162
/*	comm.data.id = 'V';
163
	comm.data.rtr = 0; //indique une ecriture
164
	comm.data.val = 20;
165
	snd_dtq(CanTx, comm.msg);
166
*/	
149
void dist(){
150
	while(1)
151
	{
152
        //lecture de la distance du mur
153
        CanFrame req;
154
        UINT flag;
155
        
156
        req.data.id='U';
157
        req.data.rtr=1;
158
        periph[ADDR('U')].ev=0x02;
159
        snd_dtq(CanTx, req.msg);
160
        //Attente de la r?ponse
161
        wai_flg (ev_periph, 0x02, TWF_ANDW, &flag);
162
        distance=periph[ADDR('U')].val;
163
		dly_tsk(2); 
164
	}
167 165
}
166
void roue(){
167
	while(1)
168
	{
169
        short s=2; //Gain du correcteur P
170
        CanFrame req,comm;
171
        UINT flag;
168 172

  
169

  
170

  
171
void dist(){
172
	CanFrame requete, reponse;			
173
	//distance mur
174
	requete.data.id='U';
175
	requete.data.rtr=1; //Indique une requ?te de lecture
176
	snd_dtq(CanTx, requete.msg);
177
	rcv_dtq(CanRx, &reponse.msg);
178
	if
179
	d=reponse.data.val;
173
        //Commande de l'angle de roue
174
        comm.data.id='D';
175
        comm.data.rtr=0; //indique une ?criture
176
        comm.data.val=s*(distance-695);
177
        snd_dtq(CanTx, comm.msg); 
178
		dly_tsk(2);      
179
	}
180 180
}
181

  
182

  
183

  
184
void main()
185
{
186
	ports_mcu();
187
    lcd_init();
188
	periph_init();
189
	periph_nom("#AutoTest*");
190

  
191
    can_init();
192
    clavier_init(1);
193
	capture_init();
194

  
195
	sta_cyc(ID_acqui);
196
//	sta_tsk(ID_periph_rx);
197

  
198
	
199

  
200
    while(1)
181
void vitesse(){
182
	while(1)
183
	{
184
        CanFrame requete;
185
		dly_tsk(8000);
186
		requete.data.id='V';
187
		requete.data.rtr=0; 
188
		requete.data.val=20;
189
		snd_dtq(CanTx, requete.msg);
190
	}
191
}
192
void main()
193
{
194
        CanFrame requete, reponse,comm;
195
        ports_mcu();
196
    lcd_init();
197
        periph_init();
198
        periph_nom("#AutoTest*");
199
    can_init();
200
    clavier_init(1);
201
        capture_init();
202
        sta_cyc(ID_acqui);
203
        sta_tsk(ID_periph_rx);
204
        
205
		
206
		sta_tsk(ID_vitesse);
207
                sta_tsk(ID_tourelle);
208
                sta_tsk(ID_dist);
209
                sta_tsk(ID_roue);
210
		
211
		
212
		
213
    while(1)
201 214
    {
202
		sta_tsk(ID_asservtourelle);
203
		sta_tsk(ID_dist);
204
		sta_tsk(ID_tri);
205
    }
206
}
207

  
208

  
209
void acqui(){
210
	LED_V =! LED_V;
215
               
216
           dly_tsk(800);     
217
                
218
        
219
    }
211 220
}
212

  
213
//positin de la tourrelle 
214

  
215

  
216

  
221
void acqui()
222
{
223
        LED_V=!LED_V;
224
}

Also available in: Unified diff