Шд + меню и 5 кнопок (help)

SONIC300077
Offline
Зарегистрирован: 15.10.2013

   Вот так работает мой скетч http://youtu.be/zYI5G8f9034  два пункта меню первом задаем скорость, во втором количество шагов меню управляется 3-мя кнопками, две оставшиеся запускают двигатель согласно заданным параметрам она крутит в одну стороны другая в другую !

А мне нужно чтобы одна кнопка запускала двигатель а вторая только меняла направление вращения? как это сделать не могу сообразить ??

вот собственно сам скетч:

// Собственно библиотека
#include <EEPROM.h>
#include "EEPROMAnything.h"
#include <Stepper.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>//#include <LiquidCrystal.h>

LiquidCrystal_I2C lcd(0x27,20,4);//LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int m=0; //переменная для экранов меню
// количество шагов мотора
#define STEPS 200

// создает класс шагового двигателя и объявляет какими ножками Ардуино
Stepper stepper(STEPS,2,3);

int Step_rev = 0;

int Speed =0;


#define ButtonUp  7
#define ButtonLeft  A0
#define ButtonRight A1
#define ButtonMode  A2
#define ButtonStop  A3


void setup(){
  digitalRead(ButtonUp);
  digitalRead(ButtonLeft);
  digitalRead(ButtonRight);
  digitalRead(ButtonMode);
  digitalRead(ButtonStop);
  
  lcd.init();
  lcd.backlight(); //Выведем на дисплей стартовое сообщение на 2 секунды
  lcd.setCursor(0, 0);
  lcd.print("    *****    ");
  lcd.setCursor(5, 1);
  lcd.print("Motor");
  delay(3000);
  lcd.clear();
  
  EEPROM_readAnything(0, Step_rev);//Считаем из постоянной памяти заданную температуру
  EEPROM_readAnything(20, Speed);

}

void loop() {
  
  
  //Обработка нажатия кнопки меню
  if (digitalRead(ButtonLeft) == HIGH)
  {
  m++;//увеличиваем переменную уровня меню
  if (m>2)//если уровень больше 2
  {
  m=0;// то вернуться к началу
  }
  delay (300);
  lcd.clear();
  }
 
 //Обработка нажатия кнопки
if (digitalRead(ButtonMode) == HIGH)

{
  // один полный круг вперед
  stepper.setSpeed(Speed);
  stepper.step(Step_rev);
  
}
 //Обработка нажатия кнопки
if (digitalRead(ButtonUp) == HIGH)

{
  // один полный круг вперед
  stepper.setSpeed(Speed);
  stepper.step(-Step_rev);
  
}
//Обработка нажатия для Kontur - 1 +
    if (digitalRead(ButtonRight) == HIGH && m==1)//если находимся на экране с переменной Kontur - 1
  {
  Step_rev++;//то при нажатии кнопки + увеличиваем переменную Step_rev на единицу
  if (Step_rev>800)//если переменная достигла придела в 800 едениц
  {
  Step_rev=0;//то возвращаем ее к 0
  }
  delay (50);
  lcd.clear();
  }
//Обработка нажатия для Kontur - 1 -
    if (digitalRead(ButtonStop) == HIGH && m==1)//если находимся на экране с переменной Kontur - 1
  {
  Step_rev--;//то при нажатии кнопки - уменьшаем переменную Step_rev на единицу
  if (Step_rev<0)//если переменная достигла придела в 0 едениц
  {
  Step_rev=800;//то возвращаем ее к 800
  }
  delay (50);
  lcd.clear();
  }

  //speed
  //Обработка нажатия для Kontur - 1 +
    if (digitalRead(ButtonRight) == HIGH && m==2)//если находимся на экране с переменной Kontur - 1
  {
  Speed++;//то при нажатии кнопки + увеличиваем переменную Speed на единицу
  if (Speed>300)//если переменная достигла придела в 300 едениц
  {
  Speed=0;//то возвращаем ее к 0
  }
  delay (50);
  lcd.clear();
  }
  //speed
  if (digitalRead(ButtonStop) == HIGH && m==2)//если находимся на экране с переменной Kontur - 1
  {
  Speed--;//то при нажатии кнопки - уменьшаем переменную Speed на единицу
  if (Speed<0)//если переменная достигла придела в 0 едениц
  {
  Speed=300;//то возвращаем ее к 300
  }
  delay (50);
  lcd.clear();
  }
  
  //menu
  if (m==0){
    
  lcd.setCursor(0, 0);
  lcd.print("Steps: ");
  lcd.print(Step_rev);
  lcd.setCursor(0, 1);
  lcd.print("Speed: ");
  lcd.print(Speed);
  
  }
  
  else if (m==1)
  {
  lcd.setCursor(0, 0);
  lcd.print(" Steps = ");
  lcd.print(Step_rev);
  }
  
  else if (m==2)
  {
  lcd.setCursor(0, 0);
  lcd.print(" Speed = ");
  lcd.print(Speed);
  }
  

  
  if (digitalRead(ButtonLeft) == HIGH){
    EEPROM_writeAnything(0, Step_rev);
    EEPROM_writeAnything(2, Speed);
    
    }
  
}

 

SONIC300077
Offline
Зарегистрирован: 15.10.2013
Roman
Offline
Зарегистрирован: 15.02.2013

как то так

  if (push == 1 && flag == 0)
  {
    flag = 1;
    //задание вращение по часовой
  }
  
  if (push == 1 && flag == 1)
  {
    flag = 0;
    //задание вращение против часовой
  }

и на Вашем месте я бы подключил все кнопки на один аналоговый вход через резисторы. Могу дать схему.

sivanko
Offline
Зарегистрирован: 25.02.2016

Добрый день.Под какую плату скетч? А как переделать скетч для работы с Ардуино уно и LCd дисплеем с кнопками?