#include <AccelStepper.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <Encoder.h>
#include <HX711.h>
// OLED display
Adafruit_SSD1306 display(4);
// Rotary encoder
Encoder myEnc(3, 2);
// HX711 Load cell
HX711 scale;
// Stepper motor
AccelStepper stepper(1, 8, 9);
int stepsPerRevolution = 200;
float mmPerRevolution = 5.08;
float mmPerStep = mmPerRevolution / stepsPerRevolution;
float targetPosition = 0;
float currentPosition = 0;
void setup() {
// OLED display
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.display();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
// Rotary encoder
// myEnc.setSensitivity(1); // remove this line
// HX711 Load cell
scale.begin(A3,A2);
scale.set_scale();
// Stepper motor
stepper.setMaxSpeed(1000);
stepper.setAcceleration(500);
stepper.setSpeed(1000);
}
void loop() {
// Read rotary encoder
targetPosition = myEnc.read()*0.25;
stepper.moveTo(targetPosition);
stepper.run();
// Read HX711 Load cell
float weight = scale.get_units();
// Display position and weight on OLED display
display.clearDisplay();
display.setCursor(0,0);
display.print("Height: ");
display.print(targetPosition * mmPerStep, 3);
display.print("mm");
display.setCursor(0,10);
display.print("Force: ");
display.print(weight * 0.238 * 0.9807 * 0.1);
display.print("N");
display.display();
}