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; |
|
} |
|