#define STEPPER_STEPS 200
#define PIN_STEP_DISTRIBUTER1 23
#define PIN_DIR_DISTRIBUTER1 19
#define PIN_STEP_DISTRIBUTER2 18
#define PIN_DIR_DISTRIBUTER2 5
#define PIN_STEP_MOVER 4
#define PIN_DIR_MOVER 2
#define PIN_STEP_ROLLER 17
#define PIN_DIR_ROLLER 16
#define PIN_SERVO_CLOSER 14
#define PIN_SERVO_WATER 12
#define PIN_ENCODER_CLK 34
#define PIN_ENCODER_DT 35
#define PIN_ENCODER_SW 32
#define PIN_BUTTON 33
#define PIN_ENDSWITCH 15
#include "user_interface.h"
#include "runner.h"
#include "roller.h"
//------------USER-INTERFACE--------
UserInterface userinterface(int(PIN_ENCODER_CLK), int(PIN_ENCODER_DT), int(PIN_ENCODER_SW), int(PIN_BUTTON));
//------------RUNNER-----------------
Runner runner(int(PIN_STEP_DISTRIBUTER1), int(PIN_DIR_DISTRIBUTER1), int(PIN_STEP_DISTRIBUTER2), int(PIN_DIR_DISTRIBUTER2), int(PIN_STEP_MOVER), int(PIN_DIR_MOVER), int(PIN_ENDSWITCH));
//------------ROLLER-----------------
Roller roller(int(PIN_STEP_ROLLER), int(PIN_DIR_ROLLER), int(PIN_SERVO_CLOSER), int(PIN_SERVO_WATER));
void IRAM_ATTR limitSwitchHandler()
{
//runner.mover.setLimitSwitchActive(runner.mover.LIMIT_SWITCH_COMBINED_BEGIN_AND_END);
// lastDebounceTime = millis();
}
void setup() {
Serial.begin(115200);
pinMode(PIN_ENDSWITCH, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(PIN_ENDSWITCH), limitSwitchHandler, CHANGE);
// Setup Userinterface
userinterface.setupUserInterface();
runner.setupRunner();
roller.setupRoller();
}
void loop() {
userinterface.updateInterface();
// ardprintf("Ratio: %f, Mover Speed: %f, Roller Speed: %f, Closer Angle: %f, Water Angle: %f", userinterface.herb_ratio, userinterface.mover_speed_proportion, userinterface.roller_speed_proportion, userinterface.closer_angle_proportion, userinterface.water_angle_proportion);
if (userinterface.do_rolling){
// Do runner actions
runner.setSpeed(userinterface.herb_ratio, userinterface.mover_speed_proportion);
runner.moveHome();
runner.startDistribution();
// Do roller actions
roller.setCloser(1, userinterface.closer_angle_proportion);
roller.startRolling(userinterface.roller_speed_proportion);
roller.setWater(1, userinterface.water_angle_proportion);
delay(1000);
roller.setWater(0, userinterface.water_angle_proportion);
roller.finalRoll(userinterface.roller_speed_proportion);
roller.setCloser(0, userinterface.closer_angle_proportion);
userinterface.set_do_rolling(false);
}
if (userinterface.do_autohome){
runner.moveHome();
userinterface.set_do_autohome(false);
}
delay(10); // this speeds up the simulation
}