Arduino Code

#include <AccelStepper.h>

// Constructor for the stepper motor
AccelStepper stepper(AccelStepper::DRIVER, 9, 8);

// Constants and Variables

//Arduino Inputs
const int ledBlue = 2;
const int ledGreen = 3;
const int ledRed = 4;
const int backwardsPin = 5;
const int buttonPin = 6;
const int forwardsPin = 7;
const int limitSwitch = 10;

//Other
const int stepsPerRevolution = 200;
const float syringeDiameter10 = 14.3; //mm
const float syringeDiameter20 = 19.6; //mm
bool syringePumping = false;
bool yellow_light = false;
int buttonState = 0;
int forwardsState = 0;
int backwardsState = 0; 
int lastButtonState = HIGH; // Assume the button starts unpressed
int lastLimitState = HIGH;

float pi = 3.14159;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50; // Debounce delay in milliseconds

//Variables to change 
float flowRate = 0.4; // mL/min
float syringeDiameter = syringeDiameter10; // mm

//Equations to calculate flow rate from motor step rate 
float linear_velocity = (flowRate * 1000)/ (60 * pi * sq(syringeDiameter/2));//changes to mm/s
float Revolution_per_second = (linear_velocity / 2); //RPS given a linear_velocity in rev/sec
float steps_per_second = (Revolution_per_second * stepsPerRevolution);

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(limitSwitch,INPUT_PULLUP);
  pinMode(backwardsPin, INPUT_PULLUP);
  pinMode(forwardsPin, INPUT_PULLUP);
  pinMode(ledRed, OUTPUT);
  pinMode(ledGreen, OUTPUT);
  pinMode(ledBlue, OUTPUT);

  stepper.setMaxSpeed(2500);
  stepper.setAcceleration(400);
  stepper.setSpeed(steps_per_second);
  Serial.begin(9600);

}

void loop() {
  int buttonReading = digitalRead(buttonPin);
  int limitSwitchState = digitalRead(limitSwitch);
  int forwardReading = digitalRead(forwardsPin);
  int backwardReading = digitalRead(backwardsPin);
  // Check for a change in the button state

  if (buttonReading != lastButtonState) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (buttonReading != buttonState) {
      buttonState = buttonReading;


      if (buttonState == LOW) {
        // Toggle the syringePumping state
        syringePumping = true;
        forwardReading = HIGH;
        backwardReading = HIGH;
        stepper.setSpeed(400);
        stepper.runSpeed();
        digitalWrite(ledRed, LOW);
        digitalWrite(ledGreen, HIGH);
        digitalWrite(ledBlue, LOW);
        Serial.println("Forward");
        Serial.println(steps_per_second);
      } else {
        syringePumping = false;
         stepper.setSpeed(0);
          analogWrite(ledRed, 255); // Assuming these are digital pins
          analogWrite(ledGreen, 100);
          analogWrite(ledBlue, 0);
          Serial.println("Syringe Pumping: OFF");
      }
    }
  }

  lastButtonState = buttonReading;

  if (limitSwitchState == LOW) {
    syringePumping = false;
    buttonReading = HIGH;
    forwardReading = HIGH;
    yellow_light = false;
    stepper.setSpeed(0);
    digitalWrite(ledRed, HIGH);
    digitalWrite(ledGreen, LOW);
    digitalWrite(ledBlue, LOW);

  }

    if (backwardReading == LOW && syringePumping == false) {
    stepper.setSpeed(-abs(600));
    // Set negative speed for backward direction
    stepper.runSpeed();
    digitalWrite(ledRed, LOW);
    digitalWrite(ledGreen, HIGH);
    digitalWrite(ledBlue, LOW);
  }

  if (forwardReading == LOW && syringePumping == false) {
    syringePumping = true;
    stepper.setSpeed(steps_per_second);
   // Set positive speed for forward direction
    stepper.runSpeed();
    digitalWrite(ledRed, LOW);
    digitalWrite(ledGreen, HIGH);
    digitalWrite(ledBlue, LOW);
  }

  if (forwardReading == HIGH && backwardReading == HIGH && syringePumping == false && limitSwitchState == HIGH) {
    stepper.setSpeed(0);
    yellow_light = true;
    if (yellow_light = true) {} 
      analogWrite(ledRed, 255); // Assuming these are digital pins
      analogWrite(ledGreen, 100);
      analogWrite(ledBlue, 0);
    }
  

  // Continuously run the stepper motor if pumping
  if (syringePumping) {
    stepper.runSpeed();
    Serial.println(steps_per_second);
  }
  }