dass habe ich schon probiert, es kommt aber
warning: format '%f' expects type 'double', but argument 3 has type 'float'
Ich bin mir aber sich, dass shoulder_pos float ist. Wenn ich schreibe
Code:
	uint8_t shoulder_to_go = (uint8_t)shoulder_pos;
	uint8_t elbow_to_go = (uint8_t)elbow_pos;
bleibt shoulder_pos ja float und wird nocht zum uint8_t oder?

hier mal das, was evtl. wichtig ist:
Code:
volatile uint8_t servo_flag = 0;
volatile uint8_t recalc_flag = 1;

volatile float shoulder_pos = 127.0;
volatile uint8_t shoulder_dest = 255;
volatile float shoulder_step = 0;

volatile float elbow_pos = 127.0;
volatile uint8_t elbow_dest = 1;
volatile float elbow_step = 0;

int main (void) {

        /* UART AN UND TIMEREINSTELLEN ... */

       sei();


	while(1)
	{
		if(recalc_flag == 1) {
			calc_steps();
		}
		if(servo_flag == 1) {
			keep_moving();
		}
	}
	return 0;
}

void keep_moving() {
	cli();

	//NEUE POSITIONEN AUSRECHNE
	shoulder_pos = shoulder_pos + shoulder_step;
	elbow_pos = elbow_pos + elbow_step;

	uint8_t shoulder_to_go = (uint8_t)shoulder_pos;
	uint8_t elbow_to_go = (uint8_t)elbow_pos;


        //AUSGABE
	char s_pre[] = "Shoulder: ";
	char str[10];
	sprintf (str, "%f", shoulder_pos);
	uart_puts(s_pre);
	uart_puts(str);
	uart_puts("\n\r");

	//WENN DIE POSITIONEN GERUNDET ÜBEREINSTIMMEN
	//NEUBERECHNUNG DER STEPS ERLAUBEN UND NEUES ZIEL FÜR ELBOW SETZEN
	if(shoulder_pos == shoulder_dest && elbow_pos == elbow_dest) {
		recalc_flag = 1;
		uart_puts("ERREICHT!!!!!!!!!!!");
	} else {
		recalc_flag = 0;
	}

	servo_flag = 0;
	sei();
}


void calc_steps(void) {
	//BERECHNEN WIE VIEL SICH DIE Servos BEWEGEN MÜSSEN*
	uint16_t shoulder_to_go = shoulder_dest - shoulder_pos;
	uint16_t elbow_to_go = elbow_dest - elbow_pos;

	//HIER ALS ABSOLUTE WERTE
	int16_t shoulder_abs = abs(shoulder_to_go);
	int16_t elbow_abs = abs(elbow_to_go);

	//STEP ERSTMAL AUF +/- 1 SETZEN, JE NACH RICHTUNG
	elbow_step = signum(elbow_to_go);
	shoulder_step = signum(shoulder_to_go);

	
	if(elbow_abs < shoulder_abs) {
		elbow_step = 1 * signum(elbow_to_go);
		shoulder_step = (shoulder_abs / elbow_abs) * signum(shoulder_to_go);
	}
	if(elbow_abs > shoulder_abs) {
		shoulder_step = 1 * signum(shoulder_to_go);
		elbow_step = elbow_abs / shoulder_abs * signum(shoulder_to_go);
	}

}

SIGNAL (SIG_OVERFLOW0){
	servo_flag = 1;
}
mfg
jagdfalke