Skip to content

Commit 2480c9e

Browse files
Merge pull request #10 from Alpha-CubeSat/decrease_temp_delay
Decrease temperature read latency
2 parents 24973ee + 3209310 commit 2480c9e

6 files changed

Lines changed: 53 additions & 29 deletions

File tree

src/ControlTasks/RadioControlTask.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,9 @@ bool RadioControlTask::normalReportDownlink()
263263
flags |= sfr::gps::on << 2; // boot mode flag
264264
flags |= (sfr::radio::mode == radio_mode_type::listen) << 1; // listen flag
265265

266+
Serial.println("Acc X: " + String(sfr::imu::acc_x));
267+
Serial.println("Acc Y: " + String(sfr::imu::acc_y));
268+
266269
uint8_t dlink[] = {
267270
(uint8_t)lat, (uint8_t)(lat >> 8),
268271
(uint8_t)lon, (uint8_t)(lon >> 8),
@@ -292,10 +295,9 @@ bool RadioControlTask::normalReportDownlink()
292295

293296
uint8_t RadioControlTask::map_range(float value, int min_val, int max_val)
294297
{
295-
long raw = map(value, min_val, max_val, 0, 255);
296-
raw = min(raw, 255);
297-
raw = max(raw, 0);
298-
return (uint8_t)raw;
298+
float raw = (value - min_val) / (max_val - min_val) * 255.0f;
299+
raw = fminf(fmaxf(raw, 0.0f), 255.0f);
300+
return static_cast<uint8_t>(raw);
299301
}
300302

301303
void RadioControlTask::processUplink()

src/MainControlLoop.cpp

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,58 +13,58 @@ void MainControlLoop::execute()
1313
{
1414

1515
#ifdef VERBOSE
16-
Serial.println(F("-------------------- START LOOP --------------------"));
16+
Serial.println("-------------------- START LOOP --------------------");
1717

18-
Serial.print(F("Gyro X: "));
18+
Serial.print("Gyro X: ");
1919
Serial.println(sfr::imu::gyro_x);
2020

21-
Serial.print(F("Gyro Y: "));
21+
Serial.print("Gyro Y: ");
2222
Serial.println(sfr::imu::gyro_y);
2323

24-
Serial.print(F("Gyro Z: "));
24+
Serial.print("Gyro Z: ");
2525
Serial.println(sfr::imu::gyro_z);
2626

27-
Serial.print(F("Accel X: "));
27+
Serial.print("Accel X: ");
2828
Serial.println(sfr::imu::acc_x);
2929

30-
Serial.print(F("Accel Y: "));
30+
Serial.print("Accel Y: ");
3131
Serial.println(sfr::imu::acc_y);
3232

33-
Serial.print(F("Accel Z: "));
33+
Serial.print("Accel Z: ");
3434
Serial.println(sfr::imu::acc_z);
3535

36-
Serial.print(F("Mag X: "));
36+
Serial.print("Mag X: ");
3737
Serial.println(sfr::imu::mag_x);
3838

39-
Serial.print(F("Mag Y: "));
39+
Serial.print("Mag Y: ");
4040
Serial.println(sfr::imu::mag_y);
4141

42-
Serial.print(F("Mag Z: "));
42+
Serial.print("Mag Z: ");
4343
Serial.println(sfr::imu::mag_z);
4444

45-
Serial.print(F("Temperature (C): "));
45+
Serial.print("Temperature (C): ");
4646
Serial.print(sfr::temperature::temp_c);
47-
Serial.println(F(" C"));
47+
Serial.println(" C");
4848

49-
Serial.print(F("GPS On: "));
49+
Serial.print("GPS On: ");
5050
Serial.println(sfr::gps::on);
5151

5252
Serial.print("UTC Time: ");
5353
Serial.println(sfr::gps::utc_time);
5454

55-
Serial.print(F("GPS Latitude: "));
55+
Serial.print("GPS Latitude: ");
5656
Serial.println(sfr::gps::latitude);
5757

58-
Serial.print(F("GPS Longitude: "));
58+
Serial.print("GPS Longitude: ");
5959
Serial.println(sfr::gps::longitude);
6060

61-
Serial.print(F("GPS Altitude (m): "));
61+
Serial.print("GPS Altitude (m): ");
6262
Serial.println(sfr::gps::altitude);
6363

64-
Serial.print(F("Downlink Slot: "));
64+
Serial.print("Downlink Slot: ");
6565
Serial.println(sfr::radio::downlink_slot);
6666

67-
Serial.print(F("Alive Time: "));
67+
Serial.print("Alive Time: ");
6868
Serial.println(millis() - sfr::gps::boot_time);
6969

7070
#endif

src/Monitors/TempMonitor.cpp

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,30 @@ TempMonitor::TempMonitor()
66

77
void TempMonitor::execute()
88
{
9-
// Start I2C transmit
9+
if (!sfr::temperature::initialized) {
10+
Wire.beginTransmission(constants::temperature::i2c_address);
11+
Wire.write(0xE7);
12+
Wire.endTransmission();
13+
14+
Wire.requestFrom(constants::temperature::i2c_address, 1);
15+
16+
if (Wire.available() == 1) {
17+
uint8_t user_register = Wire.read();
18+
user_register = user_register | 0x81;
19+
20+
Wire.beginTransmission(constants::temperature::i2c_address);
21+
Wire.write(0xE6);
22+
Wire.write(user_register);
23+
Wire.endTransmission();
24+
}
25+
sfr::temperature::initialized = true;
26+
}
27+
1028
Wire.beginTransmission(constants::temperature::i2c_address);
1129
// Select no hold master
1230
Wire.write(0xF3);
1331
Wire.endTransmission();
14-
delay(300); // TODO: Look at this delay (for real)
32+
delay(15);
1533

1634
// Request 2 bytes of data
1735
Wire.requestFrom(constants::temperature::i2c_address, 2);
@@ -22,6 +40,6 @@ void TempMonitor::execute()
2240
}
2341

2442
// Convert the data
25-
uint32_t rawtemp = (data[0] * 256 + data[1]) & 0xFFFC;
26-
sfr::temperature::temp_c = -46.85 + (175.72 * (rawtemp / 65536.0));
43+
uint32_t raw_temp = (data[0] * 256 + data[1]) & 0xFFFC;
44+
sfr::temperature::temp_c = -46.85 + (175.72 * (raw_temp / 65536.0));
2745
}

src/constants.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ namespace constants {
4040
namespace imu {
4141
constexpr int gyro_min = -245; // Default gyro range is +/- 245 dps
4242
constexpr int gyro_max = 245;
43-
constexpr int acc_min = -20; // Default accel range is +/- 2 G
44-
constexpr int acc_max = 20;
45-
constexpr int mag_min = -100; // Default mag range is +/- 4 guass -> 100 uT
43+
constexpr int acc_min = -10; // Default accel range is +/- 2 G
44+
constexpr int acc_max = 10;
45+
constexpr int mag_min = -100; // Default mag range is +/- 4 gauss -> 100 uT
4646
constexpr int mag_max = 100;
4747
} // namespace imu
4848
namespace temperature {

src/sfr.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ namespace sfr {
1010

1111
} // namespace imu
1212
namespace temperature {
13+
bool initialized = false;
14+
1315
float temp_c;
1416
} // namespace temperature
1517
namespace gps {

src/sfr.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ namespace sfr {
2323

2424
} // namespace imu
2525
namespace temperature {
26+
extern bool initialized;
27+
2628
extern float temp_c;
2729
} // namespace temperature
2830
namespace radio {

0 commit comments

Comments
 (0)