Project

General

Profile

Revision 1354

Added by Chris Mar almost 15 years ago

adding keyboard remote control for testing...still in progress.

View differences:

joystick.c
29 29
#define MOVED_Y_CENTER            (1<<8)
30 30
#define MOVED_DOWN                (1<<9)
31 31

  
32
/* Command Types */
33
#define CNTL_FORWARD 'f'
34
#define CNTL_STOP    's'
35
#define CNTL_BACK    'b'
36
#define CNTL_LEFT    'l'
37
#define CNTL_RIGHT   'r'
38
#define CNTL_BUZZ0   't'
39
#define CNTL_BUZZ1   'u'
40

  
41
#define WL_CNTL_GROUP 4
42

  
32 43
int joystick_status (void);
33 44
int joystick_change (int old, int new);
34 45

  
35
PacketGroupHandler cntlHandler = {4, NULL, NULL, NULL, NULL};
46
PacketGroupHandler cntlHandler = {WL_CNTL_GROUP, NULL, NULL, NULL, NULL};
36 47

  
37 48
int main (void) {
38
  dragonfly_init(SERIAL | USB | COMM | ORB | ANALOG);
49
  	dragonfly_init(SERIAL | USB | COMM | ORB | ANALOG);
39 50
	ADCSRA = _BV(ADEN) | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0);
40
  //xbee_init();
41
  wl_init();
42
  wl_register_packet_group(&cntlHandler);
51
  	wl_init();
52
  	wl_register_packet_group(&cntlHandler);
43 53

  
44
  orb_set_color(BLUE);
54
  	orb_set_color(BLUE);
45 55
  
46
  int change;
47
  int last_status = 0; 
48
  int cur_status = 0;
56
  	int change;
57
  	int last_status = 0; 
58
  	int cur_status = 0;
49 59
  
50
  while (1) {
51
    last_status = cur_status;
52
    cur_status = joystick_status();
53
    change = joystick_change(last_status, cur_status);
54
    
55
/*    char buf[100];
56
    sprintf(buf, "status: %d\n", cur_status);
57
    usb_puts(buf);
58
*/ 
59
    if (change & MOVED_UP) {
60
      orb_set_color(GREEN);
61
      //xbee_putc('f');
62
      wl_send_global_packet(4, 'f', NULL, 0, 0);
63
      usb_putc('f');
64
    }
65
    if (change & MOVED_Y_CENTER) {
66
      orb_set_color(RED);
67
      //xbee_putc('s');
68
      wl_send_global_packet(4, 's', NULL, 0, 0);
69
      usb_putc('s');
70
    }
71
    if (change & MOVED_DOWN) {
72
      orb_set_color(BLUE);
73
      //xbee_putc('b');
74
      wl_send_global_packet(4, 'b', NULL, 0, 0);
75
      usb_putc('b');
76
    }
77
    if (change & MOVED_LEFT) {
78
      orb_set_color(ORANGE);
79
      //xbee_putc('l');
80
      wl_send_global_packet(4, 'l', NULL, 0, 0);
81
      usb_putc('l');
82
    }
83
    if (change & MOVED_X_CENTER) {
84
      orb_set_color(RED);
85
      //xbee_putc('s');
86
      wl_send_global_packet(4, 's', NULL, 0, 0);
87
      usb_putc('s');
88
    }
89
    if (change & MOVED_RIGHT) {
90
      orb_set_color(YELLOW);
91
      //xbee_putc('r');
92
      wl_send_global_packet(4, 'r', NULL, 0, 0);
93
      usb_putc('r');
94
    }
95
    if (change & TRIGGER_PRESSED) {
96
      orb_set_color(PURPLE);
97
      //xbee_putc('t');
98
      wl_send_global_packet(4, 't', NULL, 0, 0);
99
    }
100
    if (change & BUTTON_PRESSED) {
101
      orb_set_color(YELLOW);
102
      //xbee_putc('u');
103
      wl_send_global_packet(4, 's', NULL, 0, 0);
104
    }
105
    delay_ms(100);
106
  }
60
	while (1) {
61
		last_status = cur_status;
62
		cur_status = joystick_status();
63
		change = joystick_change(last_status, cur_status);
64

  
65
		if (change & MOVED_UP) {
66
			orb_set_color(GREEN);
67
			wl_send_global_packet(4, CNTL_FORWARD, NULL, 0, 0);
68
		}
69
		if (change & MOVED_Y_CENTER) {
70
			orb_set_color(RED);
71
			wl_send_global_packet(4, CNTL_STOP, NULL, 0, 0);
72
		}
73
		if (change & MOVED_DOWN) {
74
			orb_set_color(BLUE);
75
			wl_send_global_packet(4, CNTL_BACK, NULL, 0, 0);
76
		}
77
		if (change & MOVED_LEFT) {
78
			orb_set_color(ORANGE);
79
			wl_send_global_packet(4, CNTL_LEFT, NULL, 0, 0);
80
		}
81
		if (change & MOVED_X_CENTER) {
82
			orb_set_color(RED);
83
			wl_send_global_packet(4, CNTL_STOP, NULL, 0, 0);
84
		}
85
		if (change & MOVED_RIGHT) {
86
			orb_set_color(YELLOW);
87
			wl_send_global_packet(4, CNTL_RIGHT, NULL, 0, 0);
88
		}
89
		if (change & TRIGGER_PRESSED) {
90
			orb_set_color(PURPLE);
91
			wl_send_global_packet(4, CNTL_BUZZ0, NULL, 0, 0);
92
		}
93
		if (change & BUTTON_PRESSED) {
94
			orb_set_color(YELLOW);
95
			wl_send_global_packet(4, CNTL_STOP, NULL, 0, 0);
96
		}
97
		delay_ms(100);
98
	}
