Bonjour,
J'ai un petit soucis, je suis novice dans la programmation et j'ai besojn d'aide, est possible de transformer ce fichier :
en fichier ecrit comme ceci :Code://*************************************************** // CCS Compiler // irb12 - Premiers pas d'irbot + détection collision // // Auteur : HEILIG Yves //*************************************************** #include <16f84.h> #fuses HS,NOWDT,NOPROTECT #use delay(clock=20000000) //****************** // DEFINE //****************** #define TIME 4 // TIMER=3 --> 256-3=253 pas #define VAL_18MS 360 // 360*50=18000µs #define VAL_AV 40 // 40*50 =2000µs #define VAL_AR 20 // 20*50 =1000µs #define VAL_AVP 32 // 32*50 =1600µs #define VAL_ARP 28 // 28*50 =1400µs #define VAL_STOP_D 30 // 30*50 =1500µs #define VAL_STOP_G 31 #define AV 1 #define TG 2 #define TD 3 #define AR 4 #define ROTG 5 #define ROTD 6 #define STOP 0 #define GA 0 #define DR 1 #define PORT_SERVO_G PIN_B0 // signal pour servo gauche #define PORT_SERVO_D PIN_B1 // signal pour servo droite #define LED_IR_G PIN_B2 // led ir gauche #define LED_IR_D PIN_B3 // led ir droite #define REC_IR PIN_B7 // récepteur ir #define LED_G PIN_A2 // led signalisation gauche #define LED_D PIN_A1 // led signalisation droite #define MICRO_S_G PIN_B4 // switch gauche détection de collision #define MICRO_S_D PIN_B5 // switch droite détection de collision #define SIZE 7 // taille de la table tab_marche //******************* // variables globales //******************* int16 CPT_18MS, CPT_MARCHE, MARCHE; int CPT_PULS_G, CPT_PULS_D, PULS_G, PULS_D, DEF_DIR; int1 SIGNAL_G=0, SIGNAL_D=0, DUREE_MARCHE=0; const struct servo { int gauche; int droite; } tab_marche[SIZE] = { VAL_STOP_G,VAL_STOP_D, VAL_AV, VAL_AV, VAL_STOP_G, VAL_AV, VAL_AV, VAL_STOP_D, //Index 0 1 2 3 //Comment STOP AV TG TD VAL_AR, VAL_AR, VAL_AR, VAL_AV, VAL_AV, VAL_AR}; //Index 4 5 6 //Comment AR ROTG ROTD //**************************************** // Fonctions //**************************************** void init_timer () { set_timer0(TIME); setup_counters(RTCC_INTERNAL,WDT_18MS); enable_interrupts(INT_RTCC); // autorise interruption sur timer0 enable_interrupts(INT_RB); // autorise interruption sur b4 à b7 enable_interrupts(GLOBAL); } int1 radar (led) { // émission d'un train de 50 impulsions à 38Khz // durée de l'émission 50*26µs=1300µs int i; int c=0; for (i=0;i<50;i++) { if (input(REC_IR)==0) c++; switch (led) { case 0 : // LEDG output_high(LED_IR_G); delay_us(10); output_low(LED_IR_G); break; case 1 : // LEDD output_high(LED_IR_D); delay_us(10); output_low(LED_IR_D); break; } delay_us(10); } if (c>45) return 1; // on considère qu'il y a eu retour else return 0; } void sens (direction, long duree) { // sens et durée de marche de IRBOT if (DUREE_MARCHE) return; CPT_MARCHE=0; DUREE_MARCHE=0; // marche indéfiniment if (duree != 0) { DUREE_MARCHE=1; // marche pendant la durée définie par MARCHE MARCHE=duree; // duree en sec. = duree * .023 } PULS_G=tab_marche[direction].gauche; PULS_D=tab_marche[direction].droite; } void ir () { // radar ir int i; output_high (LED_G); // éteint LEDG output_high (LED_D); // étient LEDD // if (radar(GA) && radar(DR)) { // output_low(LED_G); // allume LEDG signalisation // output_low(LED_D); // allume LEDD signalisation // sens(ROT,3); // } // else { if (radar (GA)) { output_low(LED_G); // allume LEDG signalisation sens (TD,44); // tourne à droite pendant 1" } if (radar (DR)) { output_low(LED_D); // allume LEDD signalisation sens (TG,44); // tourne à gauche pendant 1" } // } } void att() { // attend que la manoeuvre en cours soit terminée while (DUREE_MARCHE); } //***************************************** //Interruptions //***************************************** #int_timer0 // Interruption toutes les (4*250)/20000000 = 50µs void main_int () { set_timer0(TIME); if (++CPT_18MS == 360) { // à 18MS début signal vers servo CPT_18MS=0; CPT_PULS_G=0; CPT_PULS_D=0; SIGNAL_G=1; SIGNAL_D=1; output_high(PORT_SERVO_G); output_high(PORT_SERVO_D); if (DUREE_MARCHE==1) { // compte durée de marche de IRBOT if (CPT_MARCHE++ == MARCHE) { DUREE_MARCHE=0; sens (DEF_DIR,0); // marche en avant indéfiniment } } } else { if (SIGNAL_G==1) { // compte durée impulsion servo gauche if (CPT_PULS_G++ == PULS_G) { SIGNAL_G=0; output_low(PORT_SERVO_G); } } if (SIGNAL_D==1) { // compte durée impulsion servo droit if (CPT_PULS_D++ == PULS_D) { SIGNAL_D=0; output_low(PORT_SERVO_D); } } if (CPT_18MS == 180) ir();; // à 9MS (180*50µs) appel radar ir } } #int_rb // interruption sur PORTB 4 à 7 (micro-switch de collision) void collision () { if (input(MICRO_S_G)==0) { DUREE_MARCHE=0; // priorité à la détection de collision sens (ROTD,32); // 1/4 de tour à droite pendant 1.5" } if (input(MICRO_S_D)==0) { DUREE_MARCHE=0; // priorité à la détection de collision sens (ROTG,32); // 1/4 de tour à gauche pendant 1.5" } } //********************** // Programme principal //********************** main() { init_timer(); DEF_DIR=STOP; // la direction par défaut // irbot prend cette direction à la fin de sa manoeuvre sens (STOP,652); // STOP pendant 15" = 652*.023 att(); sens (ROTG,130); // rotation à gauche pendant 3" att(); delay_ms(500); sens (ROTD,130); // etc ... att(); delay_ms(500); sens (AR,130); att(); delay_ms(500); DEF_DIR=AV; sens (AV,0); while (TRUE) { // boucle sans fin output_high (PIN_A3); delay_ms(250); output_low (PIN_A3); delay_ms(500); } }
********************
Ce code est soumis à un copyright comme tu peux le voir dans l'entête, donc pas diffusable sur notre forum.
Cordialement.
Hulk28 pour la modération.
Pour compiler j'utilise MPASWIN.
merci d'avance, si c'est possible vous me sauvez.
Ludovic
-----