extern unsigned long HX711Read(void);
extern long getWeight();
float weight = 0;
int HX711_SCK = 2;
int HX711_DT= 3;
long HX711Buffer = 0;
long grossWeight = 0;
long netWeight = 0;
int gapValue = 405;
int MEASURE_INTERVAL = 20;
int CALIBRATION_INTERVAL = 2000;
#define STATE_CALIBRATE 1
#define STATE_MEASURE 2
int state = 1;
void setup() {
pinMode(HX711_SCK, OUTPUT);
pinMode(HX711_DT, INPUT);
Serial.begin(9600);
Serial.println("Pressure Sensor Operating Terminal");
Serial.println("calibrate mode");
delay(3000);
grossWeight = HX711Read();
}
void loop() {
runStateMachine(state);
char command = Serial.read();
if (command == 's' && state == STATE_CALIBRATE) {
state = STATE_MEASURE;
Serial.println("measure mode");
}
if (command == 'e' && state == STATE_MEASURE) {
state = STATE_CALIBRATE;
Serial.println("calibrate mode");
}
if (command == 'p') {
Serial.end();
}
}
void runStateMachine(int state) {
if (state == STATE_CALIBRATE) {
printMessage(CALIBRATION_INTERVAL);
} else if (state == STATE_MEASURE) {
printMessage(MEASURE_INTERVAL);
}
}
long getWeight() {
HX711Buffer = HX711Read();
netWeight = HX711Buffer;
netWeight = netWeight - grossWeight;
netWeight = (long)((float)netWeight/gapValue);
return netWeight;
}
void printMessage(int interval) {
weight = getWeight();
Serial.print(float(weight / 1000),3);
Serial.print(" kg\n");
Serial.print("\n");
delay(interval);
}
unsigned long HX711Read(void) {
unsigned long count;
unsigned char i;
digitalWrite(HX711_DT, HIGH);
delayMicroseconds(1);
digitalWrite(HX711_SCK, LOW);
delayMicroseconds(1);
count = 0;
while(digitalRead(HX711_DT));
for(i = 0; i < 24; i++) {
digitalWrite(HX711_SCK, HIGH);
delayMicroseconds(1);
count = count<<1;
digitalWrite(HX711_SCK, LOW);
delayMicroseconds(1);
if (digitalRead(HX711_DT)) {
count++;
}
}
digitalWrite(HX711_SCK, HIGH);
count ^= 0x800000;
delayMicroseconds(1);
digitalWrite(HX711_SCK, LOW);
delayMicroseconds(1);
return(count);
}
项目需要一个传感器程序,于是自己写了一个,也供大家参考使用
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)