#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7); // передача в библиотеку подключаемых
const int potpin=A0;
int a=0;
int a1 = 0;
int v=0;
int stop = 4;
int step=13;
int mcsh=0;
int on=6;
int revolutions = 0; // Счётчик оборотов
int stepsPerRevolution = 200; // Количество шагов для полного оборота
int targetRevolutions = 0; // Целевое количество оборотов, заданное потенциометром
int znk;
float el;
void setup() {
pinMode(step, OUTPUT);
pinMode(on, INPUT);
lcd.begin(16, 2);
Serial.begin(9600);
}
void loop() {
// Чтение значения с потенциометра и расчет целевого числа оборотов
int potValue = analogRead(potpin);
targetRevolutions = map(potValue, 0, 1023, 0, 100); // Диапазон 0-99 оборотов
el = targetRevolutions;
while(el > 1){
znk+=1;
el = el/10;
}
// Проверка кнопки старта вращения
if (a == 0 && digitalRead(on) == HIGH) {
a = 1;
}
if (a == 1 && digitalRead(on) == LOW) {
v = 1;
a = 0;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(targetRevolutions);
lcd.setCursor(znk, 0);
lcd.write((uint8_t)0);
}
// Вращение двигателя до достижения целевого числа оборотов
if (v == 1 && revolutions < targetRevolutions) {
digitalWrite(step, HIGH);
delay(5); // Пауза между шагами
digitalWrite(step, LOW);
delay(0);
mcsh++;
// Проверяем полный оборот
if (mcsh >= stepsPerRevolution) {
revolutions++; // Увеличиваем счётчик оборотов
mcsh = 0; // Сброс счётчика шагов
}
}
// Остановка двигателя, когда достигнуто целевое число оборотов
if (revolutions >= targetRevolutions && targetRevolutions != 0) {
v = 0; // Остановка двигателя
mcsh = 0; // Сброс счётчика шагов
revolutions = 0;
lcd.setCursor(0, 1);
lcd.print("Automatic stop");
for (int i = 0; i < 15; i++){
lcd.setCursor(znk + i, 0);
lcd.write((uint8_t)0);
}
}
// Обновление дисплея в зависимости от состояния
if (v == 1) { // Отображение текущих оборотов
lcd.setCursor(0, 1);
lcd.print(revolutions);
lcd.setCursor(11, 0);
lcd.print("start");
} else if (v == 0) { // Отображение целевого числа оборотов
lcd.setCursor(0, 0);
lcd.print(targetRevolutions);
//delay(100);
lcd.setCursor(znk, 0);
lcd.write((uint8_t)0);
//lcd.clear();
}
znk = 0;
}