?изменение переменной на LCD с помощью кнопок

Tisha
Offline
Зарегистрирован: 10.12.2015

ребят... помогите чайнику... столкнулся с проблемой реализации изменения значений на дисплее

имеются 4 кнопки, две из которых и должны изменять эти самые значения на LCD...

нашел подобный пример...смотрим ниже..

https://www.youtube.com/watch?v=0jBfdILru-4

мне нужно примерно тоже самое, но без переходов между меню...

структура моего кода такая

#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 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:
       lcd.setCursor(0, 0); 
       lcd.print("                  "); 
       lcd.setCursor(0, 0);
       lcd.print("BUTTON: UP");
       break;
    case BUTTON_DOWN:
       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;
  }
}

естессно это не код... но на его базе все сделал...

кнопками ввер и вниз хотел бы менять значение с шагом 10 в диапазоне от 0 до 100

ПОМОГИТЕ ПЛИЗ

Araris
Offline
Зарегистрирован: 09.11.2012

Да, это лишь заготовка кода, и что Вы сделали на его базе - неведомо, предполагаю, что ничего.

Между case и break поместите команды изменения значения и проверки его на вхождение в диапазон.

Tisha
Offline
Зарегистрирован: 10.12.2015

при всем уважении... не надо предпологать... надо помочь...

я понимаю что надо поместить команды... но к сожалению наглядных примеров я не нашел...

если можно, покажите команды и переменные которые мне потребуются..

Sindbad
Offline
Зарегистрирован: 08.12.2015

Tisha пишет:

естессно это не код... но на его базе все сделал...

Вот Вам и говорят, показывайте, что сделали, а не от чего отталкивались.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Показываю Вам "команды".

Самая используемая для привоения - "="

Araris
Offline
Зарегистрирован: 09.11.2012

Tisha пишет:

при всем уважении... не надо предпологать... надо помочь...

С моим уважением, здесь помогают лишь тем, кто пытается...

Tisha
Offline
Зарегистрирован: 10.12.2015

ок... тапками не бросать.... как говорится я его слепила из того что было

#include <Wire.h>l                               l   
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>//
LiquidCrystal_I2C lcd(0x3F,16,2);  // для дисплея синий А5 зеленый А4
#define ONE_WIRE_BUS 7   //подключен датчик температуры на 7 пин
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

int Relay1 = 2; //реле 2 3 4
int Relay2 = 3;
int Relay3 = 4;

// датчик CO2
const int analogInPin = A3;  // Куда подключили MQ7
int sensorValue = 0; 
const int ledPin = 13; 

int button;
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 getPressedButton()


{
  int buttonValue = analogRead(0); //значения с аналогового входа(A0) для кнопок
  if (buttonValue < 100) {
    return BUTTON_LEFT;  
  }
  else if (buttonValue < 144 && buttonValue > 140) {
    return BUTTON_UP;
  }
  else if (buttonValue < 330 && buttonValue > 325) {
    return BUTTON_DOWN;
  }
  else if (buttonValue < 510 && buttonValue > 500){
    return BUTTON_RIGHT;
  }
  else if (buttonValue < 750 && buttonValue > 739){
    return BUTTON_SELECT;
  }
 
}

void setup()
 {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  sensors.begin();
  lcd.backlight();
  lcd.init();        // initialize the lcd         
  lcd.print("Podgotovka kotla");
  pinMode(Relay1, OUTPUT); 
  pinMode(Relay2, OUTPUT); 
  pinMode(Relay3, OUTPUT);
  digitalWrite(Relay1, HIGH);
  digitalWrite(Relay2, HIGH);
  digitalWrite(Relay3, HIGH);
  digitalWrite(Relay2, LOW);         // сервопривод в нулевое положение
  //задать угол серво 0
  lcd.setCursor(7, 1); 
  lcd.print("5");
  delay(1000);
  lcd.setCursor(7, 1); 
  lcd.print("4");
  delay(1000);
  lcd.setCursor(7, 1); 
  lcd.print("3");
  delay(1000);
  lcd.setCursor(7, 1); 
  lcd.print("2");
  delay(1000);
  lcd.setCursor(7, 1); 
  lcd.print("1");
  delay(1000);
  lcd.setCursor(0, 1); 
  lcd.print("                            ");
  lcd.setCursor(0, 0); 
  lcd.print("Zapystite kotel      ");
  digitalWrite(Relay2, HIGH);
  digitalWrite(0, HIGH);
    
}


