Mesure distance capteur ultrason - pic18f45k50 » Historique » Révision 2
Révision 1 (Romain CHAMBELLON, 22/11/2022 15:05) → Révision 2/3 (Romain CHAMBELLON, 25/11/2022 14:59)
h1. Mesure distance capteur ultrason - pic18f45k50 Le programme consiste à récupérer la distance mesurée par un capteur ultrason, on utilise la carte de synthèse avec le PIC18F45K50 avec le module ultrason. Le but est d'allumer une LED en dessous d'une certaine distance qu'on définit. Ceci permet de simuler une détection d'obstacle avec un capteur ultrason. *Voici l'archive le code du projet ci dessous:* programme :* #include <stdio.h> #include <stdlib.h> #if defined(__XC) #include <xc.h> /* XC8 General Include File */ #elif defined(HI_TECH_C) #include <htc.h> /* HiTech General Include File */ #elif defined(__18CXX) #include <p18cxxx.h> /* C18 General Include File */ #endif #if defined(__XC) || defined(HI_TECH_C) #include <stdint.h> /* For uint8_t definition */ #include <stdbool.h> /* For true/false definition */ #endif // Definition de l'oscillateur comme oscillateur externe #pragma config FOSC = INTOSCIO // Desactivation du WATCHDOG #pragma config WDTEN = OFF #pragma config MCLRE = OFF #pragma config LVP = OFF // determination de la frequence #define _XTAL_FREQ 16000000L ///////////////////////////////// ULTRASON ///////////////////////////////////// int calcul_distance() { // Declaration des variables int distance = 0; int timer = 0; TMR1H = 0; TMR1L = 0; LATBbits.LATB0 = 1; // Impulsion de 10 us sur le trigger __delay_us(10); LATBbits.LATB0 = 0; while(PORTBbits.RB1==0); // Mesure de la durée entre l'envoi et la réception du signal T1CONbits.TMR1ON = 1; while(PORTBbits.RB1==1); timer=TMR1; T1CONbits.TMR1ON = 0; distance=timer/17; // Calcul de la distance en cm return distance; } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////// FONCTION MAIN ///////////////////////////////// //////////////////////////////////////////////////////////////////////////////// int main() { // Declaration et configuration des broches TRISDbits.TRISD7 = 0; // Broche D7 = LED témoin, ultrason ANSELDbits.ANSD7 = 0; LATDbits.LATD7 = 0; PORTD = 0; // PORTD initialisé à 0 TRISBbits.TRISB0 = 0; // Broche B0 = trigger ultrason ANSELBbits.ANSB0 = 0; PORTBbits.RB0 = 0; TRISBbits.TRISB1 = 1; // Broche B1 = echo ultrason ANSELBbits.ANSB1 = 0; PORTBbits.RB1 = 0; // Configuration du timer T1CKPS0 = 0; T1CKPS1 = 0; T1CONbits.TMR1CS = 0; // L'horloge locale est l'horloge source //////////////////////////////////////////////////////////////////////////// //////////////////////////* PROGRAMME PRINCIPAL */////////////////////////// //////////////////////////////////////////////////////////////////////////// /**/ while(1) { __delay_ms(10); int dist = calcul_distance(); if (dist<10){ //valeur de distance à définir en cm LATD7=1; } else { LATD7=0; } } return 0; }