slow.Arduino(Skript)

Hey Guys i’ve build up a little ‘dirty’ lcd-Menu its working… BUT its too slow i have to push the buttons several times untill the arduino reaktion works
here is the skript (im working with an arduino uno):

#include <TimeLib.h>

#include <TrueRandom.h>

#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int ergebnis1, ergebnis2, ergebnis3;
#define TIME_MSG_LEN  11   
#define TIME_HEADER  'T' 
#define TIME_REQUEST  7 
//#define MEZ 7200 //Sommer
#define MEZ 3600 //Winter
enum State {
  MENU_CLOCK,
  MENU_DICE,
  ROLL,
  RESULTS,
  CLOCK
};
const char* const menuState[] = { "Menu Clock", "Menu Dice", "Roll", "Results", "Clock"};


State myState = MENU_CLOCK;

const byte buttonPins[] = {12, 13, 11, 10, 9, 8};
const char* const pinText[] = { "UpButton", "RightButton", "DownButton", "LeftButton", "Enter", "Escape"};
int rollOne, rollTwo;
void setup()
{
  lcd.begin(16, 2);
  lcd.clear();
  lcd.print(F("--> Clock"));
  lcd.setCursor(0,1);
  lcd.print("    Dice");
  Serial.begin(9600);
  setSyncProvider( requestSync);  
  Serial.println("Unix Timestamp eingeben:");
  for (byte i = 0; i < sizeof(buttonPins); i++)
  {
    pinMode(buttonPins[i], INPUT_PULLUP);
  }
  randomSeed(analogRead(A4));
}

void loop()
{
  if(Serial.available()){
    processSyncMessage();
  }

  delay(1000);
  int8_t pressedButton = checkMyButtons(buttonPins, sizeof(buttonPins));

  switch (pressedButton)  // set up for six pins
  {
    case 0:  // UpButton
      switch (myState) {
        case MENU_CLOCK:
          myState = MENU_CLOCK;
          break;
        case MENU_DICE:
          myState = MENU_CLOCK;
          break;
        case ROLL:
          //
          break;
        default:
          lcd.print("default");
      }
      break;
    case 1:  // RightButton
      //
      break;
    case 2:  // DownButton
      switch (myState) {

        case MENU_CLOCK:
          myState = MENU_DICE;
          break;
        case MENU_DICE:
          myState = MENU_DICE;
          break;
        case ROLL:
          //
          break;
        default:
          lcd.print("default");
      }
      break;
    case 3:  // LeftButton
      //
      break;
    case 4:  // Enter
      switch (myState) {
        case MENU_CLOCK:
          myState = CLOCK;
          break;
        case MENU_DICE:
          myState = ROLL;
          break;
        case ROLL:
          myState = ROLL;
            ergebnis1 = TrueRandom.random(1, 7);
            lcd.clear();
            lcd.print(ergebnis1);
            lcd.write(" + ");
            ergebnis2 = TrueRandom.random(1, 7);
            lcd.print(ergebnis2);
            ergebnis3 = ergebnis1 + ergebnis2;
            lcd.print(" = ");
            lcd.print(ergebnis3);
          break;
        case CLOCK:
          //
          break;
        default:
          Serial.println("default");
      }
      break;
    case 5:  // Escape
      switch (myState) {
        case MENU_CLOCK:
          //
          break;
        case MENU_DICE:
          //
          break;
        case ROLL:
          myState = MENU_DICE;
          break;
        case CLOCK:
            myState = MENU_CLOCK;
          break;
        default:
            Serial.println("Default");
      }
      break;
    default:
      // do nothing
      ;
  }
  lcdUpdate();
}

int8_t checkMyButtons(const byte* pins, const size_t numPins)
{
  static int8_t lastButtonState[sizeof(buttonPins)] = {1};
  static unsigned long lastMillis[sizeof(buttonPins)] = {0};
  int8_t pressedButton = -1;
  for (byte i = 0; i < numPins; i++)
  {
    if (millis() - lastMillis[i] > 15UL) // debounce
    {
      lastMillis[i] = millis();
    }
    else
    {
      continue;
    }
    byte state = digitalRead(pins[i]);
    if (state != lastButtonState[i])
    {
      if (state == 0)
      {
        pressedButton = i;
      }
    }
    lastButtonState[i] = state;
  }
  return pressedButton;
}

void lcdUpdate()
{
  static State lastState = MENU_CLOCK;
  static unsigned long lastMillis = 0;
  if (myState != lastState)
  {
    lcd.print(" ");
    //Serial.println(menuState[myState]);
    switch (myState)
    {
      case MENU_CLOCK:
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.write("--> Clock");
        lcd.setCursor(0, 1);
        lcd.write("    Dice");
        break;
      case MENU_DICE:
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.write("    Clock");
        lcd.setCursor(0 ,1);
        lcd.write("--> Dice");
        break;
      case ROLL:
       //
        break;
    }
  }
  lastState = myState;
  if (myState == CLOCK)
  {
    digitalClockDisplay();
  }
}

void digitalClockDisplay(){
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(hour());
  printDigits(minute());
  printDigits(second());
  lcd.setCursor(0,1);
  lcd.print(dayShortStr(weekday()));
  lcd.print(" ");
  lcd.print(day());
  lcd.print(".");
  lcd.print(month());
  lcd.print(".");
  lcd.print(year()); 
}

void printDigits(int digits){
  lcd.print(":");
  if(digits < 10){
    lcd.print('0');
  }
  lcd.print(digits);
}

void processSyncMessage(){
  while(Serial.available() >=  TIME_MSG_LEN ){ 
    char c = Serial.read() ; 
    if( c == TIME_HEADER ){       
      time_t pctime = 0;
      for(int i=0; i < TIME_MSG_LEN -1; i++){   
        c = Serial.read();          
        if( c >= '0' && c <= '9'){   
          pctime = (10 * pctime) + (c - '0') ; 
        }
      }   
      pctime += MEZ; 
      setTime(pctime);   
    }  
  }
}

time_t requestSync(){
  Serial.write(TIME_REQUEST);  
  return 0; 
}

it the problem tht there are so many functions?

 delay(1000);

Slow, you say?

well im petty dumb :)

the delay was for a former version of a little funkion i had there :o

forgot to delete it but tahnts bor :D