Sorry, gab heute ziemlich viel Wirbel wegen der neuen FreeIMU. Da ich neben warthox und Paul wohl der einzige bin, der hier ein Sample bekommen hat, habe ich mich natürlich auch verpflichtet gefühlt, das Ding zum Laufen zu kriegen um Fabio ein Feedback zu geben.
Ich hab Dir mal den Code rausgesucht. Je nach MultiWii Version (V1.8_patch2 oder V1.9) kann unter void setup() oder void initOutput() noch mehr stehen. Es ist jeweils der Teil bis zu der benannten Zeile zu ersetzen, unabhängig, ob danach noch anderes folgt.
Teil 1) In MultiWii_1_8_patch2 die drei untenstehenden Zeilen nach oben holen, so dass sie unter #define CAMROLL stehen:
Code:
/*********** RC alias *****************/
#define ROLL 0
#define PITCH 1
#define YAW 2
#define THROTTLE 3
#define AUX1 4
#define AUX2 5
#define CAMPITCH 6
#define CAMROLL 7
static int16_t rcData[8]; // interval [1000;2000]
#define MINCHECK 1100
#define MAXCHECK 1900
Teil 2) In MultiWii_1_8_patch2 im Bereich void setup() den oberen Teil bis initSensors(); ersetzen:
Code:
void setup() {
LEDPIN_PINMODE
POWERPIN_PINMODE
BUZZERPIN_PINMODE
STABLEPIN_PINMODE
POWERPIN_OFF
configureReceiver();
delay(200);
initOutput();
Serial.begin(SERIAL_COM_SPEED);
readEEPROM();
checkFirstTime();
initSensors();
previousTime = micros();
#if defined(GIMBAL) || defined(FLYING_WING)
calibratingA = 400;
#endif
calibratingG = 400;
#if defined(POWERMETER)
for(uint8_t i=0;i<=PMOTOR_SUM;i++)
pMeter[i]=0;
#endif
}
Teil 3) In Output den kompletten Bereich von void initOutput() bis zu #if defined(SERVO) ersetzen:
Code:
void initOutput() {
for(uint8_t i=0;i<NUMBER_MOTOR;i++)
pinMode(PWM_PIN[i],OUTPUT);
for(int i=0;i<4;i++) //computeRC will take the average of last four readings, initial value is set to 1500
computeRC();
if (MCUSR & 0x01) //Only if "Power On Reset"
{
if(rcData[THROTTLE] > MAXCHECK)
{
writeAllMotors(2000);
delay(300);
while(rcData[THROTTLE] > MAXCHECK)
computeRC();
writeAllMotors(MINCOMMAND);
delay(300);
}
}
else
{
writeAllMotors(MINCOMMAND);
delay(300);
}
MCUSR &= ~(0x01);
#if defined(SERVO)
initializeServo();
#elif (NUMBER_MOTOR == 6) && defined(PROMINI)
initializeSoftPWM();
#endif
}
Anschließend kannst Du alle ESCs zusammen wie gewohnt anlernen.
Deine Frau braucht übrigens keine Angst vor einer Kurzhaarfrisur Eures Flokati haben: Ein Motor hätte niemals die Kraft, auf Drehzahl zu kommen, wenn der Prop im Teppich hängt. Er würde einfach stehen bleiben und das ESC "sollte" abschalten. In Klammern steht das Wort deshalb, weil manche ESCs so schlecht sind, dass die Abschaltung erst begreift, was sie tun soll, wenn der ESC schon durchgebrannt ist. Du hast also im schlimmsten Fall 4 Brandlöcher im Flokati.