#define DOUT 3 //sbit ADDO = P1^5;
#define PD_SCK 2 //sbit ADSK = P0^0;
unsigned long rawvalue, offset, calibRaw;
float calibUnits, scale;
unsigned long ReadCount(){
unsigned long Count = 0;
digitalWrite(DOUT, HIGH); //ADDO=1; When output data is not ready for retrieval, digital output pin DOUT is high.
digitalWrite(PD_SCK, LOW); //ADSK=0; Serial clock input PD_SCK should be low.
while(digitalRead(DOUT)); // When DOUT goes to low, it indicates data is ready for retrieval.
for (byte i = 0; i < 24; i ++){ // Each PD_SCK pulse shifts out one bit, starting with the MSB bit first, until all 24 bits are shifted out.
digitalWrite(PD_SCK, HIGH); //ADSK=1;
Count = Count<<1;
digitalWrite(PD_SCK, LOW); //ADSK=0;
if(digitalRead(DOUT)) Count++;
}
// The 25th pulse at PD_SCK input will pull DOUT pin back to high
// Input and gain selection is controlled by the number of the input PD_SCK pulses
// defaul 1 pulse = channel A, gain 128. total pulses = 24 + 1 = 25
digitalWrite(PD_SCK, HIGH); //ADSK=1;
Count = Count^0x800000;
digitalWrite(PD_SCK, LOW); //ADSK=0;
return Count;
}
void setup() {
pinMode(DOUT, INPUT);
pinMode(PD_SCK, OUTPUT);
Serial.begin(115200);
Serial.println("hx711 no lib");
// initial reading n set channel gain
rawvalue = ReadCount();
Serial.print("raw value: ");
Serial.println(rawvalue);
// tare
offset = 8388608; // rawvalue with no loads
// calibration
calibRaw = 8389028; // rawvalue with known weights
calibUnits = 1.00; // the known weights
scale = (calibRaw - offset) / calibUnits;
}
void loop() {
rawvalue = ReadCount();
Serial.print("raw value: ");
Serial.println(rawvalue);
Serial.print("Units: ");
Serial.print((rawvalue - offset) / scale);
Serial.println(" Kg");
delay(333);
}
youtu.be/jFhjrHS577M