Blame view

codes/distance.c 1.5 KB
8da267d4   lahouass   code distance eff...
1
2
3
4
5
6
7
8
9
10
  #include <avr/io.h>
  #include <avr/interrupt.h>
  #include <util/delay.h>
  #include <string.h>
  #include <stdlib.h>
  #include <stdio.h>
  
  //#ifndef RETOUR_H_
  //#define RETOUR_H_
  
2bf066aa   grouille   MAJ
11
  #include "retour.h"
8da267d4   lahouass   code distance eff...
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
  
  //#endif 
  #define PRESCALER 1024
  #define TIME_SLOT 20
  #define BAUDRATE	103
  
  static volatile int pulse = 0;
  static volatile int i = 0;
  
  
  //////////////////////////////////////////////
  
  ISR(INT0_vect){
    //i=1 indique lcho HIGH
    if(i == 1)
    {
      //On arrête le timer
      TCCR1B = 0;
      //On stocke la valeur précédente du timer (l'aller-retour)
      pulse = TCNT1;
      //On reset la valeur de TCNT1 et de i à Zero
      TCNT1 = 0;
      i = 0;
    }
    
    //i=0 indique lcho à LOW
    if(i==0)
    {
      //On set le bit CS10 à HIGH, debut du timer qui compte
      TCCR1B |= (1<<CS10);
      i = 1; 
    }
  }
  
  
  int main(void){
    init_serial();
    int16_t count_a = 0; 
    char show_a[16];
    //Trigger = PIND0 et ECHO = PIND2
    DDRD = 0b11111011;
    _delay_ms(50);
    //Selection INT0
    EIMSK |= (1<<INT0);
    //Interruption sur changement logique
    EICRA = 0x01;
    sei();
   
    while(1)
    { 
      //TRIGGER HIGH
      PORTD |= 1<<PIND0;
      //Durée de l'impulsion TRIGGER
      _delay_us(15);
      //TRIGGER LOW
      PORTD &= ~(1<<PIND0);
      //On calcule la distance en cm : pulse/(58/2/10)  (en cm)
      count_a = pulse/1160.0;
      
      itoa(count_a,show_a,10);
      //dtostrf(count_a, 5,2, show_a);
      sprintf(show_a, "%d", count_a);
      //send_serial('D');
      //send_serial('=');
      //RETOUR
      retour(show_a);
      _delay_ms(1000);
      
    }
    return 0;
  }