Hallo Schachti,
ich habe das Sketch ein wenig geändert, damit man alle Regler am Arduino gleichzeitig einlernen kann (hatte ich ca.200 Seiten vorher auch schon mal gepostet). Funtioniert bei mir sehr gut an verschiedenen programierbaren Regelern (HobbyWing, Plush, Mystery Blue) und man kann jederzeit und immer wieder die Regler einlernen (ohne immer wieder ein anderes Sketch aufspielen zu müssen), indem man beim Einstecken des Akkus den Gashebel ganz nach vorne stellt (also, wie wenn man die Regeler einzeln am Empfänger einlernt).
Folgende Änderungen:
Diese drei Zeilen nach oben im Sketch schieben:
Code: Alles auswählen
static int16_t rcData[8] ; 
#define MINCHECK 1100 
#define MAXCHECK 1900 
initializeMotors wie folgt ändern:
Code: Alles auswählen
void initializeMotors() {
  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);
}
In setup die Reihenfolge wie folgt ändern, da ansonsten die Regler zu spät das Vollgas-Signal bekommen:
Code: Alles auswählen
void setup() {
  LEDPIN_PINMODE
  POWERPIN_PINMODE
  BUZZERPIN_PINMODE
  POWERPIN_OFF
  configureReceiver();
  delay(200);
  initializeMotors();
  Serial.begin(SERIAL_COM_SPEED);
  readEEPROM();
  checkFirstTime();
  POWERPIN_ON
  delay(100);
  i2c_init();
  delay(100);
.
.
.
Ich hoffe, das hilft Dir.