Commit 3fcb1d7bf4f287e3324e2ea669c1bc7c64077fe6

Authored by pfrison
1 parent d2f14e3c

update robot code for PercTeacher

Showing 1 changed file with 36 additions and 22 deletions   Show diff stats
PercTeacher/Sources/Robot/robot.c
... ... @@ -3,29 +3,42 @@
3 3  
4 4 #define SERIAL_BAUDE_RATE 9600
5 5 #define DELAI_STEP 2
6   -#define PIN_MOTEUR_GAUCHE 0x40 // pin 12
7   -#define PIN_MOTEUR_DROIT 0x20 // pin 11
  6 +#define STEP_MOTEUR_GAUCHE 0x00 // pin ??
  7 +#define STEP_MOTEUR_DROIT 0x00 // pin ??
  8 +#define DIR_MOTEUR_GAUCHE 0x00 // pin ??
  9 +#define DIR_MOTEUR_DROIT 0x00 // pin ??
8 10  
9 11 #define CPU_FREQ 16000000L
10 12  
11 13 //gestion des moteurs
12 14 void init_pins(void){
13   - DDRB = PIN_MOTEUR_GAUCHE | PIN_MOTEUR_DROIT;
  15 + DDRB = STEP_MOTEUR_GAUCHE | STEP_MOTEUR_DROIT | DIR_MOTEUR_GAUCHE | DIR_MOTEUR_DROIT;
14 16 }
15 17  
16 18 void pas_moteur(int g, int d){
17   - if (g)
18   - PORTB |= PIN_MOTEUR_GAUCHE;
19   - if (d)
20   - PORTB |= PIN_MOTEUR_DROIT;
  19 + if (g != 0)
  20 + PORTB |= STEP_MOTEUR_GAUCHE;
  21 + if (d != 0)
  22 + PORTB |= STEP_MOTEUR_DROIT;
21 23 _delay_ms(DELAI_STEP);
22   - if (g)
23   - PORTB &= ~PIN_MOTEUR_GAUCHE;
24   - if (d)
25   - PORTB &= ~PIN_MOTEUR_DROIT;
  24 + if (g != 0)
  25 + PORTB &= ~STEP_MOTEUR_GAUCHE;
  26 + if (d != 0)
  27 + PORTB &= ~STEP_MOTEUR_DROIT;
26 28 _delay_ms(DELAI_STEP);
27 29 }
28 30  
  31 +void moteur_set_dir(int g, int d){
  32 + if(g != 0)
  33 + PORTB |= DIR_MOTEUR_GAUCHE;
  34 + else
  35 + PORTB &= ~DIR_MOTEUR_GAUCHE;
  36 + if(d != 0)
  37 + PORTB |= DIR_MOTEUR_DROIT;
  38 + else
  39 + PORTB &= ~DIR_MOTEUR_DROIT;
  40 +}
  41 +
29 42 //gestion de la liaison serie
30 43 void init_serial(int speed){
31 44 UBRR0 = CPU_FREQ / (((unsigned long int) speed) << 4) - 1; //Set baud rate
... ... @@ -53,16 +66,18 @@ int main(void){
53 66 unsigned char deltaL2 = get_serial();
54 67 unsigned char deltaR1 = get_serial();
55 68 unsigned char deltaR2 = get_serial();
56   -
57   -
58   - send_serial('a');
59   -
  69 +
60 70 // conversion 2x8 bits => 16 bits
61   - int deltaL = (deltaL1 << 8) + deltaL2;
62   - int deltaR = (deltaR1 << 8) + deltaR2;
  71 + uint16_t deltaL = (deltaL1 << 8) + deltaL2;
  72 + uint16_t deltaR = (deltaR1 << 8) + deltaR2;
  73 +
  74 + // sens rotation
  75 + moteur_set_dir((deltaL & 0x80) == 0x80 ? 1 : 0, (deltaR & 0x80) == 0x80 ? 1 : 0)
  76 + deltaL &= 0x7F;
  77 + deltaR &= 0x7F;
63 78  
64   - int deltaMax = deltaL > deltaR ? deltaL : deltaR;
65   - for(int i=0; i<deltaMax; i++){
  79 + uint16_t deltaMax = deltaL > deltaR ? deltaL : deltaR;
  80 + for(uint16_t i=0; i<deltaMax; i++){
66 81 if(deltaL > i && deltaR > i)
67 82 pas_moteur(1, 1);
68 83 else if(deltaL > i)
... ... @@ -70,9 +85,8 @@ int main(void){
70 85 else if(deltaR > i)
71 86 pas_moteur(0, 1);
72 87 }
73   -
74   - send_serial('b');
75   - send_serial(0x01);
  88 +
  89 + send_serial(0x01);
76 90 }
77 91 return 0;
78 92 }
... ...