Mesure distante capteur ultrason - pic18f45k50 » Historique » Version 3
Romain CHAMBELLON, 22/11/2022 14:59
1 | 2 | Romain CHAMBELLON | h1. Mesure distance capteur ultrason - pic18f45k50 |
---|---|---|---|
2 | 1 | Romain CHAMBELLON | |
3 | Le programme récupère une distance avec un capteur ultrason, on utilise la carte de synthèse avec un PIC18F45K50 |
||
4 | |||
5 | Le but d'allumer une led quand on est trop prêt, donc quand on est inférieur à une certaine distance. |
||
6 | |||
7 | Ceci permet de simuler une détection d'obstacle avec un capteur ultrason. |
||
8 | |||
9 | 3 | Romain CHAMBELLON | |
10 | * |
||
11 | Voici le code de ce programme :* |
||
12 | 1 | Romain CHAMBELLON | |
13 | #include <stdio.h> |
||
14 | #include <stdlib.h> |
||
15 | |||
16 | #if defined(__XC) |
||
17 | #include <xc.h> /* XC8 General Include File */ |
||
18 | #elif defined(HI_TECH_C) |
||
19 | #include <htc.h> /* HiTech General Include File */ |
||
20 | #elif defined(__18CXX) |
||
21 | #include <p18cxxx.h> /* C18 General Include File */ |
||
22 | #endif |
||
23 | |||
24 | #if defined(__XC) || defined(HI_TECH_C) |
||
25 | #include <stdint.h> /* For uint8_t definition */ |
||
26 | #include <stdbool.h> /* For true/false definition */ |
||
27 | #endif |
||
28 | |||
29 | // Definition de l'oscillateur comme oscillateur externe |
||
30 | #pragma config FOSC = INTOSCIO |
||
31 | |||
32 | // Desactivation du WATCHDOG |
||
33 | #pragma config WDTEN = OFF |
||
34 | #pragma config MCLRE = OFF |
||
35 | #pragma config LVP = OFF |
||
36 | |||
37 | // determination de la frequence |
||
38 | #define _XTAL_FREQ 16000000L |
||
39 | |||
40 | ///////////////////////////////// ULTRASON ///////////////////////////////////// |
||
41 | |||
42 | int calcul_distance() |
||
43 | { |
||
44 | // Declaration des variables |
||
45 | |||
46 | int distance = 0; |
||
47 | int timer = 0; |
||
48 | TMR1H = 0; |
||
49 | TMR1L = 0; |
||
50 | |||
51 | LATBbits.LATB0 = 1; // Impulsion de 10 us sur le trigger |
||
52 | __delay_us(10); |
||
53 | LATBbits.LATB0 = 0; |
||
54 | |||
55 | while(PORTBbits.RB1==0); // Mesure de la durée entre l'envoi et la réception du signal |
||
56 | T1CONbits.TMR1ON = 1; |
||
57 | while(PORTBbits.RB1==1); |
||
58 | timer=TMR1; |
||
59 | T1CONbits.TMR1ON = 0; |
||
60 | |||
61 | distance=timer/17; // Calcul de la distance en cm |
||
62 | return distance; |
||
63 | } |
||
64 | |||
65 | //////////////////////////////////////////////////////////////////////////////// |
||
66 | //////////////////////////////// FONCTION MAIN ///////////////////////////////// |
||
67 | //////////////////////////////////////////////////////////////////////////////// |
||
68 | |||
69 | int main() |
||
70 | { |
||
71 | // Declaration et configuration des broches |
||
72 | |||
73 | TRISDbits.TRISD7 = 0; // Broche D7 = LED témoin, ultrason |
||
74 | ANSELDbits.ANSD7 = 0; |
||
75 | LATDbits.LATD7 = 0; |
||
76 | |||
77 | PORTD = 0; // PORTD initialisé à 0 |
||
78 | |||
79 | TRISBbits.TRISB0 = 0; // Broche B0 = trigger ultrason |
||
80 | ANSELBbits.ANSB0 = 0; |
||
81 | PORTBbits.RB0 = 0; |
||
82 | |||
83 | TRISBbits.TRISB1 = 1; // Broche B1 = echo ultrason |
||
84 | ANSELBbits.ANSB1 = 0; |
||
85 | PORTBbits.RB1 = 0; |
||
86 | |||
87 | // Configuration du timer |
||
88 | T1CKPS0 = 0; |
||
89 | T1CKPS1 = 0; |
||
90 | T1CONbits.TMR1CS = 0; // L'horloge locale est l'horloge source |
||
91 | |||
92 | //////////////////////////////////////////////////////////////////////////// |
||
93 | //////////////////////////* PROGRAMME PRINCIPAL */////////////////////////// |
||
94 | //////////////////////////////////////////////////////////////////////////// |
||
95 | |||
96 | /**/ |
||
97 | while(1) |
||
98 | { |
||
99 | |||
100 | __delay_ms(10); |
||
101 | |||
102 | int dist = calcul_distance(); |
||
103 | |||
104 | |||
105 | |||
106 | if (dist<10){ // valeur de distance de détection à définir en cm |
||
107 | LATD7=1; |
||
108 | } |
||
109 | else { |
||
110 | LATD7=0; |
||
111 | } |
||
112 | |||
113 | } |
||
114 | |||
115 | return 0; |
||
116 | } |
||
117 |