Running a stepper motor and load cell

I have a problem similar to the one described here Help with stepper motor and load cell - Motors, Mechanics, Power and CNC - Arduino Forum.

I'm trying to run a stepper motor with a Stepper Motor Shield and a load cell with HX711.

The code is below (HX711_STEPPER). If I run this, I can get the load cell values on serial monitor without an issue. But the motor doesn't move; it makes a jittery noise.

If I run the motor code and load cell code separately, it works well! The separate codes (STEPPER and HX711_SERIAL) are below as well. I have attached the library files for HX711.

Not sure if I'm doing something wrong. Any help would be great!

HX711_STEPPER

#include "HX711.h"

// HX711.DOUT - pin #A1
// HX711.PD_SCK - pin #A0

HX711 scale(A1, A0); // parameter "gain" is ommited; the default value 128 is used by the library

const int stepPin = 6;
const int dirPin = 7;
const int enPin = 8;

void setup() {
 Serial.begin(38400);
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
 digitalWrite(enPin, HIGH);      // stop
  
 Serial.println("h-climb  l-descend  s-stop");
 
 Serial.println("HX711 Demo");

 Serial.println("Before setting up the scale:");
 Serial.print("read: \t\t");
 Serial.println(scale.read()); // print a raw reading from the ADC

 Serial.print("read average: \t\t");
 Serial.println(scale.read_average(20));   // print the average of 20 readings from the ADC

 Serial.print("get value: \t\t");
 Serial.println(scale.get_value(5)); // print the average of 5 readings from the ADC minus the tare weight (not set yet)

 Serial.print("get units: \t\t");
 Serial.println(scale.get_units(5), 1); // print the average of 5 readings from the ADC minus tare weight (not set) divided 
// by the SCALE parameter (not set yet)  

 scale.set_scale(2280.f);                      // this value is obtained by calibrating the scale with known weights; see the README for details
 scale.tare();        // reset the scale to 0

 Serial.println("After setting up the scale:");

 Serial.print("read: \t\t");
 Serial.println(scale.read());                 // print a raw reading from the ADC

 Serial.print("read average: \t\t");
 Serial.println(scale.read_average(20));       // print the average of 20 readings from the ADC

 Serial.print("get value: \t\t");
 Serial.println(scale.get_value(5)); // print the average of 5 readings from the ADC minus the tare weight, set with tare()

 Serial.print("get units: \t\t");
 Serial.println(scale.get_units(5), 1);        // print the average of 5 readings from the ADC minus tare weight, divided 
// by the SCALE parameter set with set_scale

 Serial.println("Readings:");
}

void loop() {
 for (int x = 0; x < 2000; x++)
 {
     Serial.println(scale.get_units(),1);
 if(Serial.available())
 {
   char c = Serial.read();
   if(c=='l')
     {
       //Serial.println("Descending..");
       digitalWrite(enPin, LOW);
       digitalWrite(dirPin, LOW);      // descend
     }
   if(c=='h')
   {
       //Serial.println("Climbing..");
       digitalWrite(enPin, LOW);
       digitalWrite(dirPin, HIGH);      // climb
   }
   if(c=='s')
   {
     //Serial.println("Stopping..");
     digitalWrite(enPin, HIGH);      // stop
   }
 }
   digitalWrite(stepPin, LOW);
   delayMicroseconds(2);
   digitalWrite(stepPin, HIGH);
   delayMicroseconds(2);
   //Serial.print("one reading:\t");

 //Serial.print("\t| average:\t");
 //Serial.print("\t");
 //Serial.println(scale.get_units(10), 1);
 //scale.power_down();    // put the ADC in sleep mode
   delay(1);    
 //scale.power_up();
 }
}

STEPPER

const int stepPin = 6;
const int dirPin = 7;
const int enPin = 8;

void setup() {
 // put your setup code here, to run once:
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
 digitalWrite(enPin, HIGH);      // stop
  
 Serial.begin(9600);
 Serial.println("h-climb  l-descend  s-stop");
 //////// 1 time movement  /////////
 
//  digitalWrite(dirPin, HIGH);     // descend
//
//  for (int x = 0; x < 6000; x++)
//  {
//    digitalWrite(stepPin, HIGH);
//    delayMicroseconds(2000);
//    digitalWrite(stepPin, LOW);
//    delayMicroseconds(2000);
//  }

}

