Ви не увійшли.
Здравствуйте!
Есть необходимость создать скетч для электронной гитары.
Ессть ардуино мега, дисплей с кнопками на одной плате. подключен драйвер и шаговый...
Для начала хочу создать одноуровневое меню с перечнем подач (0,01мм/об-0,2 мм/об.)
кнопками вверх вниз "бегать" по строкам и кнопками вправо влево выполнять команду ( включать шаговый двигатель, рабочая заготовка уже есть).
Голова уже кипит, везде примеры сложные, а мне надо попроще.
Может кто-то сможет кинуть пример с двумя строками а я бы может и дописал что мне нужно.
П.С. В гугл не посылайте, я только что от тута.
Неактивний
#include <Wire.h> // добавляем необходимые библиотеки
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7 );
// Нажатые кнопки
int button;
const int BUTTON_NONE = 0;
const int BUTTON_RIGHT = 1;
const int BUTTON_UP = 2;
const int BUTTON_DOWN = 3;
const int BUTTON_LEFT = 4;
const int BUTTON_SELECT = 5;
int Line_menu=0;
int getPressedButton()
{
int buttonValue = analogRead(0); // считываем значения с аналогового входа(A0)
if (buttonValue < 100) {
return BUTTON_RIGHT;
}
else if (buttonValue < 200) {
return BUTTON_UP;
}
else if (buttonValue < 400){
return BUTTON_DOWN;
}
else if (buttonValue < 600){
return BUTTON_LEFT;
}
else if (buttonValue < 800){
return BUTTON_SELECT;
}
return BUTTON_NONE;
}
void setup()
{
lcd.begin(16, 2);
// lcd.print("zelectro.com.ua");
}
void loop()
{
button = getPressedButton();
switch (button)
{
// case BUTTON_RIGHT: // при нажатии кнопки выводим следующий текст
// lcd.setCursor(0, 0);
// lcd.print(" ");
// lcd.setCursor(0, 0);
// lcd.print("BUTTON: RIGHT");
break;
// case BUTTON_LEFT:
// lcd.setCursor(0, 0);
// lcd.print(" ");
// lcd.setCursor(0, 0);
// lcd.print("BUTTON: LEFT");
// break;
case BUTTON_UP:
Line_menu=++Line_menu;
if (Line_menu==2)
{
Line_menu=0;
}
// lcd.setCursor(0, 0);
// lcd.print(" ");
// lcd.setCursor(0, 0);
// lcd.print("BUTTON: UP");
break;
case BUTTON_DOWN:
Line_menu=--Line_menu;
if (Line_menu==-1)
{
Line_menu=1;
}
// lcd.setCursor(0, 0);
// lcd.print(" ");
// lcd.setCursor(0, 0);
// lcd.print("BUTTON: DOWN");
break;
// case BUTTON_SELECT:
// lcd.setCursor(0, 0);
// lcd.print(" ");
// lcd.setCursor(0, 0);
// lcd.print("BUTTON: SELECT");
// break;
}
{
if (Line_menu=0)
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Podacha mm/ob");
lcd.setCursor(0, 1);
lcd.print("0.01");
delay (1000);
if (Line_menu=1)
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Podacha mm/ob");
lcd.setCursor(0, 2);
lcd.print("0.01");
delay(1000);
}
}
Вот код но при нажатии вверх вниз на практике не переключает меню светит как будто Line_menu=0
Остання редакція Vik300001 (2016-06-09 13:15:23)
Неактивний
Ну вот, послушал советы подправил програмку, более менее рабочая нужно дошлифовать.
#include <LiquidCrystal.h>
#include <Stepper.h>
//Подключение шагового двигателя
int pul = 19;
int dir = 21;
// Initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//States for the menu.
int currentMenuItem = 0;
int lastState = 0;
void setup() {
//Set the characters and column numbers.
lcd.begin(16, 2);
//Print default title.
clearPrintTitle();
//Параметры шагового двигателя
pinMode(pul, OUTPUT);
pinMode(dir, OUTPUT);
}
void loop() {
//Call the main menu.
mainMenu();
}
void mainMenu() {
//State = 0 every loop cycle.
int state = 0;
//Refresh the button pressed.
int x = analogRead (0);
//Set the Row 0, Col 0 position.
lcd.setCursor(0,0);
//Check analog values from LCD Keypad Shield
if (x < 100) {
//Right
state = 4;
} else if (x < 200) {
//Up
state = 1;
} else if (x < 400){
//Down
state = 2;
} else if (x < 600){
//Left
state = 5;
} else if (x < 800){
//Select
state = 3;
}
//If we are out of bounds on th menu then reset it.
if (currentMenuItem < 0 || currentMenuItem > 13) {
currentMenuItem = 0;
}
//If we have changed Index, saves re-draws.
if (state != lastState) {
if (state == 1) {
//If Up
currentMenuItem = currentMenuItem - 1;
displayMenu(currentMenuItem);
} else if (state == 2) {
//If Down
currentMenuItem = currentMenuItem + 1;
displayMenu(currentMenuItem);
} else if (state == 3) {
//If Selected
//selectMenu(currentMenuItem);
} else if (state == 4) {
//If RIGHT
rightMenu(currentMenuItem);
} else if (state == 5) {
//If LEFT
leftMenu(currentMenuItem);
}
//Save the last State to compare.
lastState = state;
}
//Small delay
delay(5);
}
//Display Menu Option based on Index.
void displayMenu(int x) {
switch (x) {
case 1:
clearPrintTitle();
lcd.print ("0.01");
break;
case 2:
clearPrintTitle();
lcd.print ("0.015");
break;
case 3:
clearPrintTitle();
lcd.print ("0.02");
break;
case 4:
clearPrintTitle();
lcd.print ("0.03");
break;
case 5:
clearPrintTitle();
lcd.print ("0.04");
break;
case 6:
clearPrintTitle();
lcd.print ("0.06");
break;
case 7:
clearPrintTitle();
lcd.print ("0.08");
break;
case 8:
clearPrintTitle();
lcd.print ("0.1");
break;
case 9:
clearPrintTitle();
lcd.print ("0.13");
break;
case 10:
clearPrintTitle();
lcd.print ("0.15");
break;
case 11:
clearPrintTitle();
lcd.print ("0.18");
break;
case 12:
clearPrintTitle();
lcd.print ("0.20");
break;
case 13:
clearPrintTitle();
lcd.print ("0.22");
break;
}
}
//Print a basic header on Row 1.
void clearPrintTitle() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Podacha mm/ob ");
lcd.setCursor(0,1);
}
//Show the rightMenu on Screen.
void rightMenu(int x) {
switch (x) {
case 1:
clearPrintTitle();
lcd.print ("0.01 >>");
// break;
digitalWrite(dir, HIGH);
digitalWrite(pul, HIGH);
delayMicroseconds(5111);
digitalWrite(pul, LOW);
delayMicroseconds(5111);
//Call the function that belongs to Option 1
case 2:
clearPrintTitle();
lcd.print ("0.015 >>");
//Call the function that belongs to Option 2
break;
case 3:
clearPrintTitle();
lcd.print ("0.02 >>");
//Call the function that belongs to Option 3
break;
case 4:
clearPrintTitle();
lcd.print ("0.03 >>");
//Call the function that belongs to Option 4
break;
case 5:
clearPrintTitle();
lcd.print ("0.04 >>");
//Call the function that belongs to Option 5
break;
case 6:
clearPrintTitle();
lcd.print ("0.06 >>");
//Call the function that belongs to Option 6
break;
case 7:
clearPrintTitle();
lcd.print ("0.08 >>");
//Call the function that belongs to Option 7
break;
case 8:
clearPrintTitle();
lcd.print ("0.1 >>");
//Call the function that belongs to Option 8
break;
case 9:
clearPrintTitle();
lcd.print ("0.13 >>");
//Call the function that belongs to Option 9
break;
case 10:
clearPrintTitle();
lcd.print ("0.15 >>");
//Call the function that belongs to Option 10
break;
case 11:
clearPrintTitle();
lcd.print ("0.18 >>");
//Call the function that belongs to Option 11
break;
case 12:
clearPrintTitle();
lcd.print ("0.2 >>");
//Call the function that belongs to Option 12
break;
case 13:
clearPrintTitle();
lcd.print ("0.22 >>");
//Call the function that belongs to Option 13
break;
}
}
//Show the leftMenu on Screen.
void leftMenu(int x) {
switch (x) {
case 1:
clearPrintTitle();
lcd.print ("0.01 <<");
//Call the function that belongs to Option 1
//break;
digitalWrite(dir, LOW);
digitalWrite(pul, HIGH);
delayMicroseconds(5111);
digitalWrite(pul, LOW);
delayMicroseconds(5111);
case 2:
clearPrintTitle();
lcd.print ("0.015 <<");
//Call the function that belongs to Option 2
break;
case 3:
clearPrintTitle();
lcd.print ("0.02 <<");
//Call the function that belongs to Option 3
break;
case 4:
clearPrintTitle();
lcd.print ("0.03 <<");
//Call the function that belongs to Option 4
break;
case 5:
clearPrintTitle();
lcd.print ("0.04 <<");
//Call the function that belongs to Option 5
break;
case 6:
clearPrintTitle();
lcd.print ("0.06 <<");
//Call the function that belongs to Option 6
break;
case 7:
clearPrintTitle();
lcd.print ("0.08 <<");
//Call the function that belongs to Option 7
break;
case 8:
clearPrintTitle();
lcd.print ("0.1 <<");
//Call the function that belongs to Option 8
break;
case 9:
clearPrintTitle();
lcd.print ("0.13 <<");
//Call the function that belongs to Option 9
break;
case 10:
clearPrintTitle();
lcd.print ("0.15 <<");
//Call the function that belongs to Option 10
break;
case 11:
clearPrintTitle();
lcd.print ("0.18 <<");
//Call the function that belongs to Option 11
break;
case 12:
clearPrintTitle();
lcd.print ("0.2 <<");
//Call the function that belongs to Option 12
break;
case 13:
clearPrintTitle();
lcd.print ("0.22 <<");
//Call the function that belongs to Option 13
break;
}
}
Сейчас думаю ка заставить подавать сигналы для шагового двигателя по кругу.
вот отрезок кода
case 1:
clearPrintTitle();
lcd.print ("0.01 <<");
//Call the function that belongs to Option 1
//break;
digitalWrite(dir, LOW);
digitalWrite(pul, HIGH);
delayMicroseconds(5111);
digitalWrite(pul, LOW);
delayMicroseconds(5111);
доходит до конца и все...
Неактивний
Покупал недавно крутой Epiphone Les Paul Junior у продавца за границей , просто офигеннейшая гитара и бюджетная, были проблемы когда нужно было на карточку перевести деньги, но помог этот сервис https://www.moneyto.co.uk если кому то понадобится.