我想使用润和的Hi3861开发板连接HX711称重模块并进行称重,HX711称重模块已经使用过Arduino与其示例代码完成称重,我仿造Arduino的称重代码将其移植到Hi3861上,但是称重一直不成功,以下是我的Hi3861的代码
#define HX711_SCK_PIN 2
#define HX711_DT_PIN 3
#define LOW HI_GPIO_VALUE0
#define HIGH HI_GPIO_VALUE1
#include "hx711.h"
long HX711_Buffer = 0;
long Weight_Maopi = 0,Weight_Shiwu = 0;
hi_gpio_value DTval;
#define GapValue 430
//****************************************************
//GPIO初始化
//****************************************************
void HX711_Init(void)
{
hi_gpio_set_dir(HX711_DT_PIN, HI_GPIO_DIR_IN);
hi_gpio_set_dir(HX711_SCK_PIN, HI_GPIO_DIR_OUT);
}
//****************************************************
//获取毛皮
//****************************************************
void Get_Maopi()
{
Weight_Maopi = HX711_Read();
}
//****************************************************
//获取实物重量
//****************************************************
long Get_Weight()
{
HX711_Buffer = HX711_Read();
Weight_Shiwu = HX711_Buffer;
Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //获取称重的实物重量
Weight_Shiwu = (long)((float)Weight_Shiwu/GapValue);
return Weight_Shiwu;
}
int GetHX711_DT(){
hi_gpio_get_input_val(HX711_DT_PIN,&DTval);
return DTval;
}
//****************************************************
//璇诲彇HX711
//****************************************************
int32_t HX711_Read(void)
{
int i;
int32_t data = 0;
// 等待 HX711 就绪
while(GetHX711_DT());
// 发送一个脉冲以开始转换
hi_gpio_set_ouput_val(HX711_SCK_PIN, LOW);
usleep(1);
hi_gpio_set_ouput_val(HX711_SCK_PIN, HIGH);
usleep(1);
hi_gpio_set_ouput_val(HX711_SCK_PIN, LOW);
// 读取24位数据
for(i = 0; i < 24; i++) {
hi_gpio_set_ouput_val(HX711_SCK_PIN, HIGH);
usleep(1);
data <<= 1;
if(GetHX711_DT()) {
data++;
}
hi_gpio_set_ouput_val(HX711_SCK_PIN, LOW);
usleep(1);
}
// 恢复到默认状态
hi_gpio_set_ouput_val(HX711_SCK_PIN, HIGH);
usleep(1);
hi_gpio_set_ouput_val(HX711_SCK_PIN, LOW);
// 判断读数是否为负数
if(data & 0x800000) {
data |= 0xff000000;
}
return data;
}
PIN口用的是2和3,请问该如何使Hi3861正确配置并成功称重?
另外像是树莓派和Arduino的开发板连接电脑USB后用万用表测5V供电实际电压能到5V,但是测Hi3861的5V供电实际电压只有4.6-4.7V,请问这是什么机制,会造成什么影响吗?