#1 2016-06-08 09:57:39

Vik300001
Учасник
Зареєстрований: 2016-04-21
Повідомлень: 7

Заготовка электрогитары для токарного

Здравствуйте!
Есть необходимость создать скетч для электронной гитары.
Ессть ардуино мега, дисплей с кнопками на одной плате. подключен драйвер и шаговый...
Для начала хочу создать одноуровневое меню с перечнем подач (0,01мм/об-0,2 мм/об.)
кнопками вверх вниз "бегать" по строкам и кнопками вправо влево выполнять команду ( включать шаговый двигатель, рабочая заготовка уже есть).
Голова уже кипит, везде примеры сложные, а мне надо попроще.
Может кто-то сможет кинуть пример с двумя строками  а я бы может и дописал что мне нужно.
П.С. В гугл не посылайте, я только что от тута.

Неактивний

#2 2016-06-09 13:12:46

Vik300001
Учасник
Зареєстрований: 2016-04-21
Повідомлень: 7

Re: Заготовка электрогитары для токарного

#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)

Неактивний

#3 2016-06-09 20:17:16

Vik300001
Учасник
Зареєстрований: 2016-04-21
Повідомлень: 7

Re: Заготовка электрогитары для токарного

Ну вот, послушал советы подправил програмку, более менее рабочая нужно дошлифовать.
#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);

доходит до конца и все...

Неактивний

#4 2016-08-17 13:01:27

Vlad_Ry
Учасник
Зареєстрований: 2016-08-17
Повідомлень: 1

Re: Заготовка электрогитары для токарного

Ну как, получилась програмка у тебя?   Интересно было бы результат послушать.

Неактивний

#5 2017-02-07 18:20:23

Дмитрий21
Гість

Re: Заготовка электрогитары для токарного

Покупал недавно крутой Epiphone Les Paul Junior у продавца за границей , просто офигеннейшая гитара и бюджетная, были проблемы когда нужно было на карточку перевести деньги,  но помог этот сервис https://www.moneyto.co.uk  если кому то понадобится.

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму