diff --git a/cubesatsim/cubesatsim.ino b/cubesatsim/cubesatsim.ino index 19f83d6e..6d734a6f 100644 --- a/cubesatsim/cubesatsim.ino +++ b/cubesatsim/cubesatsim.ino @@ -73,6 +73,7 @@ void setup() { Serial.println("\n\nCubeSatSim Pico v0.1 starting...\n\n"); + sim_mode = FALSE; mode = FSK; // AFSK; config_telem(); @@ -97,8 +98,12 @@ void loop() { loop_count++; + if (sim_mode == TRUE) + generate_simualted_telem(); + else // query INA219 sensors and Payload sensors - read_ina219(); + read_ina219(); + read_payload(); // encode as digits (APRS or CW mode) or binary (DUV FSK) @@ -310,6 +315,59 @@ void get_tlm_ao7() { // } } +void generate_simulated_telem() { + + sim_mode = TRUE; + + Serial.println("Simulated telemetry mode!\n"); + + srand((unsigned int)time(0)); + + axis[0] = rnd_float(-0.2, 0.2); + if (axis[0] == 0) + axis[0] = rnd_float(-0.2, 0.2); + axis[1] = rnd_float(-0.2, 0.2); + axis[2] = (rnd_float(-0.2, 0.2) > 0) ? 1.0 : -1.0; + + angle[0] = (float) atan(axis[1] / axis[2]); + angle[1] = (float) atan(axis[2] / 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[1] = rnd_float(4.5, 5.5) * (float) cos(angle[0]); + volts_max[2] = rnd_float(4.5, 5.5) * (float) cos(angle[1] - angle[0]); + + float amps_avg = rnd_float(150, 300); + + amps_max[0] = (amps_avg + rnd_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[2] = (amps_avg + rnd_float(-25.0, 25.0)) * (float) cos(angle[1] - angle[0]); + + batt = rnd_float(3.8, 4.3); + speed = rnd_float(1.0, 2.5); + eclipse = (rnd_float(-1, +4) > 0) ? 1.0 : 0.0; + period = rnd_float(150, 300); + tempS = rnd_float(20, 55); + temp_max = rnd_float(50, 70); + temp_min = rnd_float(10, 20); + + #ifdef DEBUG_LOGGING + 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]); + 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); + #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; + +} + void get_tlm_fox() { Serial.println("get_tlm_fox");