我正在使用Arduino Mega工作四轴飞行器。该项目几乎已经完成了#34;准备好进行试飞,但是......
代码运行初始化SD卡(主文件 - test() - 方法),然后重新启动并运行到最后。
由于我的研究,我遇到了重载SRAM的问题(因为我使用了很多字符串而不是char数组),因此我将几乎所有字符串更改为字符数组。但这并没有解决错误!
错误可能出现在主文件中的 startup()和 test()方法中,因为代码在此段中终止。 因为问题可能不在一个代码部分,所以这里是指向整个项目的链接(所有文件): https://www.dropbox.com/s/s6vaoi6gnjgz6ek/MulticopterPro_v0.0.6.rar?dl=0
以下是一些代码: 主文件 - 类启动()
void startup(){
cmd.printMsg(true, msg_startup_start);
motorControl.batteryDisconnect();
test();
// init motor objects
cmd.printMsg(false, msg_motor_initObjects);
m1.init();
m2.init();
m3.init();
m4.init();
cmd.printMsg(true, msg_done);
// motor speed 0% (=OFF)
cmd.printMsg(false, msg_motor_speed_off);
m1.setSpeed(0, false);
m2.setSpeed(0, false);
m3.setSpeed(0, false);
m4.setSpeed(0, false);
cmd.printMsg(true, msg_done);
motorControl.batteryConnect();
// timer (wait or press "O")
unsigned long timerStarted = millis();
const byte secondsRemaining_start = 7;
byte secondsRemaining = secondsRemaining_start;
cmd.printMsg(true, "[INFO] Press {O} [or wait 7 seconds] to continue");
while(cmd.readCmd() != 'O'){
if((millis() - timerStarted) - ((secondsRemaining_start - secondsRemaining) * 1000) >= 1000){
secondsRemaining--;
String msg = "[INFO] Press {O} [or wait ";
msg += secondsRemaining;
if(secondsRemaining > 1) msg += " seconds] to continue";
else msg += " second] to continue";
if(secondsRemaining <= 0) break;
cmd.printMsg(true, msg);
}
}
// motor speed safe val (=-X%)
cmd.printMsg(false, msg_motor_speed_safeVal);
m1.setSpeed(0, true);
m2.setSpeed(0, true);
m3.setSpeed(0, true);
m4.setSpeed(0, true);
cmd.printMsg(true, msg_done);
//Werte aus SD auslesen
//Fehler?
cmd.printMsg(true, msg_startup_end);
}
主文件 - 班级测试()
void test(){
cmd.printMsg(false, "Initializing SDcard... ");
if(sdcard.init()){
cmd.printMsg(true, "done!");
cmd.printMsg(true, "Initializing variables from SDcard");
sdcard.openFile("test.txt", 1);
String fileContent = sdcard.readFile();
// !!! automatisch: !!!
String fileContentLines[2] = {{".RC_receiver#receiver_arm_duration#4000"}, {".RC_receiver#receiver_val#1#-100,100"}};
for(int i = 0; i < sizeof(fileContentLines); i++){
// RC_receiver
if(sdcard.getSectionFromText(fileContentLines[i], 1, '#') == "RC_receiver"){
cmd.printMsg(false, "RC_receiver#");
if(sdcard.getSectionFromText(fileContentLines[i], 2, '#') == "receiver_val"){
cmd.printMsg(false, "receiver_val_");
String channel = sdcard.getSectionFromText(fileContentLines[i], 3, '#');
cmd.printMsg(false, channel);
cmd.printMsg(false, ":");
String values = sdcard.getSectionFromText(fileContentLines[i], 4, '#');
String value_01 = sdcard.getSectionFromText(values, 1, ',');
String value_02 = sdcard.getSectionFromText(values, 2, ',');
//cmd.printMsg(true, strcat(strcat(strcat(strcat("[", value_01), "] - ["), value_02), "]"));
//cmd.printMsg(false, strcat(strcat("Setting receiver_val_", channel), "... "));
if(rc_receiver.setReceiver_val(channel.toInt(), value_01.toInt(), value_02.toInt())){
cmd.printMsg(true, "done!");
} else {
//error - value(s) invalid!!!
cmd.printMsg(true, "failed!");
cmd.printMsg(true, "Variable could not be set -> invalid value(s)?");
}
} else if(sdcard.getSectionFromText(fileContentLines[i], 2, '#') == "receiver_arm_duration"){
cmd.printMsg(false, "receiver_arm_duration: ");
String value = sdcard.getSectionFromText(fileContentLines[i], 3, '#');
//cmd.printMsg(0, true, "ad");
//delay(500);
Serial.println("TEST");
cmd.printMsg(false, "Setting receiver_arm_duration... ");
if(rc_receiver.setReceiver_arm_duration(value.toInt())){
cmd.printMsg(true, "done!");
} else {
//error - value(s) invalid!!!
cmd.printMsg(true, "failed!");
cmd.printMsg(true, "Variable could not be set -> invalid value(s)?");
}
}
}
}
}
else {
cmd.printMsg(true, "failed!");
cmd.printMsg(true, "Failed to initialize SDcard!");
cmd.printMsg(true, "Please insert SD-card and restart Arduino [or press 'O' to continue]");
while(cmd.readCmd() != 'O') ;
cmd.printMsg(true, "Variables couldn't be loaded!");
cmd.printMsg(true, "Variables must be initialized manually!");
}
}
如果我忘了什么 - 告诉我,我会发布它!
我感谢任何帮助!
问候安德烈亚斯