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.