Hi, ich habe jetzt mal folgendes geschrieben:
Code:
#define F_CPU 8000000
#include <avr/delay.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include "uart.h"
#include "servo.h"
volatile uint8_t servo_flag = 0;
SIGNAL (SIG_OVERFLOW0)
{
servo_flag = 1;
}
int main (void) {
uart_init(1, 0);
sei();
TCCR0 |= (1<<CS02) | (1<<CS00);
TIMSK |= (1<<TOIE0);
while(1)
{
if(servo_flag == 1) {
cli();
uint8_t move_made = 0; // 1 wenn eine Änderung gemacht wurde
int8_t step = +1;
if(shoulder_pos != shoulder_dest) {
if(shoulder_pos > shoulder_dest) { step = -1; }
shoulder_pos += step;
move(1, shoulder_pos); // hier werden sie 2
move(2, shoulder_pos); // 400 Ncm Servos gleichtzeitig bewegt
move_made = 1;
}
if(elbow_pos != elbow_dest) {
step = +1;
if(elbow_pos > elbow_dest) { step = -1; }
elbow_pos += step;
move(3, elbow_pos);
move_made = 1;
}
if(wrist_pos != wrist_dest) {
step = +1;
if(wrist_pos > wrist_dest) { step = -1; }
wrist_pos += step;
move(4, wrist_pos);
move_made = 1;
}
if(gripper_pos != gripper_dest) {
step = +1;
if(gripper_pos > gripper_dest) { step = -1; }
gripper_pos += step;
move(5, gripper_pos);
move_made = 1;
}
sei();
}
}
return 0;
}
servo.h
Code:
volatile uint8_t shoulder_pos = 127;
volatile uint8_t elbow_pos = 127;
volatile uint8_t wrist_pos = 127;
volatile uint8_t gripper_pos = 127;
volatile uint8_t shoulder_dest = 255;
volatile uint8_t elbow_dest = 1;
volatile uint8_t wrist_dest = 1;
volatile uint8_t gripper_dest = 80;
void move(int servo, int pos)
{
loop_until_bit_is_set(UCSRA, UDRE);
UDR = '#';
loop_until_bit_is_set(UCSRA, UDRE);
UDR = 's';
loop_until_bit_is_set(UCSRA, UDRE);
UDR = servo;
loop_until_bit_is_set(UCSRA, UDRE);
UDR = pos;
}
Ist der Code so in Ordnung? Bewegen tun sich die 4 "Gelenke" schon mal gleichzeitig. Das mit der Steuerung der Geschwindigkeit verstehe ich nicht. Ich glaube aber so wie ich den Code jetzt geschrieben habe kann man die Geschwindigkeit nicht mit berücksichtigen. Was hier jetzt lustig ist: Wenn ein Servo noch bewegen muss wenn die anderen schon fertig sind ist er schneller als wenn noch einer mitlaufen muss. (Das stört irgendwie mein ästhetisches Empfinden )
mfg
jagdfalke
Lesezeichen