File syn_scale.c¶
File List > sensor > syn_scale.c
Go to the documentation of this file
#include "syn_scale.h"
#include "../util/syn_assert.h"
#include <math.h>
#include <string.h>
SYN_Status syn_scale_init(SYN_Scale *scale, SYN_GPIO_Pin dout_pin, SYN_GPIO_Pin sck_pin,
SYN_ScaleType type)
{
SYN_ASSERT(scale != NULL);
if (scale == NULL) {
return SYN_INVALID_PARAM;
}
memset(scale, 0, sizeof(*scale));
scale->type = type;
scale->dout_pin = dout_pin;
scale->sck_pin = sck_pin;
scale->scale_factor = 1.0f; /* 1.0 default */
scale->is_stable = true;
return SYN_OK;
}
void syn_scale_feed_adc(SYN_Scale *scale, int32_t raw_adc24)
{
if (scale == NULL)
return;
int32_t delta = raw_adc24 - scale->tare_offset;
if (scale->scale_factor != 0.0f) {
scale->last_weight_grams = (float)delta / scale->scale_factor;
} else {
scale->last_weight_grams = 0.0f;
}
}
void syn_scale_tare(SYN_Scale *scale, int32_t tare_offset)
{
if (scale == NULL)
return;
scale->tare_offset = tare_offset;
}
void syn_scale_set_calibration_factor(SYN_Scale *scale, float factor)
{
if (scale == NULL || factor == 0.0f)
return;
scale->scale_factor = factor;
}
float syn_scale_get_grams(const SYN_Scale *scale)
{
if (scale == NULL)
return 0.0f;
return scale->last_weight_grams;
}
float syn_scale_get_kg(const SYN_Scale *scale)
{
if (scale == NULL)
return 0.0f;
return scale->last_weight_grams / 1000.0f;
}