void loop() 
{
 // put your main code here, to run repeatedly:
 for (int x = 0; x < 2000; x++)
 {
 if(Serial.available())
 {
   char c = Serial.read();
   if(c=='l')
     {
       Serial.println("Descending..");
       digitalWrite(enPin, LOW);
       digitalWrite(dirPin, LOW);      // descend
     }
   if(c=='h')
   {
       Serial.println("Climbing..");
       digitalWrite(enPin, LOW);
       digitalWrite(dirPin, HIGH);      // climb
   }
   if(c=='s')
   {
     Serial.println("Stopping..");
     digitalWrite(enPin, HIGH);      // stop
   }
 }
 
 

///////////// actual move //////////////


   digitalWrite(stepPin, LOW);
   delayMicroseconds(2);
   digitalWrite(stepPin, HIGH);
   delayMicroseconds(2);
   delay(10);
 }
 //delay(2000);    // delay pause in milliseconds

}

HX711_SERIAL

#include "HX711.h"

// HX711.DOUT - pin #A1
// HX711.PD_SCK - pin #A0

HX711 scale(A1, A0); // parameter "gain" is ommited; the default value 128 is used by the library

void setup() {
 Serial.begin(38400);
 Serial.println("HX711 Demo");

 Serial.println("Before setting up the scale:");
 Serial.print("read: \t\t");
 Serial.println(scale.read()); // print a raw reading from the ADC

 Serial.print("read average: \t\t");
 Serial.println(scale.read_average(20));   // print the average of 20 readings from the ADC

 Serial.print("get value: \t\t");
 Serial.println(scale.get_value(5)); // print the average of 5 readings from the ADC minus the tare weight (not set yet)

 Serial.print("get units: \t\t");
 Serial.println(scale.get_units(5), 1); // print the average of 5 readings from the ADC minus tare weight (not set) divided 
// by the SCALE parameter (not set yet)  

 scale.set_scale(2280.f);                      // this value is obtained by calibrating the scale with known weights; see the README for details
 scale.tare();        // reset the scale to 0

 Serial.println("After setting up the scale:");

 Serial.print("read: \t\t");
 Serial.println(scale.read());                 // print a raw reading from the ADC

 Serial.print("read average: \t\t");
 Serial.println(scale.read_average(20));       // print the average of 20 readings from the ADC

 Serial.print("get value: \t\t");
 Serial.println(scale.get_value(5)); // print the average of 5 readings from the ADC minus the tare weight, set with tare()

 Serial.print("get units: \t\t");
 Serial.println(scale.get_units(5), 1);        // print the average of 5 readings from the ADC minus tare weight, divided 
// by the SCALE parameter set with set_scale

 Serial.println("Readings:");
}

void loop() {
 Serial.print("one reading:\t");
 Serial.print(scale.get_units(), 1);
 Serial.print("\t| average:\t");
 Serial.println(scale.get_units(10), 1);

 scale.power_down();        // put the ADC in sleep mode
 delay(100);
 scale.power_up();
}

HX711-master.zip (13.8 KB)

Please post a wiring diagram (not Fritzing) and describe how everything is powered. Post links to the product pages or datasheets of the components.

This code

  digitalWrite(stepPin, LOW);
   delayMicroseconds(2);
   digitalWrite(stepPin, HIGH);
   delayMicroseconds(2);

is trying to make the motor move at 250,000 steps per second. That's ridiculous. Try changing it to

  digitalWrite(stepPin, LOW);
   delayMicroseconds(2);
   digitalWrite(stepPin, HIGH);
   delay(500);

for about 2 steps per second. If that works then gradually increase the speed by reducing the delay()

However delay() is OK in a test program but it is not a good idea to use it is a real program. Have a look at how millis() and micros() are used for non-blocking timing in the second example in this Simple Stepper Code and more generally in Several Things at a Time

...R
Stepper Motor Basics