hi Jordi,
ich habe nun mit dem code etwas "herumgespielt", es funktioniert bei mir (messung und servo auch):
ich habe den code nach meinem verständnis angepasst, weil ich ein paar sachen in Deinem code nicht verstanden habe:Code:#include "RP6ControlLib.h" #include "RP6I2CmasterTWI.h" #include "RP6Control_MultiIOLib.h" #include "RP6Control_I2CMasterLib.h" #include "RP6Control_MultiIO.h" #include "RP6Control_LFSBumperLib.h" #include "RP6Control_OrientationLib.h" #include "RP6Stopwatch0Lib.h" #include "RP6ControlServoLib.h" #include "standard.h" #define I2C_RP6_BASE_ADR 10 uint16_t servopos, range; //ULTRASONIC FUNCTIONS ####################################### void task_US_SW() { DDRC |= IO_PC6; // IO_PC6 Ausgang PORTC |= (1<<PORTC6); // IO_PC6 high IO_PC6; _delay_us(10); // 10uS warten PORTC &= (0<<PORTC6); // IO_PC6 low ~IO_PC6; DDRC &= ~IO_PC5; // IO_PC5 Eingang while(!(PINC & IO_PC5)); // Warten bis steigende Flanke an IO_PC5 setStopwatch01(0); while(PINC & IO_PC5); // Warten bis fallende Flanke an IO_PC5 range = getStopwatch01() * 1.67; // Wert der Stoppuhr * 1,67 = Abstand in cm. } void displayData() { writeString_P("Abstand:"); writeInteger(range, DEC); writeString_P(" cm\n"); //sound(170,40,0); } //END OF ULTRASONIC FUNCTIONS ################################ int main(void) { initRP6Control(); multiio_init(); initLCD(); setLEDs(0b111111); mSleep(500); setLEDs(0b000000); I2CTWI_initMaster(100); I2CTWI_setTransmissionErrorHandler(I2C_transmissionError); showScreenLCD(" RP6Control M32", " hc-sr04 plus servo"," jordi","PC5 und PC6"); mSleep(1500); clearLCD(); setServoPower(1); PCA9685_init(50); servopos = (SERVO1_LT); startStopwatch01(); while(true) { PCA9685_set(1, servopos); servopos += 5; mSleep(2000); if (servopos > (SERVO1_RT)) servopos = (SERVO1_LT); task_US_SW(); displayData(); } return 0; }
- die funktion displayData(range) innerhalb der messfunktion - warum?
- die variablen r und range - warum zwei, warum innerhalb der funktion deklariert/definiert?
die messwerte, die ich bekomme sind nachvollziehbar, das einzige was mich noch stört ist das verhalten meines servos: es kommen erstmal 4 messwerte bevor die erste servobewegung stattfindet. Verstehe ich nicht, liegt aber nicht an Deinem, sondern an meinem code ...







					
					
					
						
Zitieren
			

Lesezeichen