Кнопка-помогите
- Войдите на сайт для отправки комментариев
Пт, 23/07/2021 - 15:36
Здравствуйте. Помогите подредактировать код. Нужно чтобы при нажатии на кнопку сначала включалась подсветка дисплея, но режим должен быть какой был установлен. Затем при нажатии на кнопку при включенной подсветке дисплея режим должен переключиться на следующий. И так далее. Т.е надо так-посветка выключена,нажали кнопку-подсветка включилась,нажали еще раз кнопку-режим увеличился.
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(" ");
Проблема решилась сама собой?
Я бы для начала нормально скобки расставил...
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(" "); } }