Hallo,
vielen Dank für Eure Hilfe. Jetzt funktioniert alles wie es soll. Ich habe die Stopwatch- und die Servo-Lib aus diesem Forum und Code für den Sensor aus dem holländischen Arexx-Forum verwendet und angepasst. Als nächstes werde ich mich mit der Kommunikation zwischen RP6 Base und RP6 Control befassen.
Hier ist der Code:
Und hier sind meine Einstellungen für den Servo aus der RP6ControlServoLib.h:Code:#include "./RP6Lib/RP6control/RP6ControlServoLib.h" #include "./RP6Lib/RP6common/RP6Stopwatch0Lib.h" #include "RP6ControlUltrasonic.h" volatile uint16_t pos = 0; //ULTRASONIC FUNCTIONS ####################################### void task_US_SW() { uint16_t range; //MEASURING DDRC |= IO_PC3; // IO_PC3 Ausgang PORTC |= (1<<PORTC3); // IO_PC3 high IO_PC3; _delay_us(10); // 10uS warten PORTC &= (0<<PORTC3); // IO_PC3 low ~IO_PC3; DDRC &= ~IO_PC3; // IO_PC3 Eingang while(!(PINC & IO_PC3)); // Warten bis steigende Flanke an IO_PC3 setStopwatch01(0); while(PINC & IO_PC3); // Warten bis fallende Flanke an IO_PC3 range = getStopwatch01() * 1.67; // Wert der Stoppuhr * 1,67 = Abstand in cm. displayData(range); //MEASURING END } void displayData(uint16_t r) { writeString_P("Abstand:"); writeInteger(r, DEC); writeString_P(" cm\n"); sound(170,40,0); } //END OF ULTRASONIC FUNCTIONS ################################ int main(void) { initRP6Control(); setLEDs(0b111111); mSleep(500); setLEDs(0b000000); initSERVO(SERVO1); startStopwatch2(); startStopwatch01(); while(true) { if (getStopwatch2() > 2000) { // Alle 2000ms Servo drehen if (pos == 0) { servo1_position = 0; } if (pos == 1) { servo1_position = MIDDLE_POSITION; } if (pos == 2) { servo1_position = RIGHT_TOUCH; } if (pos == 3) { servo1_position = MIDDLE_POSITION; } pos++; if (pos > 3) {pos = 0;} setStopwatch2(0); task_US_SW(); } task_SERVO(); mSleep(3); } return 0; }
Code:#define LEFT_TOUCH 56 #define RIGHT_TOUCH 42 #define MIDDLE_POSITION (RIGHT_TOUCH / 2) #define PULSE_REPETITION 17 #define F_TIMER1 50000







Zitieren


Lesezeichen