Merge pull request #264 from alanbjohnston/v0.39

V0.39
pico-v0.39 v0.39
alanbjohnston 3 years ago committed by GitHub
commit 6acffdd00a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -137,8 +137,12 @@
#define PAYLOAD_CLEAR 3 #define PAYLOAD_CLEAR 3
volatile int prompt = false; volatile int prompt = false;
volatile int prompting = false;
char serial_string[128]; char serial_string[128];
float get_cpu_temp();
//#define WAV_DATA_LENGTH (50000 * 8) //#define WAV_DATA_LENGTH (50000 * 8)
uint32_t tx_freq_hz = 434900000 + FREQUENCY_OFFSET; uint32_t tx_freq_hz = 434900000 + FREQUENCY_OFFSET;
@ -219,6 +223,7 @@ void load_sstv_image_1_as_cam_dot_jpg();
void load_sstv_image_2_as_cam_dot_jpg(); void load_sstv_image_2_as_cam_dot_jpg();
void get_input(); void get_input();
void transmit_led(bool status); void transmit_led(bool status);
void reset_min_max();
#ifndef STASSID #ifndef STASSID
#define STASSID "Pico" #define STASSID "Pico"

@ -80,6 +80,11 @@ char call[] = "AMSAT"; // put your callsign here
extern bool get_camera_image(bool debug); extern bool get_camera_image(bool debug);
extern bool start_camera(); extern bool start_camera();
float rand_float(float lower, float upper) {
return (float)(random(lower*100, upper*100)/100.0);
}
void setup() { void setup() {
set_sys_clock_khz(133000, true); set_sys_clock_khz(133000, true);
@ -90,7 +95,6 @@ void setup() {
LittleFS.begin(); LittleFS.begin();
// LittleFS.format(); // only format if files of size 0 keep showing up // LittleFS.format(); // only format if files of size 0 keep showing up
read_mode(); read_mode();
// mode = BPSK; // force to BPSK // mode = BPSK; // force to BPSK
@ -168,7 +172,7 @@ void setup() {
*/ */
start_ina219(); start_ina219();
if (i2c_bus3 == false) if ((i2c_bus3 == false) || (sim_mode))
// if ((i2c_bus3 == false) || (mode == FSK)) // force simulated telemetry mode for FSK // if ((i2c_bus3 == false) || (mode == FSK)) // force simulated telemetry mode for FSK
config_simulated_telem(); config_simulated_telem();
@ -332,6 +336,12 @@ void loop() {
} }
// get_input(); // get_input();
serial_input();
if (prompt) {
// Serial.println("Need to prompt for input!");
prompt_for_input();
prompt = false;
}
// Calculate loop time // Calculate loop time
if (debug_mode) { if (debug_mode) {
@ -711,6 +721,8 @@ void config_telem() {
if (debug_mode) if (debug_mode)
Serial.println("Clearing min and max telemetry values"); Serial.println("Clearing min and max telemetry values");
reset_min_max();
/*
for (int i = 0; i < 9; i++) { for (int i = 0; i < 9; i++) {
voltage_min[i] = 1000.0; voltage_min[i] = 1000.0;
current_min[i] = 1000.0; current_min[i] = 1000.0;
@ -725,7 +737,8 @@ void config_telem() {
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
other_min[i] = 1000.0; other_min[i] = 1000.0;
other_max[i] = -1000.0; other_max[i] = -1000.0;
} }
*/
firstTime = TRUE; firstTime = TRUE;
} }
@ -758,8 +771,8 @@ void get_tlm_ao7() {
tlm[3][B_] = (int)(voltage[mapping[BUS]] * 10.0) % 100; // 5V supply to Pi tlm[3][B_] = (int)(voltage[mapping[BUS]] * 10.0) % 100; // 5V supply to Pi
// tlm[4][A] = (int)((95.8 - other[IHU_TEMP]) / 1.48 + 0.5) % 100; // was [B] but didn't display in online TLM spreadsheet tlm[4][A_] = (int)((95.8 - other[IHU_TEMP]) / 1.48 + 0.5) % 100; // was [B] but didn't display in online TLM spreadsheet
tlm[4][A_] = (int)((95.8 - analogReadTemp()) / 1.48 + 0.5) % 100; // was [B] but didn't display in online TLM spreadsheet // tlm[4][A_] = (int)((95.8 - analogReadTemp()) / 1.48 + 0.5) % 100; // was [B] but didn't display in online TLM spreadsheet
tlm[6][B_] = 0; tlm[6][B_] = 0;
tlm[6][D_] = 49 + rand() % 3; tlm[6][D_] = 49 + rand() % 3;
@ -808,16 +821,17 @@ void generate_simulated_telem() {
if (debug_mode) if (debug_mode)
Serial.println("\n\nSwitching eclipse mode! \n\n"); Serial.println("\n\nSwitching eclipse mode! \n\n");
} }
// Serial.println((eclipse == 1.0));
double Xi = eclipse * amps_max[0] * (float) sin(2.0 * 3.14 * time_stamp / (46.0 * rotation_speed)) + rnd_float(-2, 2); double Xi = eclipse * amps_max[0] * (float) sin(2.0 * 3.14 * time_stamp / (46.0 * rotation_speed)) + rand_float(-2, 2);
double Yi = eclipse * amps_max[1] * (float) sin((2.0 * 3.14 * time_stamp / (46.0 * rotation_speed)) + (3.14 / 2.0)) + rnd_float(-2, 2); double Yi = eclipse * amps_max[1] * (float) sin((2.0 * 3.14 * time_stamp / (46.0 * rotation_speed)) + (3.14 / 2.0)) + rand_float(-2, 2);
double Zi = eclipse * amps_max[2] * (float) sin((2.0 * 3.14 * time_stamp / (46.0 * rotation_speed)) + 3.14 + angle[2]) + rnd_float(-2, 2); double Zi = eclipse * amps_max[2] * (float) sin((2.0 * 3.14 * time_stamp / (46.0 * rotation_speed)) + 3.14 + angle[2]) + rand_float(-2, 2);
double Xv = eclipse * volts_max[0] * (float) sin(2.0 * 3.14 * time_stamp / (46.0 * rotation_speed)) + rnd_float(-0.2, 0.2); double Xv = eclipse * volts_max[0] * (float) sin(2.0 * 3.14 * time_stamp / (46.0 * rotation_speed)) + rand_float(-0.2, 0.2);
double Yv = eclipse * volts_max[1] * (float) sin((2.0 * 3.14 * time_stamp / (46.0 * rotation_speed)) + (3.14 / 2.0)) + rnd_float(-0.2, 0.2); double Yv = eclipse * volts_max[1] * (float) sin((2.0 * 3.14 * time_stamp / (46.0 * rotation_speed)) + (3.14 / 2.0)) + rand_float(-0.2, 0.2);
double Zv = 2.0 * eclipse * volts_max[2] * (float) sin((2.0 * 3.14 * time_stamp / (46.0 * rotation_speed)) + 3.14 + angle[2]) + rnd_float(-0.2, 0.2); double Zv = 2.0 * eclipse * volts_max[2] * (float) sin((2.0 * 3.14 * time_stamp / (46.0 * rotation_speed)) + 3.14 + angle[2]) + rand_float(-0.2, 0.2);
// printf("Yi: %f Zi: %f %f %f Zv: %f \n", Yi, Zi, amps_max[2], angle[2], Zv); // Serial.printf("Yi: %f Zi: %f %f %f Zv: %f \n", Yi, Zi, amps_max[2], angle[2], Zv);
current[mapping[PLUS_X]] = (Xi >= 0) ? Xi : 0; current[mapping[PLUS_X]] = (Xi >= 0) ? Xi : 0;
current[mapping[MINUS_X]] = (Xi >= 0) ? 0 : ((-1.0f) * Xi); current[mapping[MINUS_X]] = (Xi >= 0) ? 0 : ((-1.0f) * Xi);
@ -826,29 +840,29 @@ void generate_simulated_telem() {
current[mapping[PLUS_Z]] = (Zi >= 0) ? Zi : 0; current[mapping[PLUS_Z]] = (Zi >= 0) ? Zi : 0;
current[mapping[MINUS_Z]] = (Zi >= 0) ? 0 : ((-1.0f) * Zi); current[mapping[MINUS_Z]] = (Zi >= 0) ? 0 : ((-1.0f) * Zi);
voltage[mapping[PLUS_X]] = (Xv >= 1) ? Xv : rnd_float(0.9, 1.1); voltage[mapping[PLUS_X]] = (Xv >= 1) ? Xv : rand_float(0.9, 1.1);
voltage[mapping[MINUS_X]] = (Xv <= -1) ? ((-1.0f) * Xv) : rnd_float(0.9, 1.1); voltage[mapping[MINUS_X]] = (Xv <= -1) ? ((-1.0f) * Xv) : rand_float(0.9, 1.1);
voltage[mapping[PLUS_Y]] = (Yv >= 1) ? Yv : rnd_float(0.9, 1.1); voltage[mapping[PLUS_Y]] = (Yv >= 1) ? Yv : rand_float(0.9, 1.1);
voltage[mapping[MINUS_Y]] = (Yv <= -1) ? ((-1.0f) * Yv) : rnd_float(0.9, 1.1); voltage[mapping[MINUS_Y]] = (Yv <= -1) ? ((-1.0f) * Yv) : rand_float(0.9, 1.1);
voltage[mapping[PLUS_Z]] = (Zv >= 1) ? Zv : rnd_float(0.9, 1.1); voltage[mapping[PLUS_Z]] = (Zv >= 1) ? Zv : rand_float(0.9, 1.1);
voltage[mapping[MINUS_Z]] = (Zv <= -1) ? ((-1.0f) * Zv) : rnd_float(0.9, 1.1); voltage[mapping[MINUS_Z]] = (Zv <= -1) ? ((-1.0f) * Zv) : rand_float(0.9, 1.1);
// printf("temp: %f Time: %f Eclipse: %d : %f %f | %f %f | %f %f\n",tempS, time, eclipse, voltage[map[PLUS_X]], voltage[map[MINUS_X]], voltage[map[PLUS_Y]], voltage[map[MINUS_Y]], current[map[PLUS_Z]], current[map[MINUS_Z]]); // Serial.printf("temp: %f Time: %f Eclipse: %d : %f %f | %f %f | %f %f\n",tempS, time, eclipse, voltage[mapping[PLUS_X]], voltage[mapping[MINUS_X]], voltage[mapping[PLUS_Y]], voltage[mapping[MINUS_Y]], current[mapping[PLUS_Z]], current[mapping[MINUS_Z]]);
tempS += (eclipse > 0) ? ((temp_max - tempS) / 50.0f) : ((temp_min - tempS) / 50.0f); tempS += (eclipse > 0) ? ((temp_max - tempS) / 50.0f) : ((temp_min - tempS) / 50.0f);
tempS += +rnd_float(-1.0, 1.0); tempS += +rand_float(-1.0, 1.0);
// IHUcpuTemp = (int)((tempS + rnd_float(-1.0, 1.0)) * 10 + 0.5); // IHUcpuTemp = (int)((tempS + rand_float(-1.0, 1.0)) * 10 + 0.5);
other[IHU_TEMP] = tempS; other[IHU_TEMP] = tempS;
voltage[mapping[BUS]] = rnd_float(5.0, 5.005); voltage[mapping[BUS]] = rand_float(5.0, 5.005);
current[mapping[BUS]] = rnd_float(158, 171); current[mapping[BUS]] = rand_float(158, 171);
// float charging = current[map[PLUS_X]] + current[map[MINUS_X]] + current[map[PLUS_Y]] + current[map[MINUS_Y]] + current[map[PLUS_Z]] + current[map[MINUS_Z]]; // float charging = current[map[PLUS_X]] + current[map[MINUS_X]] + current[map[PLUS_Y]] + current[map[MINUS_Y]] + current[map[PLUS_Z]] + current[map[MINUS_Z]];
float charging = eclipse * (fabs(amps_max[0] * 0.707) + fabs(amps_max[1] * 0.707) + rnd_float(-4.0, 4.0)); float charging = eclipse * (fabs(amps_max[0] * 0.707) + fabs(amps_max[1] * 0.707) + rand_float(-4.0, 4.0));
current[mapping[BAT]] = ((current[mapping[BUS]] * voltage[mapping[BUS]]) / batt) - charging; current[mapping[BAT]] = ((current[mapping[BUS]] * voltage[mapping[BUS]]) / batt) - charging;
// printf("charging: %f bat curr: %f bus curr: %f bat volt: %f bus volt: %f \n",charging, current[map[BAT]], current[map[BUS]], batt, voltage[map[BUS]]); // Serial.printf("charging: %f bat curr: %f bus curr: %f bat volt: %f bus volt: %f \n",charging, current[mapping[BAT]], current[mapping[BUS]], batt, voltage[mapping[BUS]]);
batt -= (batt > 3.5) ? current[mapping[BAT]] / 30000 : current[mapping[BAT]] / 3000; batt -= (batt > 3.5) ? current[mapping[BAT]] / 30000 : current[mapping[BAT]] / 3000;
if (batt < 3.0) { if (batt < 3.0) {
@ -861,7 +875,12 @@ void generate_simulated_telem() {
if (batt > 4.5) if (batt > 4.5)
batt = 4.5; batt = 4.5;
voltage[mapping[BAT]] = batt + rnd_float(-0.01, 0.01); voltage[mapping[BAT]] = batt + rand_float(-0.01, 0.01);
voltage[mapping[BUS]] = voltage[mapping[BAT]];
current[mapping[BUS]] = current[mapping[BAT]];
// Serial.printf("Batt voltage: %f \n", voltage[mapping[BAT]]);
// end of simulated telemetry // end of simulated telemetry
} }
@ -870,49 +889,51 @@ void config_simulated_telem()
{ {
sim_mode = TRUE; sim_mode = TRUE;
Serial.println("Simulated telemetry mode!"); Serial.println("Simulated telemetry mode!!");
// srand((unsigned int)time(0)); // srand((unsigned int)time(0));
axis[0] = rnd_float(-0.2, 0.2); axis[0] = rand_float(-0.2, 0.2);
if (axis[0] == 0) if (axis[0] == 0)
axis[0] = rnd_float(-0.2, 0.2); axis[0] = rand_float(-0.2, 0.2);
axis[1] = rnd_float(-0.2, 0.2); axis[1] = rand_float(-0.2, 0.2);
axis[2] = (rnd_float(-0.2, 0.2) > 0) ? 1.0 : -1.0; axis[2] = (rand_float(-0.2, 0.2) > 0) ? 1.0 : -1.0;
angle[0] = (float) atan(axis[1] / axis[2]); angle[0] = (float) atan(axis[1] / axis[2]);
angle[1] = (float) atan(axis[2] / axis[0]); angle[1] = (float) atan(axis[2] / axis[0]);
angle[2] = (float) atan(axis[1] / axis[0]); angle[2] = (float) atan(axis[1] / axis[0]);
volts_max[0] = rnd_float(4.5, 5.5) * (float) sin(angle[1]); volts_max[0] = rand_float(4.5, 5.5) * (float) sin(angle[1]);
volts_max[1] = rnd_float(4.5, 5.5) * (float) cos(angle[0]); volts_max[1] = rand_float(4.5, 5.5) * (float) cos(angle[0]);
volts_max[2] = rnd_float(4.5, 5.5) * (float) cos(angle[1] - angle[0]); volts_max[2] = rand_float(4.5, 5.5) * (float) cos(angle[1] - angle[0]);
float amps_avg = rnd_float(150, 300); float amps_avg = rand_float(150, 300);
amps_max[0] = (amps_avg + rnd_float(-25.0, 25.0)) * (float) sin(angle[1]); amps_max[0] = (amps_avg + rand_float(-25.0, 25.0)) * (float) sin(angle[1]);
amps_max[1] = (amps_avg + rnd_float(-25.0, 25.0)) * (float) cos(angle[0]); amps_max[1] = (amps_avg + rand_float(-25.0, 25.0)) * (float) cos(angle[0]);
amps_max[2] = (amps_avg + rnd_float(-25.0, 25.0)) * (float) cos(angle[1] - angle[0]); amps_max[2] = (amps_avg + rand_float(-25.0, 25.0)) * (float) cos(angle[1] - angle[0]);
batt = rnd_float(3.8, 4.3); batt = rand_float(3.8, 4.3);
rotation_speed = rnd_float(1.0, 2.5); rotation_speed = rand_float(1.0, 2.5);
eclipse = (rnd_float(-1, +4) > 0) ? 1.0 : 0.0; eclipse = (rand_float(-1, +4) > 0) ? 1.0 : 0.0;
period = rnd_float(150, 300); period = rand_float(150, 300);
tempS = rnd_float(20, 55); tempS = rand_float(20, 55);
temp_max = rnd_float(50, 70); temp_max = rand_float(50, 70);
temp_min = rnd_float(10, 20); temp_min = rand_float(10, 20);
time_start = (long int) millis();
eclipse_time = (long int)(millis() / 1000.0);
if (eclipse == 0.0)
eclipse_time -= period / 2; // if starting in eclipse, shorten interval
// #ifdef DEBUG_LOGGING // #ifdef DEBUG_LOGGING
// for (int i = 0; i < 3; i++) for (int i = 0; i < 3; i++)
// printf("axis: %f angle: %f v: %f i: %f \n", axis[i], angle[i], volts_max[i], amps_max[i]); Serial.printf("axis: %f angle: %f v: %f i: %f \n", axis[i], angle[i], volts_max[i], amps_max[i]);
// printf("batt: %f speed: %f eclipse_time: %f eclipse: %f period: %f temp: %f max: %f min: %f\n", batt, speed, eclipse_time, eclipse, period, tempS, temp_max, temp_min); Serial.printf("batt: %f speed: %f eclipse_time: %f eclipse: %f period: %f temp: %f max: %f min: %f\n", batt, rotation_speed, eclipse_time, eclipse, period, tempS, temp_max, temp_min);
// #endif // #endif
time_start = (long int) millis();
eclipse_time = (long int)(millis() / 1000.0);
if (eclipse == 0.0)
eclipse_time -= period / 2; // if starting in eclipse, shorten interval
// } // }
// tx_freq_hz -= tx_channel * 50000; // tx_freq_hz -= tx_channel * 50000;
@ -1481,7 +1502,7 @@ int twosToInt(int val,int len) { // Convert twos compliment to integer
return(val); return(val);
} }
/*
float rnd_float(double min,double max) { // returns 2 decimal point random number float rnd_float(double min,double max) { // returns 2 decimal point random number
int val = (rand() % ((int)(max*100) - (int)(min*100) + 1)) + (int)(min*100); int val = (rand() % ((int)(max*100) - (int)(min*100) + 1)) + (int)(min*100);
@ -1489,7 +1510,7 @@ float rnd_float(double min,double max) { // returns 2 decimal point random num
return(ret); return(ret);
} }
*/
float toAprsFormat(float input) { float toAprsFormat(float input) {
// converts decimal coordinate (latitude or longitude) to APRS DDMM.MM format // converts decimal coordinate (latitude or longitude) to APRS DDMM.MM format
int dd = (int) input; int dd = (int) input;
@ -2273,6 +2294,9 @@ void test_radio()
void read_ina219() void read_ina219()
{ {
other[IHU_TEMP] = get_cpu_temp();
unsigned long read_time = millis(); unsigned long read_time = millis();
unsigned long read_time_total = millis(); unsigned long read_time_total = millis();
if (voltage_read && !i2c_bus1 && !i2c_bus3) if (voltage_read && !i2c_bus1 && !i2c_bus3)
@ -2382,6 +2406,8 @@ void read_ina219()
} else { } else {
voltage[BAT] = 0.0; voltage[BAT] = 0.0;
current[BAT] = 0.0; current[BAT] = 0.0;
voltage[BUS] = 0.0;
current[BUS] = 0.0;
} }
if (i2c5) { if (i2c5) {
@ -3756,6 +3782,10 @@ void config_gpio() {
pinMode(TEMPERATURE_PIN, INPUT); pinMode(TEMPERATURE_PIN, INPUT);
Serial.print("Diode voltage (temperature): "); Serial.print("Diode voltage (temperature): ");
Serial.println(analogRead(TEMPERATURE_PIN)); Serial.println(analogRead(TEMPERATURE_PIN));
adc_gpio_init(29); // setup internal temperature sensor
Serial.printf("CPU Temperature: %4.1f \n", get_cpu_temp());
randomSeed(get_cpu_temp());
pinMode(AUDIO_IN_PIN, INPUT); pinMode(AUDIO_IN_PIN, INPUT);
Serial.print("Audio In: "); Serial.print("Audio In: ");
@ -4434,8 +4464,11 @@ void serial_input() {
} }
} }
void prompt_for_input() { void prompt_for_input() {
float float_result; float float_result;
if (!prompting) {
prompting = true;
while (Serial.available() > 0) // clear any characters in serial input buffer while (Serial.available() > 0) // clear any characters in serial input buffer
Serial.read(); Serial.read();
@ -4525,10 +4558,12 @@ void prompt_for_input() {
get_serial_char(); get_serial_char();
if ((serial_string[0] == 'y') || (serial_string[0] == 'Y')) { if ((serial_string[0] == 'y') || (serial_string[0] == 'Y')) {
Serial.println("Setting Simulated telemetry to on"); Serial.println("Setting Simulated telemetry to on");
reset_min_max();
config_simulated_telem(); config_simulated_telem();
write_config_file(); write_config_file();
} else if ((serial_string[0] == 'n') || (serial_string[0] == 'N')) { } else if ((serial_string[0] == 'n') || (serial_string[0] == 'N')) {
Serial.println("Setting Simulated telemetry to off"); Serial.println("Setting Simulated telemetry to off");
reset_min_max();
sim_mode = false; sim_mode = false;
if (!ina219_started) if (!ina219_started)
start_ina219(); start_ina219();
@ -4603,8 +4638,9 @@ void prompt_for_input() {
break; break;
case PROMPT_REBOOT: case PROMPT_REBOOT:
Serial.println("Rebooting..."); Serial.println("Rebooting...");
watchdog_reboot (0, SRAM_END, 10); // restart Pico Serial.flush();
watchdog_reboot (0, SRAM_END, 500); // restart Pico
sleep(20.0); sleep(20.0);
break; break;
@ -4613,7 +4649,8 @@ void prompt_for_input() {
// Serial.println("Reboot or power cycle to restart the CubeSatSim"); // Serial.println("Reboot or power cycle to restart the CubeSatSim");
// while (1) ; // infinite loop // while (1) ; // infinite loop
Serial.println("Rebooting..."); Serial.println("Rebooting...");
watchdog_reboot (0, SRAM_END, 10); // restart Pico Serial.flush();
watchdog_reboot (0, SRAM_END, 500); // restart Pico
sleep(20.0); sleep(20.0);
break; break;
@ -4804,7 +4841,11 @@ void prompt_for_input() {
break; break;
} }
prompt = false; prompt = false;
prompting = false;
}
// else
// Serial.println("Already prompting!");
} }
void get_serial_string() { void get_serial_string() {
@ -4958,8 +4999,9 @@ void start_clockgen() {
} }
void get_input() { void get_input() {
if (mode != SSTV)
// if (((skip++)%2) == 0) Serial.print("+");
if ((mode == CW) || (mode == SSTV))
serial_input(); serial_input();
// check for button press // check for button press
@ -4987,8 +5029,9 @@ void get_input() {
// mode = new_mode; // change modes if button pressed // mode = new_mode; // change modes if button pressed
write_mode(new_mode); write_mode(new_mode);
Serial.println("Rebooting..."); Serial.println("Rebooting...");
watchdog_reboot (0, SRAM_END, 10); // restart Pico Serial.flush();
watchdog_reboot (0, SRAM_END, 500); //10); // restart Pico
sleep(20.0); sleep(20.0);
/* /*
@ -5022,3 +5065,39 @@ void transmit_led(bool status) {
digitalWrite(MAIN_LED_BLUE, status); digitalWrite(MAIN_LED_BLUE, status);
} }
} }
float get_cpu_temp() {
adc_select_input(4);
const float conversion_factor = 3.27f / (1 << 12);
uint16_t raw = adc_read();
// Serial.printf("Raw: %d\n",raw);
float result = raw * conversion_factor;
float temp = 27 - (result - 0.706)/0.001721;
// Serial.printf(" temp = %f C", temp);
return(temp);
}
void reset_min_max() {
for (int i = 0; i < 9; i++) {
voltage_min[i] = 1000.0;
current_min[i] = 1000.0;
voltage_max[i] = -1000.0;
current_max[i] = -1000.0;
}
for (int i = 0; i < 17; i++) {
sensor_min[i] = 1000.0;
sensor_max[i] = -1000.0;
// printf("Sensor min and max initialized!");
}
for (int i = 0; i < 3; i++) {
other_min[i] = 1000.0;
other_max[i] = -1000.0;
}
}

Loading…
Cancel
Save

Powered by TurnKey Linux.