/*--------------------------------------------------------------------------1--------------------------------------------------------------------------*/
/*--------------------------------------------------------------------本程序所引用库--------------------------------------------------------------------*/
// 无
/*--------------------------------------------------------------------------2--------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------声明定义-----------------------------------------------------------------------*/
/*****************************< 常量声明 >*****************************/
#define GAP_VALUE 420 // 将原始数据转为重量
/*****************************< 引脚定义 >*****************************/
const int HX711_SCK_Pin = A0; // 称重模块SCK
const int HX711_DT_Pin = A1; // 称重模块DT
/*****************************< 变量定义 >*****************************/
long HX711_Buffer = 0; // 存放当前称重的缓冲数据
long Weight_Maopi = 0; // 存放称重的毛皮数据
float Weight_Shiwu = 0; // 存放称重的最终得到的重量数据
/*--------------------------------------------------------------------------3--------------------------------------------------------------------------*/
/*-------------------------------------------------------------------setup()程序初始化------------------------------------------------------------------*/
void setup() {
/******************************< 启动串口通讯 >******************************/
Serial.begin(9600); // 初始化串口通信,并设置波特率为9600
/******************************< 设置引脚模式 >******************************/
pinMode(HX711_SCK_Pin, OUTPUT); // 设置称重模块SCK引脚为输出模式
pinMode(HX711_DT_Pin, INPUT); // 设置称重模块DT引脚为输入模式
/******************************获取毛皮重量******************************/
Weight_Maopi = HX711_Read();
Serial.print("毛皮数据:");
Serial.println(Weight_Maopi);
}
/*--------------------------------------------------------------------------4--------------------------------------------------------------------------*/
/*-------------------------------------------------------------------loop()基础循环体-------------------------------------------------------------------*/
void loop() {
HX711_Buffer = HX711_Read(); // 读取采样数据
Weight_Shiwu = HX711_Buffer;
Serial.print("原始采样数据:");
Serial.println(Weight_Shiwu);
Weight_Shiwu = Weight_Shiwu - Weight_Maopi; // 获取实物的AD采样数值。
Serial.print("去皮数据:");
Serial.println(Weight_Shiwu);
Weight_Shiwu = (float)Weight_Shiwu / GAP_VALUE; // 转为重量,单位g
Serial.print("实际重量(");
Serial.print(GAP_VALUE);
Serial.print("):");
Serial.print(Weight_Shiwu);
Serial.println("g");
Serial.println();
delay(500);
}
/*--------------------------------------------------------------------------5--------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------函数定义-----------------------------------------------------------------------*/
/*
函数:get_Weight()
作用:计算并获取实际重量
参数:
- 无
返回值:
- long:计算后的实际重量,单位为克
*/
long get_Weight() {
HX711_Buffer = HX711_Read(); // 读取采样数据
Weight_Shiwu = HX711_Buffer;
Weight_Shiwu = Weight_Shiwu - Weight_Maopi; // 获取实物的AD采样数值。
Weight_Shiwu = (long)((float)Weight_Shiwu / GAP_VALUE); // 转为重量,单位g
return Weight_Shiwu;
}
/*
函数:HX711_Read()
作用:从HX711传感器读取数据,使用增益128
参数:
- 无
返回值:
- unsigned long:从HX711读取的原始数据值
*/
unsigned long HX711_Read() {
unsigned long count;
unsigned char i;
// 准备读取HX711模块的数据
digitalWrite(HX711_DT_Pin, HIGH);
delayMicroseconds(1);
digitalWrite(HX711_SCK_Pin, LOW);
delayMicroseconds(1);
count = 0;
// 检测数据引脚(HX711_DT_Pin)是否为高电平,如果是则等待,直到数据引脚变为低电平。
while (digitalRead(HX711_DT_Pin))
;
for (i = 0; i < 24; i++) {
digitalWrite(HX711_SCK_Pin, HIGH);
delayMicroseconds(1);
count = count << 1; // 将count左移一位,相当于将count乘以2
digitalWrite(HX711_SCK_Pin, LOW);
delayMicroseconds(1);
if (digitalRead(HX711_DT_Pin)) // 如果数据引脚为高电平,则将count加1,表示该位为1。
count++;
}
digitalWrite(HX711_SCK_Pin, HIGH);
count ^= 0x800000; // 将count与0x800000进行异或操作,相当于将count的最高位取反
delayMicroseconds(1);
digitalWrite(HX711_SCK_Pin, LOW);
delayMicroseconds(1);
return (count);
}