Hi all,
I am creating a box that opens when the load sensor feels something is on a scale. The box opens up with a servo motor.
The load sensor is working perfectly, using a hx711 signal amplifier.
The servo is working perfectly.
When I put them together, the load sensor stops working and i get 1 repetitive (wrong) weight.
I tried to debug and found that the line that makes this happen is:
myservo.attach(9); // attaches the servo on pin 9 to the servo object
Anyone?
I tried changing inputs and outputs, no luck.
Here is the complete code:
#include "HX711.h"
#include <Servo.h>
// HX711 circuit wiring
const int LOADCELL_DOUT_PIN = 2;
const int LOADCELL_SCK_PIN = 3;
Servo myservo; // create servo object to control a servo
HX711 scale;
int led = 13; // the pin the LED is connected to
const int openTime = 10; // seconds to open box
unsigned long currentMillis;
unsigned long startMillis;
unsigned long elapsedMillis;
void setup() {
Serial.begin(38400);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
myservo.write(70);
startMillis = millis();
pinMode(led, OUTPUT); // Declare the LED as an output
digitalWrite(led, LOW); // Make sure LED is off
Serial.println("HX711 Demo");
Serial.println("Initializing the scale");
// Initialize library with data output pin, clock input pin and gain factor.
// Channel selection is made by passing the appropriate gain:
// - With a gain factor of 64 or 128, channel A is selected
// - With a gain factor of 32, channel B is selected
// By omitting the gain factor parameter, the library
// default "128" (Channel A) is used here.
scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN);
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()*2.53, 1);
Serial.print("\t| average:\t");
Serial.println(scale.get_units(10), 1);
if (scale.get_units()*2.53 > 100)
{
currentMillis = millis()/1000;
digitalWrite(led, HIGH); // Turn the LED on
delay(openTime*1000);
myservo.write(170);
while(scale.get_units()*2.53 > 100); {
digitalWrite(led, LOW); // Turn the LED off
delay(1000);// Wait for 1000 milliseconds (1 second) // 1 h = 3600000 ms
digitalWrite(led, HIGH); // Turn the LED on
delay(1000);// Wait for 1000 milliseconds (1 second) // 1 h = 3600000 ms
}
}
scale.power_down(); // put the ADC in sleep mode
delay(1000);
scale.power_up();
}