107 99
  
108 100
}
109 101

  
110 102
int joystick_change (int old, int new) {
111
  int trigger_change = 0;
112
  int button_change = 0;
113
  int x_change = 0;
114
  int y_change = 0;
115
  /* Check for trigger change */
116
  if ((old & TRIGGER_DOWN) && (new & TRIGGER_UP))
117
    trigger_change = TRIGGER_RELEASED;
118
  if ((old & TRIGGER_UP) && (new & TRIGGER_DOWN)) 
119
    trigger_change = TRIGGER_PRESSED;
120
  /* Check for button change */
121
  if ((old & BUTTON_DOWN) && (new & BUTTON_UP))
122
    button_change = BUTTON_RELEASED;
123
  if ((old & BUTTON_UP) && (new & BUTTON_DOWN))
124
    button_change = BUTTON_PRESSED;
125
  /* Check for X change */
126
  if ((old & X_CENTER) && (new & X_RIGHT))
127
    x_change = MOVED_RIGHT;
128
  if ((old & X_CENTER) && (new & X_LEFT))
129
    x_change = MOVED_LEFT;
130
  if (!(old & X_CENTER) && (new & X_CENTER))
131
    x_change = MOVED_X_CENTER;
132
  /* Check for Y change */
133
  if ((old & Y_CENTER) && (new & Y_UP))
134
    y_change = MOVED_UP;
135
  if ((old & Y_CENTER) && (new & Y_DOWN))
136
    y_change = MOVED_DOWN;
137
  if (!(old & Y_CENTER) && (new & Y_CENTER))
138
    y_change = MOVED_Y_CENTER;
139
  return trigger_change | button_change | x_change | y_change;
103
	int trigger_change = 0;
104
	int button_change = 0;
105
	int x_change = 0;
106
	int y_change = 0;
107
	/* Check for trigger change */
108
	if ((old & TRIGGER_DOWN) && (new & TRIGGER_UP))
109
		trigger_change = TRIGGER_RELEASED;
110
	if ((old & TRIGGER_UP) && (new & TRIGGER_DOWN)) 
111
		trigger_change = TRIGGER_PRESSED;
112
	/* Check for button change */
113
	if ((old & BUTTON_DOWN) && (new & BUTTON_UP))
114
		button_change = BUTTON_RELEASED;
115
	if ((old & BUTTON_UP) && (new & BUTTON_DOWN))
116
		button_change = BUTTON_PRESSED;
117
	/* Check for X change */
118
	if ((old & X_CENTER) && (new & X_RIGHT))
119
		x_change = MOVED_RIGHT;
120
	if ((old & X_CENTER) && (new & X_LEFT))
121
		x_change = MOVED_LEFT;
122
	if (!(old & X_CENTER) && (new & X_CENTER))
123
		x_change = MOVED_X_CENTER;
124
	/* Check for Y change */
125
	if ((old & Y_CENTER) && (new & Y_UP))
126
		y_change = MOVED_UP;
127
	if ((old & Y_CENTER) && (new & Y_DOWN))
128
		y_change = MOVED_DOWN;
129
	if (!(old & Y_CENTER) && (new & Y_CENTER))
130
		y_change = MOVED_Y_CENTER;
131
	return trigger_change | button_change | x_change | y_change;
140 132
}
141 133

  
142 134
/**
......
150 142
	int y_status = 0;
151 143
	int xval, yval;
152 144
    
153
  if (analog_get8(AN0) > 200)
154
    trigger_status = TRIGGER_DOWN;
155
  else
156
    trigger_status = TRIGGER_UP;
157
    
158
  if (analog_get8(AN1) > 200)
159
    button_status = BUTTON_DOWN;
160
  else
161
    button_status = BUTTON_UP;
162
  
163
  xval = analog_get8(AN4); // actually AN6, AN7 for connection
164
  yval = analog_get8(AN5);
165
  
166
  if (xval > 150)
167
    x_status = X_LEFT;
168
  else if (xval < 75)
169
    x_status = X_RIGHT;
170
  else
171
    x_status = X_CENTER;
172
  
173
  if (yval > 150)
174
    y_status = Y_UP;
175
  else if (yval < 75)
176
    y_status = Y_DOWN;
177
  else
178
    y_status = Y_CENTER;
145
	if (analog_get8(AN0) > 200)
146
		trigger_status = TRIGGER_DOWN;
147
	else
148
		trigger_status = TRIGGER_UP;
179 149

  
150
	if (analog_get8(AN1) > 200)
151
		button_status = BUTTON_DOWN;
152
	else
153
		button_status = BUTTON_UP;
180 154

  
181
  return trigger_status | button_status | x_status | y_status;
155
	xval = analog_get8(AN4); // actually AN6, AN7 for connection
156
	yval = analog_get8(AN5);
157

  
158
	if (xval > 150)
159
		x_status = X_LEFT;
160
	else if (xval < 75)
161
		x_status = X_RIGHT;
162
	else
163
		x_status = X_CENTER;
164

  
165
	if (yval > 150)
166
		y_status = Y_UP;
167
	else if (yval < 75)
168
		y_status = Y_DOWN;
169
	else
170
		y_status = Y_CENTER;
171

  
172

  
173
	return trigger_status | button_status | x_status | y_status;
182 174
}
183 175

  

Also available in: Unified diff