void loop()

{

  button = getPressedButton();
  switch (button)
  {
      case BUTTON_LEFT:                                     //подача газа
   delay(100);
    lcd.setCursor(0, 0); 
       lcd.print("  Podacha gaza     "); 
     lcd.setCursor(0, 1);  
       lcd.print("                  ");
       
       digitalWrite(Relay1, LOW);
       delay(500);
       digitalWrite(Relay2, LOW);
       delay(50);
       lcd.setCursor(7, 1);  
       lcd.print("3");
       delay(1000);
       lcd.setCursor(7, 1);  
       lcd.print("2");
       delay(1000);
       lcd.setCursor(7, 1);  
       lcd.print("1");
       delay(1000);
       lcd.setCursor(0, 0); 
       lcd.print(" Vosplamenenie      "); 
       lcd.setCursor(0, 1);
       lcd.print("                    ");
       
       
  digitalWrite(Relay3, LOW);   // реле включено
  delay(50); 
  digitalWrite(Relay3, HIGH);  // реле выключено
  delay(50);
  digitalWrite(Relay3, LOW);   // реле включено
  delay(50);               
  digitalWrite(Relay3, HIGH);  // реле выключено
  delay(50);
  digitalWrite(Relay3, LOW);   // реле включено
  delay(50);               
  digitalWrite(Relay3, HIGH);  // реле выключено
  delay(50);
  digitalWrite(Relay3, LOW);   // реле включено
  delay(50);               
  digitalWrite(Relay3, HIGH);  // реле выключено
  delay(50);  
       lcd.setCursor(0, 0); 
       lcd.print(" Vosplamenenie       "); 
       lcd.setCursor(0, 1);
       lcd.print("                     ");
       delay(2000);
   
   
   
   
 
       lcd.setCursor(0, 0);                                   //в работе отображается
       lcd.print("Temperatyra     "); 
       lcd.setCursor(0, 1);
       lcd.print("Klapan         %");
       
       
       {
 sensors.requestTemperatures();
 lcd.setCursor(11, 0);
 lcd.print(sensors.getTempCByIndex(0));
 delay(1000);
 }
       
       break;
       
       
       case BUTTON_RIGHT:                                      //воспламенение котла
       delay(100);
       lcd.setCursor(0, 0); 
       lcd.print("   Zakritie       "); 
       lcd.setCursor(0, 1);
       lcd.print("   Klapanov       ");
      digitalWrite(Relay1, HIGH);
       delay(1000);
     
     
      
             // прописать закрытие серво в нулевое положение
             
   
              lcd.setCursor(0, 0); 
       lcd.print("   Zakritie       "); 
       lcd.setCursor(0, 1);
       lcd.print("   Klapanov    5  ");
       delay(1000); 
       lcd.setCursor(15, 1);
       lcd.print("4");
       delay(1000);
       lcd.setCursor(15, 1);
       lcd.print("3");
       delay(1000);
       lcd.setCursor(15, 1);
       lcd.print("2");
       delay(1000);
       lcd.setCursor(15, 1);
       lcd.print("1");
       delay(1000);
       lcd.setCursor(0, 0);      
       lcd.print("Klapan zakrit              "); 
       lcd.setCursor(0, 1);
       lcd.print("Otkluchite                  ");
       digitalWrite(Relay2, HIGH);
       delay(1000);
       break;                                //закрытие крапанов и серво
   
      
      
      
    case BUTTON_SELECT:                                 
     // пусто
    break;                               
   
   
 
 
    case BUTTON_UP:
       delay(100);
       lcd.setCursor(0, 0); 
       lcd.print("  "); 
       lcd.setCursor(0, 1);
       lcd.print("  ");
      delay(100);
      break;
   case BUTTON_DOWN:
       delay(100);
        lcd.setCursor(0, 0); 
       lcd.print("  "); 
       lcd.setCursor(0, 1);
       lcd.print("  ");
       delay(100);
      break;
    
   }
 
 // ошибка по СО2
  {
   sensorValue = analogRead(analogInPin);            
  if (sensorValue <= 100)
  {
    digitalWrite(ledPin, HIGH);
    delay(100);
       lcd.setCursor(0, 0); 
       lcd.print("   Zakritie       "); 
       lcd.setCursor(0, 1);
       lcd.print("   Klapanov       ");
      digitalWrite(Relay1, HIGH);
       delay(1000);
     
     
      
             // прописать закрытие серво в нулевое положение
             
   
              lcd.setCursor(0, 0); 
       lcd.print("   Zakritie       "); 
       lcd.setCursor(0, 1);
       lcd.print("   Klapanov    5  ");
       delay(1000); 
       lcd.setCursor(15, 1);
       lcd.print("4");
       delay(1000);
       lcd.setCursor(15, 1);
       lcd.print("3");
       delay(1000);
       lcd.setCursor(15, 1);
       lcd.print("2");
       delay(1000);
       lcd.setCursor(15, 1);
       lcd.print("1");
       delay(1000);
       lcd.setCursor(0, 0);      
       lcd.print("Oshibka!                "); 
       lcd.setCursor(0, 1);
       lcd.print("Kotel zatyh            ");
       digitalWrite(Relay2, HIGH);
       delay(1000);   
  }
  else
  {
  digitalWrite(ledPin, LOW);    
  }

  Serial.print("sensor = " );                       
  Serial.println(sensorValue);     

  delay(100);
    
    
    } 

}

