Переключение между страницами кнопками
- Войдите на сайт для отправки комментариев
Добрый всем день/ночь.
История такова:
Не догоняю вроде бы простых вещей, Help me pls.
Как создать несколько экранов и сделать переключение между ними кнопками "BTN_LEFT" и "BTN_RIGHT".
А так же на одном из экранов сделать, а именно на экране 3(так назван в скетче) сделать изменение параметра "n" в онлайн режиме кнопками "UP" и "DOWN". Например: нажимаешь "OK" и число "3000" начинает мигать(или не обязательно, но так будет интуитивно понятнее что собрались менять число) и кнопками "UP" и "DOWN" ставишь сколько нужно(например от 0 до 9000) и повторным нажатием OK подтверждаем выбор и перестаёт мигать, а следовательно, все вычисления уже будут идти с учётом выбранного "n". Козырно было бы если б ещё при долгом нажатии на кнопку "UP" или "DOWN" изменение числа происходило бы быстрее...а то с 9000 до 250 кнопка быстрее перестанет работать...или терпение :D
//библиотеки #include <LiquidCrystal.h> //------------------------------------------------------------------------------------------------------------------------------ //соединение платы с дисплеем LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //------------------------------------------------------------------------------------------------------------------------------ //кнопки #define BTN_UP 1 #define BTN_DOWN 2 #define BTN_LEFT 3 #define BTN_RIGHT 4 #define BTN_OK 5 #define BTN_NONE 10 //------------------------------------------------------------------------------------------------------------------------------ //соединение платы с аксилирометром const int osevaya = A1; //X акселерометра - А1 const int gorizont = A2; //Y акселерометра - А2 const int vertical = A3; //Z акселерометра - А3 //------------------------------------------------------------------------------------------------------------------------------ //определяем, какая кнопка нажата (А0) int detectButton() { int keyAnalog = analogRead(A0); if (keyAnalog < 100) { // Значение меньше 100 – нажата кнопка right return BTN_RIGHT; } else if (keyAnalog < 200) { // Значение больше 100 (иначе мы бы вошли в предыдущий блок результата сравнения, но меньше 200 – нажата кнопка UP return BTN_UP; } else if (keyAnalog < 400) { // Значение больше 200, но меньше 400 – нажата кнопка DOWN return BTN_DOWN; } else if (keyAnalog < 600) { // Значение больше 400, но меньше 600 – нажата кнопка LEFT return BTN_LEFT; } else if (keyAnalog < 800) { // Значение больше 600, но меньше 800 – нажата кнопка SELECT return BTN_OK; } else { // Все остальные значения (до 1023) будут означать, что нажатий не было return BTN_NONE; } } //------------------------------------------------------------------------------------------------------------------------------ //ПЕРИОД СЧИТЫВАНИЯ int pause = 500; //------------------------------------------------------------------------------------------------------------------------------ //переменные float aX = 0; float aY = 0; float aZ = 0; float Gx = 0; //ускорение в м/сек2 float Gy = 0; //ускорение в м/сек2 float Gz = 0; //ускорение в м/сек2 float Vx = 0; //виброскорость в мм/с float Vy = 0; //виброскорость в мм/с float Vz = 0; //виброскорость в мм/с float Vxm = 0; // модуль виброскорости float Vym = 0; // модуль виброскорости float Vzm = 0; // модуль виброскорости float Sx = 0; //виброперемещение в мкм float Sy = 0; //виброперемещение в мкм float Sz = 0; //виброперемещение в мкм int Sxm = 0; // модуль виброперемещения int Sym = 0; // модуль виброперемещения int Szm = 0; // модуль виброперемещения float VskzX = 0; //виброскорость СКЗ float VskzY = 0; //виброскорость СКЗ float VskzZ = 0; //виброскорость СКЗ float VskzXm = 0; //модуль виброскорости СКЗ float VskzYm = 0; //модуль виброскорости СКЗ float VskzZm = 0; //модуль виброскорости СКЗ float SskzXm = 0; //модуль виброперемещения СКЗ float SskzYm = 0; //модуль виброперемещения СКЗ float SskzZm = 0; //модуль виброперемещения СКЗ //----------------------------------------------------------------------------------------- //Меняющаяся переменная float f; // частота вращения в Гц (50 Гц = 3000 об/мин) int n = 3000; //----------------------------------------------------------------------------------------- void setup() { // подготовка // initialize serial communications at 9600 bps: Serial.begin(9600); // initialize lcd communications: lcd.begin(16, 2); } void loop() { // Работа f = n / 60; // частота вращения ротора //----------------------------------------------------------------------------------------- //Снимаем показания с аксилирометра aX = analogRead(gorizont); // Чтение параметра по оси X aY = analogRead(vertical); // Чтение параметра по оси Y aZ = analogRead(osevaya); // Чтение параметра по оси Z //52 это показание акселерометра в состоянии покоя от нулевой точки(пока в теории, для каких ниюудь наглядных данных Gx = (aX - 512) / 52; //Перевод параметра в виброускорение(м/с2) по оси X Gy = (aY - 512) / 52; //Перевод параметра в виброускорение(м/с2) по оси Y Gz = (aZ - 512) / 52; //Перевод параметра в виброускорение(м/с2) по оси Z //----------------------------------------------------------------------------------------- //Вычисление виброскорости Vx = 112.5 * Gx / f; //Перевод ускорения в виброскорость(мм/с) по оси X на определённой частоте Vy = 112.5 * Gy / f; //Перевод ускорения в виброскорость(мм/с) по оси Y на определённой частоте Vz = 112.5 * Gz / f; //Перевод ускорения в виброскорость(мм/с) по оси Z на определённой частоте Vxm = abs(Vx); //модуль значения Vym = abs(Vy); //модуль значения Vzm = abs(Vz); //модуль значения //----------------------------------------------------------------------------------------- //Вычисление виброперемещения Sx = 50712 * Gx / sq(f); //Перевод ускорения в виброперемещение(мкм) по оси X на определённой частоте Sy = 50712 * Gy / sq(f); //Перевод ускорения в виброперемещение(мкм) по оси Y на определённой частоте Sz = 50712 * Gz / sq(f); //Перевод ускорения в виброперемещение(мкм) по оси Z на определённой частоте Sxm = abs(Sx); //модуль значения Sym = abs(Sy); //модуль значения Szm = abs(Sz); //модуль значения //----------------------------------------------------------------------------------------- //Вычисление среднеквадратичных значений ?????????????????????????? //-------------------------------------------------------------------------------------------- //Вывод значений в порт Serial.print("Vxm = " ); Serial.print(Vxm); Serial.print(" "); Serial.print("Vym = " ); Serial.print(Vym); Serial.print(" "); Serial.print("Vzm = " ); Serial.print(Vzm); Serial.print(" "); Serial.print("Sxm = " ); Serial.print(Sxm); Serial.print(" "); Serial.print("Sym = " ); Serial.print(Sym); Serial.print(" "); Serial.print("Szm = " ); Serial.print(Szm); Serial.println(); //Вывод значений на дисплей. Экран 1 //Виброскорость - СКЗ //lcd.setCursor(0, 0); //lcd.print("Vibration mm/sec"); //lcd.setCursor(0, 1); //lcd.print((float)Vxm,1); //lcd.setCursor(6, 1); //lcd.print((float)Vym,1); //lcd.setCursor(12, 1); //lcd.print((float)Vzm,1); //delay(pause); //lcd.setCursor(0, 1); //lcd.print(" "); //Вывод значений на дисплей. Экран 2 //Виброперемещение - СКЗ //lcd.setCursor(0, 0); //lcd.print("Vibration mkm"); //lcd.setCursor(0, 1); //lcd.print(Sxm); //lcd.setCursor(6, 1); //lcd.print(Sym); //lcd.setCursor(12, 1); //lcd.print(Szm); //delay(pause); //lcd.setCursor(0, 1); //lcd.print(" "); //Вывод значений на дисплей. Экран 3 //Виброскорость на определённой частоте lcd.setCursor(0, 0); lcd.print("Speed="); lcd.setCursor(6, 0); lcd.print(n); lcd.setCursor(0, 1); lcd.print((float)Vxm,1); lcd.setCursor(5, 1); lcd.print((float)Vym,1); lcd.setCursor(11, 1); lcd.print((float)Vzm,1); delay(pause); lcd.setCursor(0, 1); lcd.print(" "); //-------------------------------------------------------------------------------------------- }
для начала научиться избавляться от delay. Помигайте диодом без delay. потом переменной на экране, ну и далее по списку. Слона едят по кускам.
и вообще странный вопрос "как". детский прям. для этого нужно научиться хоть немного программировать. И такие вопросы станут не актуальны. А ещё можно сделать за деньги, обратившись в ищу исполнителя.