ARDUINO Закольцевать меню

RiveR

✩✩✩✩✩✩✩
17 Мар 2020
10
1
Прошу вашей помощи, подскажите как закольцевать меню.

Имеется скетч, написанный мной
#include <LiquidCrystal.h>

#include <EEPROM.h>

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

int line;
int stemp1;
int stemp2;
int stemp3;
int stemp4;
int rtemp1;
int rtemp2;
int rtemp3;
int rtemp4;
int days = 0;
int hours = 0;
int mins = 0;
int secs = 0;

void load() {
stemp1 = EEPROM.get(1, stemp1);
stemp2 = EEPROM.get(5, stemp2);
stemp3 = EEPROM.get(10, stemp3);
}

void time() {
secs = millis() / 1000;
mins = millis() / 1000 / 60;
hours = mins / 60;
days = hours / 24;
}

void time_convert() {
secs = secs - mins * 60;
mins = mins - hours * 60;
hours = hours - days * 24;
}

void coose_menu() {
if (analogRead(A0) < 35 && analogRead(A0) > 30) {
line = line - 1;

} else if (analogRead(A0) < 95 && analogRead(A0) > 75) {
line = line + 1;
}
}

void menu() {
if (line == 1) {
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(1, 0);
lcd.print("I1");
lcd.setCursor(4, 0);
lcd.print(float(stemp1 * 0.1));
lcd.setCursor(10, 0);
lcd.print(rtemp1);
if (analogRead(A0) == 0) {
stemp1 = stemp1 - 1;

}
if (analogRead(A0) < 170 && analogRead(A0) > 160) {
stemp1 = stemp1 + 1;

}
EEPROM.write(1, stemp1);

}
if (line == 2) {
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(1, 0);
lcd.print("I2");
lcd.setCursor(4, 0);
lcd.print(float(stemp2 * 0.1));
lcd.setCursor(10, 0);
lcd.print(rtemp2);
if (analogRead(A0) == 0) {
stemp2 = stemp2 - 1;

}
if (analogRead(A0) < 170 && analogRead(A0) > 160) {
stemp2 = stemp2 + 1;

}
EEPROM.write(5, stemp2);

}
if (line == 3) {
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(1, 0);
lcd.print("I3");
lcd.setCursor(4, 0);
lcd.print(float(stemp3 * 0.1));
lcd.setCursor(10, 0);
lcd.print(rtemp3);
//delay(80);
if (analogRead(A0) == 0) {
stemp3 = stemp3 - 1;

}
if (analogRead(A0) < 170 && analogRead(A0) > 160) {
stemp3 = stemp3 + 1;

}
EEPROM.write(10, stemp3);

}
}

void uptime_lcd() {
lcd.setCursor(0, 3);
lcd.print("UPTIME");
lcd.setCursor(8, 3);
lcd.print(hours);
lcd.setCursor(10, 3);
lcd.print(":");
lcd.setCursor(11, 3);
lcd.print(mins);
lcd.setCursor(13, 3);
lcd.print(":");
lcd.setCursor(14, 3);
lcd.print(secs);
}

void setup()
{
lcd.begin(16, 4);

line = 1;

stemp1 = 350;

stemp2 = 350;

stemp3 = 350;

rtemp1 = 40;

rtemp2 = 40;

rtemp3 = 40;


}

void clear() {
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print(" ");
}

void loop()
{
load();
time();
time_convert();
coose_menu();
menu();
uptime_lcd();
delay(70);
clear();
}

Вот блок который переключает менюхи
void coose_menu() {
if (analogRead(A0) < 35 && analogRead(A0) > 30) {
line = line - 1;

} else if (analogRead(A0) < 95 && analogRead(A0) > 75) {
line = line + 1;
}
}

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

kalobyte

★★★✩✩✩✩
1 Янв 2020
725
145
C++:
void coose_menu() {
if (analogRead(A0) < 35 && analogRead(A0) > 30) {
    if(line == 1) return;
    else
      line--;

} else if (analogRead(A0) < 95 && analogRead(A0) > 75) {
    if(line == 3) return;
    else
    line++;
}
}
 
  • Лойс +1
Реакции: RiveR