Commit 3fcb1d7bf4f287e3324e2ea669c1bc7c64077fe6
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,29 +3,42 @@ | ||
3 | 3 | ||
4 | #define SERIAL_BAUDE_RATE 9600 | 4 | #define SERIAL_BAUDE_RATE 9600 |
5 | #define DELAI_STEP 2 | 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 | #define CPU_FREQ 16000000L | 11 | #define CPU_FREQ 16000000L |
10 | 12 | ||
11 | //gestion des moteurs | 13 | //gestion des moteurs |
12 | void init_pins(void){ | 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 | void pas_moteur(int g, int d){ | 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 | _delay_ms(DELAI_STEP); | 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 | _delay_ms(DELAI_STEP); | 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 | //gestion de la liaison serie | 42 | //gestion de la liaison serie |
30 | void init_serial(int speed){ | 43 | void init_serial(int speed){ |
31 | UBRR0 = CPU_FREQ / (((unsigned long int) speed) << 4) - 1; //Set baud rate | 44 | UBRR0 = CPU_FREQ / (((unsigned long int) speed) << 4) - 1; //Set baud rate |
@@ -53,16 +66,18 @@ int main(void){ | @@ -53,16 +66,18 @@ int main(void){ | ||
53 | unsigned char deltaL2 = get_serial(); | 66 | unsigned char deltaL2 = get_serial(); |
54 | unsigned char deltaR1 = get_serial(); | 67 | unsigned char deltaR1 = get_serial(); |
55 | unsigned char deltaR2 = get_serial(); | 68 | unsigned char deltaR2 = get_serial(); |
56 | - | ||
57 | - | ||
58 | - send_serial('a'); | ||
59 | - | 69 | + |
60 | // conversion 2x8 bits => 16 bits | 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 | if(deltaL > i && deltaR > i) | 81 | if(deltaL > i && deltaR > i) |
67 | pas_moteur(1, 1); | 82 | pas_moteur(1, 1); |
68 | else if(deltaL > i) | 83 | else if(deltaL > i) |
@@ -70,9 +85,8 @@ int main(void){ | @@ -70,9 +85,8 @@ int main(void){ | ||
70 | else if(deltaR > i) | 85 | else if(deltaR > i) |
71 | pas_moteur(0, 1); | 86 | pas_moteur(0, 1); |
72 | } | 87 | } |
73 | - | ||
74 | - send_serial('b'); | ||
75 | - send_serial(0x01); | 88 | + |
89 | + send_serial(0x01); | ||
76 | } | 90 | } |
77 | return 0; | 91 | return 0; |
78 | } | 92 | } |