Шд + меню и 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
как то так
и на Вашем месте я бы подключил все кнопки на один аналоговый вход через резисторы. Могу дать схему.
Добрый день.Под какую плату скетч? А как переделать скетч для работы с Ардуино уно и LCd дисплеем с кнопками?