Переменная не изменяется,где я накосячил?

Bcex
Offline
Зарегистрирован: 16.01.2015

Затеял элементарную програмку на LCD Keypad Shield/

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

Набросал скетч,(чтение датчика позже добавлю) но переменная (paus) не хочет меняться при нажатии кнопок.

Добавил Serial чтоб смотреть что происходит, нажатия видны а переменная не меняется(

Прочитал этюды на форуме, но что то я недопонял с переменными, или накосячил в синтаксисе, или переменную определяю не в том месте.

Ткните носом что не так.

Почему переменная (paus) не меняется?, и как исправить?

[code]
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Для MEGA,(3, 5, 9, 10, 11, 12),Для UNO (8, 9, 4, 5, 6, 7 )
int paus = 15; //Значение паузы по умолчанию мин.

void setup() {
  //int paus = 15; //Значение паузы по умолчанию мин.

  lcd.begin(16, 2); //Установка длинны-ширины дисплея
  lcd.clear();      //Очистка экрана
  lcd.setCursor(0, 0);
  lcd.print("TIMER NASOS=");
  lcd.setCursor(13, 0);    // Ставим курсор только для принта паузы
  lcd.print (paus);    ///В этом месте переменная печатается НОРМАЛЬНО
  lcd.setCursor(0, 1);
  lcd.print("Press UP or DOWN");
  Serial.begin(9600);  //Добавлен только для отладки

}

void loop() {
  // Опрос кнопок LCD Keypad Shield
  int x;
  x = analogRead (0);
  lcd.setCursor(13, 0);

  if (x < 200) {
    ///////////////////////////////////////////////
    lcd.print ("Up    "); // Кнопка Вверх прибавляем таймер
    int paus = paus + 1;
  }
  ////////////////////////////////////////////////
  else if (x < 400) {

    lcd.print ("Down  "); // Кнопка Вниз убавляем таймер
    int paus = paus - 1;
  }
  delay (300);  //Задержки только для удобства просмотра в Serial
  lcd.print (paus);
  Serial.println(paus);//Отправляем в Serial значение паузы
  Serial.println(x);  //Отправляем в Serial считанные значения кнопок
  delay (300);
}


[/code]

 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

строки 30 и 36 описывают и инициализируют  НОВУЮ переменную, с тем же именем  paus, которая существует ТОЛЬКО до закрывающей фигурной скобки.

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Цитата:
Почему переменная (paus) не меняется?, и как исправить?
Потому что переменные, объявленные в строках 4, 30 и 36 это три разные переменные. Нужно оставить одну, ту что в строке 4.

Bcex
Offline
Зарегистрирован: 16.01.2015

Andy пишет:

Цитата:
Почему переменная (paus) не меняется?, и как исправить?
Потому что переменные, объявленные в строках 4, 30 и 36 это три разные переменные. Нужно оставить одну, ту что в строке 4.

А как тогда к переменной плюсовать и отнимать значение?при нажатии

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Bcex пишет:

Andy пишет:

Цитата:
Почему переменная (paus) не меняется?, и как исправить?
Потому что переменные, объявленные в строках 4, 30 и 36 это три разные переменные. Нужно оставить одну, ту что в строке 4.

А как тогда к переменной плюсовать и отнимать значение?при нажатии

Тупой? Просто слово int  убрать в 30 и 36 строках.

Bcex
Offline
Зарегистрирован: 16.01.2015

Не тупой,? просто для меня стало открытием что переменные меняются без каких либо команд , а просто имя и + -

Спасибо!!,,пишу дальше сенсорную часть

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

int blablabla;

или 

int blablabla = 13;

или 

int blablabla = (fuck14 + 88)* 666;

ЭТО ОБЪЯВЛЕНИЯ ПЕРЕПЕННЫХ!!!!! Вы читали учебник програмирования на С?

в отличии от просто оператора присваивания :

paus = paus +1; или paus  = blablabla * 666;

Вы уже пытаетесь создавать программу, не понимая нихера в том, что пишите, на каком языке и за каким хером?

Bcex
Offline
Зарегистрирован: 16.01.2015

Харош орать! Читаю учебник, по мере понимания

Вы походу родились со знанием С ??,,или сами такими не были?.

Форум для этого и существует.

Едем дальше,

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Задаешь на форуме тупой вопрос - плати унижением за помощь. Не нравится - скатертью по жопе.

Форум существует не для ответов на вопросы (внезапно?), а для общения по интересам в рамках данного хобби (в нашем случае - Ардуино).

Новички и чайники - тут вообще не нужны никому. Если сразу нахер не послали, а помогли советом, нужно кланяться и, гладя в пол, отвечать "Домо аригато, сенсей!".

Bcex
Offline
Зарегистрирован: 16.01.2015
[code]
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Для MEGA,(3, 5, 9, 10, 11, 12),Для UNO (8, 9, 4, 5, 6, 7 )
int paus = 15; //Значение паузы по умолчанию мин.

void setup() {
  //int paus = 15; //Значение паузы по умолчанию мин.

  lcd.begin(16, 2); //Установка длинны-ширины дисплея
  lcd.clear();      //Очистка экрана
  lcd.setCursor(0, 0);
  lcd.print("TIMER NASOS=");
  lcd.setCursor(13, 0);    // Ставим курсор только для принта паузы
  lcd.print (paus);    ///В этом месте переменная печатается НОРМАЛЬНО
  lcd.setCursor(0, 1);
  lcd.print("Press UP or DOWN");
  Serial.begin(9600);  //Добавлен только для отладки

}

void loop() {
  // Опрос кнопок LCD Keypad Shield
  int x;
  x = analogRead (0);
  lcd.setCursor(13, 0);

  if (x < 200) {
    ///////////////////////////////////////////////
    //lcd.print ("+  "); // Кнопка Вверх прибавляем таймер
    paus = paus + 1;
  }
  ////////////////////////////////////////////////
  else if (x < 400) {

    //lcd.print ("-  "); // Кнопка Вниз убавляем таймер
    paus = paus - 1;
  }
  if (paus < 1) {
    paus = 1;     //Минимальное значение паузы
  }
  delay (300);  //Задержки только для удобства просмотра в Serial
  lcd.print ((paus),("  "));
  Serial.println(paus);//Отправляем в Serial значение паузы
  Serial.println(x);  //Отправляем в Serial считанные значения кнопок
  //delay (300);
}


[/code]

Опять затык.

При значении паузы из двух символов 10,11,20 и тд при печати одного символа не удаляется второй оставшийся.

Как дабавить в команду печать пробела после символов?

Такая связка 42 не работает  lcd.print ((paus),("  "));  , синтаксис какой то  неправильный, второй символ не меняется и не стирается.А после старта первый символ вообще БУКВЕННЫЙ, хз чо такое

Или остается только стирание области перед печатью?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Bcex пишет:

[code]
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Для MEGA,(3, 5, 9, 10, 11, 12),Для UNO (8, 9, 4, 5, 6, 7 )
int paus = 15; //Значение паузы по умолчанию мин.

void setup() {
  //int paus = 15; //Значение паузы по умолчанию мин.

  lcd.begin(16, 2); //Установка длинны-ширины дисплея
  lcd.clear();      //Очистка экрана
  lcd.setCursor(0, 0);
  lcd.print("TIMER NASOS=");
  lcd.setCursor(13, 0);    // Ставим курсор только для принта паузы
  lcd.print (paus);    ///В этом месте переменная печатается НОРМАЛЬНО
  lcd.setCursor(0, 1);
  lcd.print("Press UP or DOWN");
  Serial.begin(9600);  //Добавлен только для отладки

}

void loop() {
  // Опрос кнопок LCD Keypad Shield
  int x;
  x = analogRead (0);
  lcd.setCursor(13, 0);

  if (x < 200) {
    ///////////////////////////////////////////////
    //lcd.print ("+  "); // Кнопка Вверх прибавляем таймер
    paus = paus + 1;
  }
  ////////////////////////////////////////////////
  else if (x < 400) {

    //lcd.print ("-  "); // Кнопка Вниз убавляем таймер
    paus = paus - 1;
  }
  if (paus < 1) {
    paus = 1;     //Минимальное значение паузы
  }
  delay (300);  //Задержки только для удобства просмотра в Serial
  lcd.print ((paus),("  "));
  Serial.println(paus);//Отправляем в Serial значение паузы
  Serial.println(x);  //Отправляем в Serial считанные значения кнопок
  //delay (300);
}


[/code]

Опять затык.

При значении паузы из двух символов 10,11,20 и тд при печати одного символа не удаляется второй оставшийся.

Как дабавить в команду печать пробела после символов?

Такая связка 42 не работает  lcd.print ((paus),("  "));  , синтаксис какой то  неправильный, второй символ не меняется и не стирается.А после старта первый символ вообще БУКВЕННЫЙ, хз чо такое

Или остается только стирание области перед печатью?

Вам здесь почитать

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

В lcd  и в Serial один и тот же  print, это называется ООП - Объектно Ориентированное Программирование.

Прочитайте про  print() вот тут, на этом сайте в разделе "Программирование".

Писать придется так:

lcd.print(pause);  lcd.print(" ");

то есть по очереди.

Потом,, если станете (вдруг?) программистом, то найдете еще пару способов. А пока - так.