Projet

Général

Profil

Actions

Mesure distance capteur ultrason - pic18f45k50 » Historique » Révision 1

Révision 1/3 | Suivant »
Romain CHAMBELLON, 22/11/2022 15:05


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 le code du 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&lt;10){ //valeur de distance à définir en cm
LATD7=1;
}
else {
LATD7=0;
}
}
return 0;
}

Mis à jour par Romain CHAMBELLON il y a plus de 2 ans · 1 révisions