Program Listing for File temperature.c

Return to documentation for file (cellboard/Src/temperature.c)

#include "temperature.h"

#include "pct2075.h"

void temperature_read_sample(I2C_HandleTypeDef *hi2c[TEMP_BUS_COUNT],
                             uint16_t *buffer) {
    uint8_t count = 0;

    // For each bus, for each strip, read all sensors
    for (uint8_t bus = 0; bus < TEMP_BUS_COUNT; bus++) {
        for (uint8_t strip = 0; strip < TEMP_STRIPS_PER_BUS; strip++) {
            for (uint8_t sens = 0; sens < TEMP_SENSORS_PER_STRIP; sens++) {
                // Sum strip to change LSB of address coding
                buffer[count++] = pct2075_read(
                    hi2c[bus], TEMP_SENSOR_ADDRESS_CODING[sens] + strip);
            }
        }
    }
}

void temperature_get_average(
    uint16_t buffer[TEMP_SENSOR_COUNT][TEMP_SAMPLE_COUNT],
    uint8_t temps[TEMP_SENSOR_COUNT]) {
    for (uint8_t sens = 0; sens < TEMP_SENSOR_COUNT; sens++) {
        temps[sens] = 0;

        for (uint8_t sample = 0; sample < TEMP_SAMPLE_COUNT; sample++) {
            temps[sens] += buffer[sens][sample];
            buffer[sens][sample] = 0;
        }
        temps[sens] /= TEMP_SAMPLE_COUNT;
    }
}

void temperature_get_extremes(uint8_t temps[], uint8_t min[2], uint8_t max[2]) {
    max[0] = max[1] = 0;
    min[0] = min[1] = UINT8_MAX;

    for (uint8_t i = 0; i < TEMP_SENSOR_COUNT; i++) {
        if (temps[i] >= max[0]) {
            max[1] = max[0];
            max[0] = temps[i];
        } else if (temps[i] > max[1]) {
            max[1] = temps[i];
        }

        if (temps[i] <= min[0]) {
            min[1] = min[0];
            min[0] = temps[i];
        } else if (temps[i] < min[1]) {
            min[1] = temps[i];
        }
    }
}