Шд + меню и 5 кнопок (help)
- Войдите на сайт для отправки комментариев
Втр, 06/05/2014 - 18:40
Вот так работает мой скетч 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);
}
}
http://www.youtube.com/watch?feature=player_embedded&v=zYI5G8f9034
как то так
if (push == 1 && flag == 0) { flag = 1; //задание вращение по часовой } if (push == 1 && flag == 1) { flag = 0; //задание вращение против часовой }и на Вашем месте я бы подключил все кнопки на один аналоговый вход через резисторы. Могу дать схему.
Добрый день.Под какую плату скетч? А как переделать скетч для работы с Ардуино уно и LCd дисплеем с кнопками?