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)