#include <Bounce2.h>
#define BTN_START A3
Bounce B_BTN_START = Bounce();
#include "A4988.h"
#define MOTOR_STEPS 200 //全步脉冲
#define MICROSTEPPING 16 //细分
#define RPM 50
#define S1_DIR 5
#define S1_STEP 2
#define S2_DIR 6
#define S2_STEP 3
#define S3_DIR 7
#define S3_STEP 4
#define S4_DIR 13
#define S4_STEP 12
A4988 stepper1(MOTOR_STEPS, S1_DIR, S1_STEP);
A4988 stepper2(MOTOR_STEPS, S2_STEP, S2_STEP);
A4988 stepper3(MOTOR_STEPS, S3_STEP, S3_STEP);
A4988 stepper4(MOTOR_STEPS, S4_STEP, S4_STEP);
int FORWARD = 3200;
int REVERSE = 800;
#include <Wire.h>
#include "LiquidCrystal_I2C_Menu.h"
LiquidCrystal_I2C_Menu lcd(0x27, 16, 2);
// Пины, к которым подключен энкодер
#define pinCLK A1
#define pinDT A0
#define pinSW A2
// Объявим перечисление, используемое в качестве ключа пунктов меню
enum {mkBack, mkRoot, mkRPM, mkFORWARD, mkREVERSE};
// Описание меню
// структура пункта меню: {ParentKey, Key, Caption, [Handler]}
sMenuItem menu[] = {
{mkBack, mkRoot, "Filling machine"},
{mkRoot, mkRPM, "RPM"},//转速
{mkRoot, mkFORWARD, "FORWARD"},//正转多少个脉冲
{mkRoot, mkREVERSE, "REVERSE"},//反转多少个脉冲
{mkRoot, mkBack, "Back"},
};
uint8_t menuLen = sizeof(menu) / sizeof(sMenuItem);
void setup() {
Serial.begin(115200);
lcd.begin();
lcd.attachEncoder(pinDT, pinCLK, pinSW);
stepper1.begin(RPM, MICROSTEPPING);
stepper2.begin(RPM, MICROSTEPPING);
stepper3.begin(RPM, MICROSTEPPING);
stepper4.begin(RPM, MICROSTEPPING);
B_BTN_START.attach(BTN_START, INPUT_PULLUP); //按钮_启动-含消抖
}
void loop() {
// Показываем меню
Serial.println("AA");
uint8_t selectedMenuItem = lcd.showMenu(menu, menuLen, 1);
// И выполняем действия в соответствии с выбранным пунктом
if (selectedMenuItem == mkRPM){
lcd.printf("RPM:%d",RPM);
}
else if (selectedMenuItem == mkFORWARD) {
FORWARD = lcd.inputVal <long> ("FORWARD", 0, 10000, FORWARD, 100);
lcd.print("Done.");
}
else if (selectedMenuItem == mkREVERSE) {
REVERSE = lcd.inputVal <long> ("REVERSE", 0, 10000, REVERSE, 100);
lcd.print("Done.");
}
else if (selectedMenuItem == mkBack) {
lcd.print("Exit selected");
}
while (lcd.getEncoderState() == eNone){
Serial.println("AAAAA");
}
Serial.println("AA");
B_BTN_START.update();
if (B_BTN_START.rose()) {
Serial.println("START");
stepper1.move(FORWARD);
stepper1.move(-REVERSE);
}
delay(100);
}