root / trunk / code / projects / diagnostic_station / station / hardware_turntable.c @ 1285
History | View | Annotate | Download (1.2 KB)
1 | 1183 | deffi | #include "hardware_turntable.h" |
---|---|---|---|
2 | 1255 | bneuman | #include <encoders.h> |
3 | 1183 | deffi | |
4 | void turntable_init ()
|
||
5 | { |
||
6 | 1262 | bneuman | int e;
|
7 | 1255 | bneuman | encoders_init(); |
8 | 1262 | bneuman | |
9 | // get a reading to check alignment
|
||
10 | e = encoder_read(LEFT); |
||
11 | if(e==ENCODER_MAGNET_FAILURE)
|
||
12 | usb_puts("# ERROR: turntable encoder magnet failure!!");
|
||
13 | else if(e==ENCODER_MISALIGNED) |
||
14 | usb_puts("# ERROR: turntable encoder misaligned!!");
|
||
15 | else if(e==ENCODER_DATA_NOT_READY) |
||
16 | usb_puts("# ERROR: turntable encoder data not ready!!");
|
||
17 | else
|
||
18 | usb_puts("# Turntable encoder initialized");
|
||
19 | 1283 | bneuman | |
20 | motors_init(); |
||
21 | 1183 | deffi | } |
22 | |||
23 | 1255 | bneuman | void turntable_rotate_to_position (int16_t position)
|
24 | 1183 | deffi | { |
25 | 1283 | bneuman | uint16_t turntable; |
26 | |||
27 | 1255 | bneuman | usb_puts ("# Turntable rotating to ");
|
28 | usb_puti (position); |
||
29 | usb_puts (NL); |
||
30 | 1183 | deffi | |
31 | 1283 | bneuman | //TODO: p control
|
32 | //TODO: proper direction
|
||
33 | motor1_set(1, 180); |
||
34 | |||
35 | while((turntable = turntable_get_position()) <= position)
|
||
36 | { |
||
37 | delay_ms(1);
|
||
38 | usb_puti(turntable); |
||
39 | usb_puts(NL); |
||
40 | |||
41 | if(turntable >= 1024) |
||
42 | { |
||
43 | usb_puts("# ERROR: magnetic encoder error!" NL);
|
||
44 | break;
|
||
45 | } |
||
46 | } |
||
47 | |||
48 | motor1_set(1, 0); |
||
49 | 1183 | deffi | |
50 | 1255 | bneuman | usb_puts ("# Turntable position reached" NL);
|
51 | 1183 | deffi | } |
52 | |||
53 | 1244 | deffi | uint16_t turntable_get_position (void)
|
54 | { |
||
55 | 1255 | bneuman | //TODO: convert units
|
56 | return encoder_read(RIGHT);
|
||
57 | 1244 | deffi | } |