Blame view

Moteur/Moteur.c 1.72 KB
686fbdf0   dmohamed   UPDATE - Mise à j...
1
  #include <avr/io.h>
41f6cbfd   dmohamed   first commit
2
  #include <util/delay.h>
686fbdf0   dmohamed   UPDATE - Mise à j...
3
4
5
6
7
8
9
10
11
  #include "serial.h"
  #include <avr/interrupt.h>
  
  #define LED_ON 0x01
  #define LED_OFF 0x02
  #define MOVE_RIGHT 0x04
  #define MOVE_LEFT 0x08
  #define MOVE_STOP 0x10
  
9348158f   dmohamed   Modification des ...
12
13
  
  // Initialisation du signal PWM délivré sur le pin9 (PB1)
686fbdf0   dmohamed   UPDATE - Mise à j...
14
  void init_pwm()
41f6cbfd   dmohamed   first commit
15
  {
9348158f   dmohamed   Modification des ...
16
17
    
    cli();          
41f6cbfd   dmohamed   first commit
18
  
9348158f   dmohamed   Modification des ...
19
    //Initialisation du PWM sur broche 13 = PB1
686fbdf0   dmohamed   UPDATE - Mise à j...
20
    DDRB |= 0x02 ;
9348158f   dmohamed   Modification des ...
21
    // PD6 est une sortie
686fbdf0   dmohamed   UPDATE - Mise à j...
22
23
24
25
26
    TCCR1A = (1 << WGM10) | (1 << COM1A1);
    // set none-inverting mode
    TCCR1B = (1 << WGM12) | (1 << CS10) |(1 << CS12);
    // set prescaler to 8 and starts PWM
    OCR1A= 0xFF ;
41f6cbfd   dmohamed   first commit
27
  
686fbdf0   dmohamed   UPDATE - Mise à j...
28
    DDRB |= (1 << DDB1)|(1 << DDB2);
9348158f   dmohamed   Modification des ...
29
    // PB1 and PB2 sont des sorties
41f6cbfd   dmohamed   first commit
30
  
686fbdf0   dmohamed   UPDATE - Mise à j...
31
32
    TCCR1B |= (1 << CS10);
    // START the timer with no prescaler
41f6cbfd   dmohamed   first commit
33
  
686fbdf0   dmohamed   UPDATE - Mise à j...
34
    sei();
41f6cbfd   dmohamed   first commit
35
36
  }
  
9348158f   dmohamed   Modification des ...
37
38
  // Fonctions pour le mouvement d'un servomoteur connecté sur le pin9 
  
686fbdf0   dmohamed   UPDATE - Mise à j...
39
40
  void motor_right(){
    OCR1A = 0x80 ;
41f6cbfd   dmohamed   first commit
41
42
  }
  
686fbdf0   dmohamed   UPDATE - Mise à j...
43
44
  void motor_left(){
    OCR1A = 0x08 ;
41f6cbfd   dmohamed   first commit
45
46
  }
  
686fbdf0   dmohamed   UPDATE - Mise à j...
47
48
  void motor_stop(){
    OCR1A = 0xFF;
41f6cbfd   dmohamed   first commit
49
50
  }
  
9348158f   dmohamed   Modification des ...
51
  // Fonctions pour la LED
41f6cbfd   dmohamed   first commit
52
  
686fbdf0   dmohamed   UPDATE - Mise à j...
53
54
55
56
  void init_led(void){
    //Led must be placed on pin 7 (PD7)
    DDRD  |= 0x80 ;
    PORTD = 0x00 ;
41f6cbfd   dmohamed   first commit
57
  }
41f6cbfd   dmohamed   first commit
58
  
686fbdf0   dmohamed   UPDATE - Mise à j...
59
60
  void led_on(void){
    PORTD |= 0x80 ;
41f6cbfd   dmohamed   first commit
61
62
  }
  
686fbdf0   dmohamed   UPDATE - Mise à j...
63
64
65
  void led_off(void){
    PORTD &= 0x7F ;
  }
41f6cbfd   dmohamed   first commit
66
67
68
  
  int main(void)
  {
686fbdf0   dmohamed   UPDATE - Mise à j...
69
    init_led();
41f6cbfd   dmohamed   first commit
70
    init_serial(9600); //on choisit une vitesse de 9600 bauds pour la transmission série
9348158f   dmohamed   Modification des ...
71
    uint8_t r ; 
686fbdf0   dmohamed   UPDATE - Mise à j...
72
    init_pwm();
41f6cbfd   dmohamed   first commit
73
    while(1)
686fbdf0   dmohamed   UPDATE - Mise à j...
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
    {
  	  r = get_serial();
      switch(r){
          case LED_ON:
            led_on();
            send_ack();
            break;
          case LED_OFF:
            led_off();
            send_ack();
            break;
          case MOVE_RIGHT:
            motor_right();
            send_ack();
            break;
          case MOVE_LEFT:
            motor_left();
            send_ack();
            break;
          case MOVE_STOP:
            motor_stop();
            send_ack();
            break;
          }
    }
41f6cbfd   dmohamed   first commit
99
100
  return 0;
  }