?изменение переменной на LCD с помощью кнопок
- Войдите на сайт для отправки комментариев
Чт, 10/12/2015 - 13:34
ребят... помогите чайнику... столкнулся с проблемой реализации изменения значений на дисплее
имеются 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
ПОМОГИТЕ ПЛИЗ
Да, это лишь заготовка кода, и что Вы сделали на его базе - неведомо, предполагаю, что ничего.
Между case и break поместите команды изменения значения и проверки его на вхождение в диапазон.
при всем уважении... не надо предпологать... надо помочь...
я понимаю что надо поместить команды... но к сожалению наглядных примеров я не нашел...
если можно, покажите команды и переменные которые мне потребуются..
естессно это не код... но на его базе все сделал...
Вот Вам и говорят, показывайте, что сделали, а не от чего отталкивались.
Показываю Вам "команды".
Самая используемая для привоения - "="
при всем уважении... не надо предпологать... надо помочь...
С моим уважением, здесь помогают лишь тем, кто пытается...
ок... тапками не бросать.... как говорится я его слепила из того что было
#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...
вся проблема в том, что в этой теме я всего неделю, и без конкретных примеров тяжело воспринимается.. а таковых я к сожелению не нашел..
к сожелению в этом то и проблема форумов... новичку остается сидеть и моргать светодиодом...
естессно это не код... но на его базе все сделал...
А где код? Почему не показываете? Боитесь, что украдём? Тогда Вам могут помочь только в разделе "Ищу исполнителя".
код выложил выше
где кнопки вверх и вниз нужно изменять положение сервопривода и значения на дисплее шагом 10 от 0 до 90...
вся проблема в том, что в этой теме я всего неделю, и без конкретных примеров тяжело воспринимается.. а таковых я к сожелению не нашел..
Хм. И ни одного присваивания за исключением первоначальной инициализации. С программированием раньше сталкивались?
Нужно:
1. Объявить глобальную переменную для хранения значения положения привода (эту строку поместить перед функцией setup():
2. Обработку клавиши вверх переписать так:
case BUTTON_UP: lcd.setCursor(0, 0); if (Volume==90) Volume=0; else Volume = Volume + 10; lcd.print(Volume); /* сюда поместить код разворота привода на угол Volume */ break;3. Аналогично переписать обработку клавиши вниз
не сталкивался.... разве что в универе.... код склепал за 3 дня из готовых проектов, подгоняя и дополняя как понимал... благодарю...
дождусь привода... буду лепить
код склепал за 3 дня из готовых проектов, подгоняя и дополняя как понимал
Готовых примеров на все случаи все равно не хватит
http://forcoder.ru/cpp/yazyk-programmirovaniya-c-lekcii-i-uprazhneniya-1273
http://forcoder.ru/cpp/yazyk-programmirovaniya-c-1121