Update Flight Code with Looptime fix

pull/1/head
Mathis et Yohan 2021-12-10 19:18:43 +01:00
rodzic 8b5966b30f
commit ed66f34f2f
1 zmienionych plików z 101 dodań i 56 usunięć

Wyświetl plik

@ -4,7 +4,7 @@
#include <SBUS.h>
#include <EasyBuzzer.h>
#include <Watchdog.h>
#include <PWMServo.h>
#include <Servo.h>
#include <movingAvg.h>
#include <Adafruit_NeoPixel.h>
#include <EEPROM.h>
@ -104,7 +104,7 @@ int timeled = 0;
int lastled = 0;
// MISC //
int buzzer = 2;
int buzzer = 2;
int cam = 23;
int sw = 22;
int crash_count = 0;
@ -150,11 +150,11 @@ int count = 0;
// SERVO /
movingAvg st(5);
PWMServo steer;
PWMServo deploy;
PWMServo left;
PWMServo right;
PWMServo esc;
Servo steer;
Servo deploy;
Servo left;
Servo right;
Servo esc;
float roll_man = 1500;
float pitch_man = 1500;
@ -206,11 +206,19 @@ unsigned long long tgps = 0;
unsigned long long tup = 0;
unsigned long long tdown = 0;
unsigned long t_turn = 0;
unsigned long tlooptime = 0;
unsigned long mes = 0;
unsigned long long reboot_time = 0;
int loop_time = 999;
int loop_time_min_loc = 999;
int loop_time_min_glob = 999;
int loop_time_max_loc = 999;
int loop_time_max_glob = 999;
double loop_time_mean = 999;
int loop_time_count = 0;
int loop_time = 999;
int delaySD = 100; // Datalog
int delayTLM = 1000; // Tlm
@ -221,6 +229,8 @@ Watchdog watchdog;
void setup() {
//eppclear();
pinMode(A17, INPUT);
pinMode(buzzer, OUTPUT);
@ -244,7 +254,7 @@ void setup() {
pitch_steer.begin();
rs.begin();
rc.begin();
mult.begin();
mult.begin();
left.attach(6, 1000, 2000);
right.attach(7, 1000, 2000);
@ -295,20 +305,39 @@ void loop() {
tloop = micros();
sim();
getdata();
datacmpt();
flight_state();
applycmd();
applycmd();
updatecmd(50);
userinter();
loop_time = micros()-tloop;
loop_time = (micros()-tloop);
if (loop_time<150000) {watchdog.reset(); crash_count = 0; }
if (loop_time>150000) {
if (loop_time_count >= 100) {
loop_time_min_glob = loop_time_min_loc;
loop_time_max_glob = loop_time_max_loc;
loop_time_min_loc = 999;
loop_time_max_loc = 999;
loop_time_mean = (micros()-tlooptime)/100;
tlooptime = micros();
loop_time_count = 0;
}
else if (loop_time_count < 100) {
if (loop_time<loop_time_min_loc) {loop_time_min_loc = loop_time; }
if (loop_time>loop_time_max_loc) {loop_time_max_loc = loop_time; }
loop_time_count++;
}
if (loop_time<250000) {watchdog.reset(); crash_count = 0; }
if (loop_time>250000) {
crash_count = (crash_count + 1);
if (crash_count<=15) { watchdog.reset(); }
else {
@ -377,6 +406,7 @@ void datacmpt() {
if (((gps.location.age()) < 999) and (atof(fix_type.value()) == 3)) { gps_ok = true; }
else { gps_ok = false; }
// -------------------------- STUFF DEPENDING ON GPS COURSE OVER GROUND -------------------------- //
// -------------------- Autopilot -------------------- //
@ -536,7 +566,9 @@ void datacmpt() {
char deployed_text[10];
char flight_mode_text[10];
char vbatt_text[10];
char looptime_text[10];
char loopmax_text[10];
char loopmin_text[10];
char loopmean_text[10];
char packet_count_text[10];
char initialised_text[10];
char wing_opened_text[10];
@ -560,8 +592,7 @@ void datacmpt() {
char time_hour[10];
char time_minute[10];
char time_seconde[10];
dtostrf(gps.date.year(), 2, 0, date_year);
dtostrf(gps.date.month(), 1, 0, date_month);
dtostrf(gps.date.day(), 1, 0, date_day);
@ -569,7 +600,7 @@ void datacmpt() {
dtostrf(gps.time.hour(), 1, 0, time_hour);
dtostrf(gps.time.minute(), 1, 0, time_minute);
dtostrf(gps.time.second(), 1, 0, time_seconde);
snprintf(date_time, 100, "%s:%s:%s,%s:%s:%s", date_year, date_month, date_day, time_hour, time_minute, time_seconde);
@ -645,11 +676,13 @@ void datacmpt() {
dtostrf(deployed, 1, 0, deployed_text);
dtostrf(wing_opened, 1, 0, wing_opened_text);
dtostrf(vbatt, 1, 3, vbatt_text);
dtostrf(loop_time, 1, 0, looptime_text);
dtostrf(loop_time_min_glob, 1, 0, loopmin_text);
dtostrf(loop_time_max_glob, 1, 0, loopmax_text);
dtostrf(loop_time_mean, 1, 0, loopmean_text);
dtostrf(packet_count, 1, 0, packet_count_text);
dtostrf(initialised, 1, 0, initialised_text);
snprintf(status_text, 100, "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s", time_text, packet_count_text, flight_mode_text, gps_ok_text, cog_ok_text, failSafe_text, gps_stab_text, baro_stab_text, deployed_text, wing_opened_text, initialised_text, vbatt_text, looptime_text);
snprintf(status_text, 100, "%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s", time_text, packet_count_text, flight_mode_text, gps_ok_text, cog_ok_text, failSafe_text, gps_stab_text, baro_stab_text, deployed_text, wing_opened_text, initialised_text, vbatt_text, loopmin_text, loopmax_text, loopmean_text);
snprintf(mainSD, 340, "%s,%s,%s,%s,%s,%s", status_text, gps_text, baro_text, nav_text, rc_text, servo_text);
@ -682,7 +715,14 @@ void datacmpt() {
tlm = millis();
packet_count = (packet_count +1);
Serial5.println(mainTLM);
Serial.println(mainTLM);
Serial.println(mainTLM);
if (sd_ok == true) {
dataFile = SD.open(namebuff, FILE_WRITE);
if (dataFile) { dataFile.println(mainSD); dataFile.close(); }
else { sd_ok = false; }
}
}
// -------------------------- SD DATALOG -------------------------- //
@ -693,16 +733,15 @@ if (record_home == false) {
if ((millis()-sd)>=delaySD) {
sd = millis();
if (!SD.begin(chipSelect)) { sd_ok = false; }
else {
sd_ok = true;
if (sd_ok == true) {
dataFile = SD.open(namebuff, FILE_WRITE);
if (dataFile) { dataFile.println(mainSD); dataFile.close(); }
else { sd_ok = false; }
}
}
}
}
}
}
@ -712,15 +751,13 @@ else {
if ((millis()-sd)>=delaySD) {
sd = millis();
if (!SD.begin(chipSelect)) { sd_ok = false; }
else {
sd_ok = true;
if (sd_ok == true) {
dataFile = SD.open(namebuff, FILE_WRITE);
if (dataFile) { dataFile.println(mainSD); dataFile.close(); }
else { sd_ok = false; }
}
}
}
}
}
@ -737,11 +774,11 @@ void flight_state() {
Serial5.println(mainTLM);
Serial.println(mainTLM);
if (!SD.begin(chipSelect)) {}
else {
if (sd_ok == true) {
dataFile = SD.open(namebuff, FILE_WRITE);
if (dataFile) { dataFile.println(mainSD); dataFile.close(); }
}
}
prev_mode = flight_mode;
}
@ -958,6 +995,8 @@ void motorised_auto() {
if (channels[6] < 1000) { flight_mode = 8; }
}
//------------------- 10 -------------------//
void motorised_failSafe() {
if (failSafe == false) { flight_mode = 8; }
}
@ -1110,9 +1149,9 @@ if (drop == true) {
if ((millis()-tpwm)>=(1000/a)) {
tpwm = millis();
left.write(map(servo_left,1000,2000,5,175));
right.write(map(servo_right,1000,2000,5,175));
deploy.write(map(servo_deploy,1000,2000,0,180));
left.writeMicroseconds(servo_left);
right.writeMicroseconds(servo_right);
deploy.writeMicroseconds(servo_deploy);
}
}
@ -1122,9 +1161,9 @@ else {
if ((millis()-tpwm)>=(1000/a)) {
tpwm = millis();
left.write(map(servo_left,1000,2000,5,175));
right.write(map(servo_right,1000,2000,5,175));
esc.write(map(servo_esc,1000,2000,0,180));
left.writeMicroseconds(servo_left);
right.writeMicroseconds(servo_right);
esc.writeMicroseconds(servo_esc);
}
}
@ -1147,7 +1186,6 @@ void userinter() {
if ((millis()-t_turn)>t_down) {
Serial.print("test");
t_turn = millis();
EasyBuzzer.singleBeep(tone_turn,10);
}
@ -1332,18 +1370,20 @@ void sendPacket(byte *packet, byte len){
}
void newfile() {
dtostrf(time_number, 1, 0, sdnamebuff);
sprintf(namebuff, "%s.txt", sdnamebuff);
sprintf(namebuff, "%s.txt", sdnamebuff);
if (!SD.begin(chipSelect)) {}
else {
SdFile::dateTimeCallback(dateTime);
dataFile = SD.open(namebuff, FILE_WRITE);
delay(10);
if (dataFile) {
dataFile.println("time (ms), Packet_Count (text), Mode (text), GPS_Ok (text), COG_Ok (text), FailSafe (text), GPS_Stab (text), Baro_Stab (text), Deployed (text), Wing_Opened (text), Initialised (tex), Vbatt (V), Looptime (µS), GPS-date, GPS-time, lat (deg), lon (deg), alt (m), CoG (deg), Speed (m/s), Sat_in_use (text), HDOP (text), Position_Age (text), Fix_type (text), Baro_Alt (m), Vertical_Speed (m/s), Altitude (m), Baro_Weight (text), GPS_Weight (text), SetPoint_Home (deg), Err_Home (deg), Rate_Error (deg), Next_Cog (deg), Cmd_mult (text), LatB (deg), LonB (deg), Ch 0 (µs), Ch 1 (µs), Ch 2 (µs), Ch 3 (µs), Ch 4 (µs), Ch 5 (µs), Ch 6 (µs), PWM_L (µs), PWM_R (µs), PWM_D (µs)");
dataFile.close();
EEPROM.put(90, time_number);
if (!SD.begin(chipSelect)) { sd_ok = false; }
else {
sd_ok = true;
SdFile::dateTimeCallback(dateTime);
dataFile = SD.open(namebuff, FILE_WRITE);
delay(10);
if (dataFile) {
dataFile.println("time (ms), Packet_Count (text), Mode (text), GPS_Ok (text), COG_Ok (text), FailSafe (text), GPS_Stab (text), Baro_Stab (text), Deployed (text), Wing_Opened (text), Initialised (tex), Vbatt (V), Loopmin (µS), Loopmax (µS), Loopmean (µS), GPS-date, GPS-time, lat (deg), lon (deg), alt (m), CoG (deg), Speed (m/s), Sat_in_use (text), HDOP (text), Position_Age (text), Fix_type (text), Baro_Alt (m), Vertical_Speed (m/s), Altitude (m), Baro_Weight (text), GPS_Weight (text), SetPoint_Home (deg), Err_Home (deg), Rate_Error (deg), Next_Cog (deg), Cmd_mult (text), LatB (deg), LonB (deg), Ch 0 (µs), Ch 1 (µs), Ch 2 (µs), Ch 3 (µs), Ch 4 (µs), Ch 5 (µs), Ch 6 (µs), PWM_L (µs), PWM_R (µs), PWM_D (µs)");
dataFile.close();
EEPROM.put(90, time_number);
}
}
}
@ -1353,3 +1393,8 @@ void sim() {
sim_cmd = sin(sim_cmd_time);
sim_cmd = map(sim_cmd, -1, 1, -180, 180);
}
void eppclear() {
for ( unsigned int i = 0 ; i < EEPROM.length() ; i++ )
EEPROM.write(i, 0);
}