Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 1465 → Rev 1475

/branches/V0.76g-acid/servoboard/uart.c
10,9 → 10,8
uint8_t rx_buffer[RX_BUFFER_SZ];
//uint8_t tx_buffer[TX_BUFFER_SZ];
uint8_t rx_pos, tx_pos;
uint8_t current_servo = 0;
uint8_t current_servo = 1;
 
 
void uart_init() {
 
rx_pos = 0;
32,24 → 31,29
 
}
 
void display_cur_servo(uint8_t i) {
printf("SERVO %d NEUTRAL %d LIMIT %d-%d\n", i + 1, pwm_neutral_position[i], (pwm_limit[i] & 0xff), (pwm_limit[i] >> 8));
}
 
 
ISR(USART_RXC_vect) {
 
uint8_t i = UDR;
 
if (rx_pos < RX_BUFFER_SZ) {
 
uint8_t i = UDR;
 
if (i == '+') {
if (pwm_neutral_position[current_servo - 1] < 255) {
pwm_neutral_position[current_servo - 1]++;
if (i == '+' || i == '-') {
if (i == '+') {
if (pwm_neutral_position[current_servo] < 255) {
pwm_neutral_position[current_servo]++;
}
} else if (i == '-') {
if (pwm_neutral_position[current_servo] > 0) {
pwm_neutral_position[current_servo]--;
}
}
printf("SERVO %d VALUE %d\n", current_servo, pwm_neutral_position[current_servo - 1]);
display_cur_servo(current_servo);
return;
} else if (i == '-') {
if (pwm_neutral_position[current_servo - 1] > 0) {
pwm_neutral_position[current_servo - 1]--;
}
printf("SERVO %d VALUE %d\n", current_servo, pwm_neutral_position[current_servo - 1]);
return;
}
 
uart_putchar(i);
62,34 → 66,26
rx_pos = 0;
 
if (!strcasecmp(rx_buffer, "HELP")) {
printf("DISPLAY Display servo settings\n"
"EXPORT Export srvo settings\n"
"SET s=n[,l,u] Set servo settings\n"
" s = servo number (1-6)\n"
" n = neutral position (0-255)\n"
" l = lower limit (0-255)\n"
" u = upper limit (0-255)\n"
"CUR n Set current servo. + = increase, - = decrease value\n"
"LOAD Load settings from eeprom\n"
"SAVE Write settings to eeprom\n");
printf("DISPLAY Display servo settings\n"
"SET s=n[,l,u] Set servo settings\n"
" s = servo number (1-6)\n"
" n = neutral position (0-255)\n"
" l = lower limit (0-255)\n"
" u = upper limit (0-255)\n"
"CUR n Set current servo. + = increase, - = decrease value\n"
"SETLL Set lower limit to servo position\n"
"SETUL Set upper limit\n"
"LOAD Load settings from eeprom\n"
"SAVE Write settings to eeprom\n");
} else if (!strcasecmp(rx_buffer, "DISPLAY")) {
for(i = 0; i < 6; i++) {
printf("SERVO %d, NEUTRAL %d, LIMIT %d-%d\n",
(i + 1),
(pwm_neutral_position[i]),
(pwm_limit[i] & 0xff),
(pwm_limit[i] >> 8)
);
display_cur_servo(i);
}
} else if (!strcasecmp(rx_buffer, "EXPORT")) {
for(i = 0; i < 6; i++) {
printf("SET %d=%d,%d,%d\n",
(i + 1),
(pwm_neutral_position[i]),
(pwm_limit[i] & 0xff),
(pwm_limit[i] >> 8)
);
}
#if DEBUG_SIGNAL
} else if (!strcasecmp(rx_buffer, "TV")) {
display_values = !display_values;
printf("\n");
#endif
} else if (!strcasecmp(rx_buffer, "LOAD")) {
eeprom_init();
} else if (!strcasecmp(rx_buffer, "SAVE")) {
98,11 → 94,11
char *s, *t;
s = strtok_r(rx_buffer, " ", &t);
if (s) {
s = strtok_r(NULL, "", &t);
s = strtok_r(NULL, ",", &t);
if (s) {
i = atoi(s) + 1;
i = atoi(s);
if (i >= 1 && i <= 6) {
current_servo = i;
current_servo = i - 1;
printf("CURRENT SERVO %d\n", i);
} else {
printf("Invalid servo\n");
109,6 → 105,24
}
}
}
} else if (!strcasecmp(rx_buffer, "SETLL")) {
uint8_t l, h;
l = pwm_neutral_position[current_servo];
h = (pwm_limit[current_servo] >> 8);
if (h < l) {
h = l;
}
pwm_limit[current_servo] = (h << 8) | l;
display_cur_servo(current_servo);
} else if (!strcasecmp(rx_buffer, "SETUL")) {
uint8_t l, h;
h = pwm_neutral_position[current_servo];
l = (pwm_limit[current_servo] & 0xff);
if (l > h) {
l = h;
}
pwm_limit[current_servo] = (h << 8) | l;
display_cur_servo(current_servo);
} else if (!strncasecmp(rx_buffer, "SET ", 4)) {
char *s, *t;
uint8_t servo;
164,6 → 178,7
} else {
 
printf("Receive buffer full.\n");
rx_pos = 0;
 
}