где кнопки вверх и вниз нужно изменять положение сервопривода и значения на дисплее шагом 10 от 0 до 90...

вся проблема в том, что в этой теме я всего неделю, и без конкретных примеров тяжело воспринимается.. а таковых я к сожелению не нашел..

 

Tisha
Offline
Зарегистрирован: 10.12.2015

к сожелению в этом то и проблема форумов... новичку остается сидеть и моргать светодиодом...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Tisha пишет:

естессно это не код... но на его базе все сделал...

А где код? Почему не показываете? Боитесь, что украдём? Тогда Вам могут помочь только в разделе "Ищу исполнителя".

Tisha
Offline
Зарегистрирован: 10.12.2015

код выложил выше

 

Sindbad
Offline
Зарегистрирован: 08.12.2015

Tisha пишет:

где кнопки вверх и вниз нужно изменять положение сервопривода и значения на дисплее шагом 10 от 0 до 90...

вся проблема в том, что в этой теме я всего неделю, и без конкретных примеров тяжело воспринимается.. а таковых я к сожелению не нашел..

Хм. И ни одного присваивания за исключением первоначальной инициализации. С программированием раньше сталкивались?

Нужно:

1. Объявить глобальную переменную для хранения значения положения привода (эту строку поместить перед функцией setup():

byte Volume = 0; // первоначальное положение привода

2. Обработку клавиши вверх переписать так:

case BUTTON_UP:
       lcd.setCursor(0, 0);
       if (Volume==90)
             Volume=0;
       else 
             Volume = Volume + 10;
       lcd.print(Volume);

       /* сюда поместить код разворота привода на угол Volume */

      break;

3. Аналогично переписать обработку клавиши вниз

Tisha
Offline
Зарегистрирован: 10.12.2015

не сталкивался.... разве что в универе.... код склепал за 3 дня из готовых проектов, подгоняя и дополняя как понимал... благодарю...

дождусь привода... буду лепить

 

Sindbad
Offline
Зарегистрирован: 08.12.2015

Tisha пишет:

код склепал за 3 дня из готовых проектов, подгоняя и дополняя как понимал

Готовых примеров на все случаи все равно не хватит

http://forcoder.ru/cpp/yazyk-programmirovaniya-c-lekcii-i-uprazhneniya-1273

http://forcoder.ru/cpp/yazyk-programmirovaniya-c-1121