Ejemplo n.º 1
0
/**
 * write a float
 * num - number to write
 * decimal - x decimal point
 */
void suli_uart_write_float(UART_T *uart, float float_num, int decimal)
{
    char fmt[6];
    char buff[32];
    snprintf(fmt, 6, "%%.%df", decimal);
    int r = snprintf(buff, 32, (const char *)fmt, float_num);
    suli_uart_write_bytes(uart, (uint8_t *)buff, r);
}
bool GroveCo2MhZ16::_update_from_sensor(void)
{
    /* MH-Z16 "get" command */
    /* suli can't use const constraint */
    /*const*/ uint8_t cmd_get_sensor[] =
    { 0xff, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79 };

    _drain_uart(); // just to be sure there's no leftovers
    suli_uart_write_bytes(uart, cmd_get_sensor, sizeof(cmd_get_sensor));

    suli_delay_ms(10);

#define BYTES_IN_ANSWER 9
    byte data[BYTES_IN_ANSWER];
    int n =
        suli_uart_read_bytes_timeout(uart,data,BYTES_IN_ANSWER,100);

    if (n!=9)
    {
        last_error="too few bytes read";
        return false;
    }

    // checksum :
    if ((1 + (0xFF ^ (byte)(data[1] + data[2] + data[3]
                            + data[4] + data[5] + data[6]
                            + data[7]))) != data[8])
    {
        last_error="checksum error";
        return false;
    }

    CO2PPM = (int)data[2] * 256 + (int)data[3];
    temp = (int)data[4] - 40;

    return true;
}
Ejemplo n.º 3
0
/**
 * write an integer
 * num - number to write
 */
void suli_uart_write_int(UART_T *uart, int32_t num)
{
    char buff[32];
    int r = snprintf(buff, 32, "%ld", num);
    suli_uart_write_bytes(uart, (uint8_t *)buff, r);
}