Project

General

Profile

Statistics
| Revision:

root / branches / encoders / code / behaviors / spline / slave / slave.c @ 1240

History | View | Annotate | Download (1.89 KB)

1
#include <dragonfly_lib.h>
2
#include <wireless.h>
3

    
4
#define GROUP 1
5
#define MOTOR 0
6
#define ENCODER 1
7

    
8
#define LS 0
9
#define LD 1
10
#define RS 2
11
#define RD 3
12

    
13
#define H0 0
14
#define L0 1
15
#define H1 2
16
#define L1 3
17

    
18
void packet_receive (char type, int source, unsigned char* packet, int length);
19

    
20
PacketGroupHandler packetHandler = {GROUP, NULL, NULL, &packet_receive, NULL};
21

    
22
char buf[32];
23
int count = 0;
24
int left_dir = FORWARD;
25
int right_dir = FORWARD;
26
int left_speed = 0;
27
int right_speed = 0;
28

    
29
/* receive motor speed from master: 
30
 * left_speed left_dir right_speed right_dir
31
 * then sent raw encoder values back to master: 
32
 * high_left low_left high_right low_right 
33
 */
34
void packet_receive (char type, int source, unsigned char* packet, int length) {
35
        if (type != MOTOR) return;
36
        //orb_set_color(WHITE);
37
        left_dir = packet[LD];
38
        left_speed = packet[LS];
39
        right_dir = packet[RD];
40
        right_speed = packet[RS];
41
        sprintf(buf, "Received: %d %d %d %d\n", packet[LS], packet[LD], packet[RS], packet[RD]);
42
        usb_puts(buf);
43
        //motor1_set(packet[LD],packet[LS]);
44
        //motor2_set(packet[RD],packet[RS]);
45
        //orb_set_color(GREEN);
46
}
47

    
48
int main (void) {
49
        dragonfly_init(ALL_ON);
50
        usb_init();
51
        encoders_init();
52
        //usb_puts("xbee id ");
53
        //usb_putc(wl_get_xbee_id());
54
        wl_init();
55

    
56
        wl_register_packet_group(&packetHandler);
57
        //orb_set_color(RED);
58
        //motor1_set(FORWARD,230);
59
        //motor2_set(FORWARD,230);
60

    
61
        while (1) {
62
                int encoder_left = encoder_get_v(LEFT);
63
                int encoder_right = encoder_get_v(RIGHT);
64
                unsigned char encoder[4];
65
                encoder[H0] = (encoder_left >> 8) & 0xFF;
66
                encoder[L0] = (encoder_left) & 0xFF;
67
                encoder[H1] = (encoder_right >> 8) & 0xFF;
68
                encoder[L1] = (encoder_right) & 0xFF;
69
                wl_send_global_packet(GROUP, ENCODER, encoder, 4, 0);
70
                sprintf(buf, "Sent (%d): %d %d\n", count++, encoder_left, encoder_right);
71
                usb_puts(buf);
72

    
73
                wl_do();
74
                motor1_set(left_dir, left_speed);
75
                motor2_set(right_dir, right_speed);
76
                delay_ms(100);
77
        }
78
}
79