Hallo
Das 'p' steht für Pause:
Eine kleine Pause kann man immer mal brauchen. Die Einheit ist wohl 20ms, dann sollte pause(50) eine Sekunde (blockierend) verzögern. 'p' ist aber auch ein Servoimpulszyklus, vielleicht kann man das später mal verwenden...Code:volatile uint16_t p=0; void pause(uint16_t p_dauer) { p=p_dauer; while(p); }
Der Vollständigkeit halber hier noch mein "Arbeitscode" (=ungeputzt und nicht kommentiert):
Die "walkerlib" soll mal irgendwann (falls ich das Projekt fertigstellen werde;) die Motorfunktionen MotorSpeed() und MotorDir() der orginalen asuro-Library ersetzen...Code://#include "../inc/walkerlib.h" //#include "../inc/walkerlib.c" #include <avr/io.h> #include <avr/interrupt.h> #define servo_init {DDRB|=0b11011; DDRC|=0b11; DDRD|=0b11000;} #define servo0_on PORTC |= (1<<PC1) #define servo0_off PORTC &= ~(1<<PC1) #define servo1_on PORTC |= (1<<PC0) #define servo1_off PORTC &= ~(1<<PC0) #define servo2_on PORTD |= (1<<PD4) #define servo2_off PORTD &= ~(1<<PD4) #define servo3_on PORTD |= (1<<PD5) #define servo3_off PORTD &= ~(1<<PD5) #define servo4_on PORTB |= (1<<PB1) #define servo4_off PORTB &= ~(1<<PB1) #define servo5_on PORTB |= (1<<PB2) #define servo5_off PORTB &= ~(1<<PB2) #define servo6_on PORTB |= (1<<PB4) #define servo6_off PORTB &= ~(1<<PB4) #define servo7_on PORTB |= (1<<PB5) #define servo7_off PORTB &= ~(1<<PB5) #define servo_stop {servo0_off; servo1_off; servo2_off; servo3_off; \ servo4_off; servo5_off; servo6_off; servo7_off;} uint8_t vla, vli, vra, vri, hla, hli, hra, hri; volatile uint16_t p=0; void pause(uint16_t p_dauer) { p=p_dauer; while(p); } int main(void) { TIMSK |= (1<<OCIE2); TCCR2 = (1<<WGM21) | (1<<CS20); OCR2 = 80; servo_init; servo_stop; sei(); vla=125; vli=125; vra=125; vri=125; hla=125; hli=125; hra=125; hri=125; pause(50); while(1) { vla=hla=vra=hra=120; // heben/senken pause(10); vli=vri=110; // gehen hli=hri=140; pause(15); vla=hla=vra=hra=135; // heben/senken pause(10); vli=vri=140; // gehen hli=hri=110; pause(15); } return(0); } ISR(TIMER2_COMP_vect) { static uint16_t count=0; static uint16_t count2=1000; static uint8_t impuls=0, servo=0; static uint8_t impuls2=0, servo2=0; if(!impuls) { if(servo == 0) { impuls=hra; servo0_on; } if(servo == 1) { impuls=hri; servo0_off; servo1_on; } if(servo == 2) { impuls=vra; servo1_off; servo2_on; } if(servo == 3) { impuls=vri; servo2_off; servo3_on; } if(servo == 4) servo3_off; if(servo < 5) servo++; } else impuls--; if(!impuls2) { if(servo2 == 4) { impuls2=hla; servo4_on; } if(servo2 == 5) { impuls2=hli; servo4_off; servo5_on; } if(servo2 == 6) { impuls2=vla; servo5_off; servo6_on; } if(servo2 == 7) { impuls2=vli; servo6_off; servo7_on; } if(servo2 == 8) servo7_off; if(servo2 < 9) servo2++; } else impuls2--; if(count < 2000) count++; else { count=impuls=servo=0; if(p) p--; } if(count2 < 2000) count2++; else { count2=impuls2=0; servo2=4; } }
Gruß
mic
[Edit]
btw: uint8_t p reicht ja völlig, das sind 5 Sekunden...







Zitieren

Lesezeichen