Кнопка-помогите

gzp13
Offline
Зарегистрирован: 06.04.2015

Здравствуйте. Помогите подредактировать код. Нужно чтобы при нажатии на кнопку сначала включалась подсветка дисплея, но режим должен быть какой был установлен. Затем при нажатии на кнопку при включенной подсветке дисплея режим должен переключиться на следующий. И так далее. Т.е надо так-посветка выключена,нажали кнопку-подсветка включилась,нажали еще раз кнопку-режим увеличился.

f(digitalRead(DISPLAY_ON)==LOW && flag1==0 )  // включение-выключение подсветки дисплея от кнопки SB1
     {
   digitalWrite(1,HIGH);
   val++;
   switch (val)
{
  case 1:         
      lcd.setCursor(2, 1);
       lcd.print("                      ");
       lcd.setCursor(6, 1);
       lcd.print("AUTO");
       Podsvetka_display=1;
      timer_Podsvetka_display=millis();
   break;
case 2:
       lcd.setCursor(3, 1);
        lcd.print("                      ");
        lcd.setCursor(5, 1);
        lcd.print("TOMAT   MAN"); 
        Podsvetka_display=1;
      timer_Podsvetka_display=millis();
        break;
case 3:
    lcd.setCursor(3, 1);
        lcd.print("                      ");
        lcd.setCursor(4, 1);
       lcd.print("REDISKA  MAN");
        Podsvetka_display=1;
      timer_Podsvetka_display=millis();
break;
}
if (Podsvetka_display==1)
     {
      if(millis() - timer_Podsvetka_display >3000) // интервал подсветки дисплея
      {
         digitalWrite(1,LOW);
        timer_Podsvetka_display=0;
       Podsvetka_display=0;
        lcd.setCursor(3, 1);
        lcd.print("            ");

 

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

Проблема решилась сама собой?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Я бы для начала нормально скобки расставил...

if(digitalRead(DISPLAY_ON) == LOW && flag1 == 0 ) { // включение-выключение подсветки дисплея от кнопки SB1

  digitalWrite(1, HIGH);
  val++;
  switch (val) {
    case 1:
      lcd.setCursor(2, 1);
      lcd.print("                      ");
      lcd.setCursor(6, 1);
      lcd.print("AUTO");
      Podsvetka_display = 1;
      timer_Podsvetka_display = millis();
      break;
    case 2:
      lcd.setCursor(3, 1);
      lcd.print("                      ");
      lcd.setCursor(5, 1);
      lcd.print("TOMAT   MAN");
      Podsvetka_display = 1;
      timer_Podsvetka_display = millis();
      break;
    case 3:
      lcd.setCursor(3, 1);
      lcd.print("                      ");
      lcd.setCursor(4, 1);
      lcd.print("REDISKA  MAN");
      Podsvetka_display = 1;
      timer_Podsvetka_display = millis();
      break;
  }
  if (Podsvetka_display == 1) {
    if (millis() - timer_Podsvetka_display > 3000) {  // интервал подсветки дисплея
    
      digitalWrite(1, LOW);
      timer_Podsvetka_display = 0;
      Podsvetka_display = 0;
      lcd.setCursor(3, 1);
      lcd.print("            ");
    }
  }
}

А потом - удалил бы нафиг этот код и написал бы заново. Я далеко не программист, но понимаю что написано сильно криво. Ну да ладно...

if(digitalRead(DISPLAY_ON) == LOW) {  // Если нажали кнопку SB1...
/* за что отвечает флаг flag1 я не знаю )) */
  if (Podsvetka_display == 0) {       // ... и подсветка выключена
      digitalWrite(1, HIGH);          // то включить подсветку
      Podsvetka_display = 1;          // взвести флаг, что подсветка включена
      timer_Podsvetka_display = millis();   // запустить отсчет "таймера подсветки"
  } else {                            // Если же подсветка уже включена
  val++;                              // Сменить "режим"
  switch (val) {
    case 1:
      lcd.setCursor(2, 1);
      lcd.print("                      ");
      lcd.setCursor(6, 1);
      lcd.print("AUTO");
      break;
    case 2:
      lcd.setCursor(3, 1);
      lcd.print("                      ");
      lcd.setCursor(5, 1);
      lcd.print("TOMAT   MAN");
      break;
    case 3:
      lcd.setCursor(3, 1);
      lcd.print("                      ");
      lcd.setCursor(4, 1);
      lcd.print("REDISKA  MAN");
      break;
  }
  }
  if ( (Podsvetka_display == 1) && (millis() - timer_Podsvetka_display > 3000) ) {  // Если подсветка включена и "время вышло", то гасим ее...
    
      digitalWrite(1, LOW);
      timer_Podsvetka_display = 0;
      Podsvetka_display = 0;
      lcd.setCursor(3, 1);
      lcd.print("            ");
  }
}