Go Down

Topic: Time lib + MenuBackend, ein menu fürs Zeit einstellen? (Read 404 times) previous topic - next topic

Hi

ich Bastel mir zur zeit eine Terrarien-Steuerung und hab gerade mal wieder ein Problem.

Wie im Titel steht hab ich mir mit der MenuBackend lib ein Menü gebastelt.
Jetzt würde ich gern ein Menü haben wo ich die Zeit einstellen kann, falls der RTC mal ausfällt oder der geichen(wird nur über nen GoldCap versorgt)
und ich nicht jedes mal die Steuerung mit dem PC verbinden muss um die Zeit einzustellen. Im moment habe ich für Std. Min. und Sekunden jeweils ein eigenes Menü.

Leider bekomme ich es nicht so hin wie ich es gern Hätte. Ich hätte es gern so wie man es von Uhren etc. her kennt, das die Zeit angezeigt wird und die grade zu bearbeitente Variable Blinkt, bzw der Cursor drunter blinkt. Bei Klick auf Button 2 soll die Variable hochgezählt werden, beim klick auf Button 3 soll die nähste Variable ausgewählt werden. Nach den Sekunden sollen die werte dann übernommen werden.

Habt ihr ein paar Tips oder Code Schnippsel? Hab schon gesucht, aber nur unverständliches gefunden.

cu

Code: [Select]
if(used.item == menuItem5SubItem1){
    lastButtonPushed = 0;
    time_t t = now(); // store the current time in time variable t
    int hours = hour(t);
    int minutes = minute(t);
    int seconds = second(t);
    int saved = 0;
    lcd.clear();
    lcd.setCursor(0,1);
    lcd.print(hour());
    printDigits(minute());
    printDigits(second());
    while(saved != 3) {
      lastButtonPushed = 0;
      readButtons();
      if(lastButtonPushed == 2 && saved == 0){
        hours = ((hours + 1) % 24);
        lcd.blink();
        lcd.setCursor(0,1);
        lcd.print(hours);
      }
      if(lastButtonPushed == 2 && saved == 1){
        minutes = ((minutes + 1) % 60);
        lcd.blink();
        lcd.setCursor(3,1);
        printDigits(minutes);
      }
      if(lastButtonPushed == 2 && saved == 2){
        seconds = 0;
        lcd.blink();
        lcd.setCursor(6,1);
        printDigits(seconds);
      }
      if(lastButtonPushed == 3){
        ++saved;
      }
    }
    lcd.noBlink();
    t = now();
    setTime(hours, minutes,seconds == 0 ? 0 : second(t),day(t),month(t),year(t));
  }

Hi

so habs selbst hin bekommen. Ist bestimmt nich wirklich effizient und kann sicher auch besser gelöst werden, aber es macht das was ich wollte. Auch Blickt der Curor zu schnell das man ihn kaum sieht, aber das stört mich jetzt weniger. Falls es wenn interessiert hier der Code schnipsel.

Code: [Select]
if(used.item == menu1Item5){
    lastButtonPushed = 0;
    time_t t = now(); // store the current time in time variable t
    int hours = hour(t);
    int minutes = minute(t);
    int seconds = second(t);
    int saved = 0;
    lcd.clear();
    lcd.setCursor(0,1);
    if(hour() < 10)
    lcd.print(0);
    lcd.print(hour());
    printDigits(minute());
    printDigits(second());
    lcd.blink();
    while(saved < 3){
      lastButtonPushed = 0;
      switch(saved) {

      case 0 :
        while(lastButtonPushed != 1) {
          lastButtonPushed = 0;
          readButtons();
          lcd.setCursor(0,1);
          if(hours < 10)
            lcd.print(0);
          lcd.print(hours);
          if(lastButtonPushed == 2 ){
            hours = ((hours + 1) % 24);

            lcd.setCursor(0,1);
            if(hours < 10)
              lcd.print(0);
            lcd.print(hours);
          }
        }
        ++saved;
        break;

      case 1 :
        while(lastButtonPushed != 1) {

          lastButtonPushed = 0;
          readButtons();
          lcd.setCursor(2,1);
          printDigits(minutes);
          if(lastButtonPushed == 2){
            minutes = ((minutes + 1) % 60);
            lcd.setCursor(2,1);
            printDigits(minutes);
          }
        }
        ++saved;
        break;

      case 2 :
        while(lastButtonPushed != 1) {
          lastButtonPushed = 0;
          readButtons();
          lcd.setCursor(5,1);
          printDigits(seconds);
          if(lastButtonPushed == 2){
            seconds = 0;
            lcd.setCursor(5,1);
            printDigits(seconds);
          }
        }
        ++saved;
        break;
      }
    }   
    lcd.noBlink();
    t = now();
    setTime(hours, minutes,seconds == 0 ? 0 : second(t),day(t),month(t),year(t));
    saved = 0;
  }

Go Up