Error en variable SOLUCIONADO

Hola, muy buenas.
Posteo porque tengo un problema bastante específico con el código de mi arduino, y no se si se ha tratado otras veces.
He realizado un cógido que, a base de pulsadores, eleva el valor de una determinada variable “unsigned long”. El caso es que, cada vez que pulso, se incrementa el valor de la variable según donde se encuentre el cursor de una LCD, que se controla con otros pulsadores. Es decir, si el pulsador está en el lugar de las unidades, se aumenta en 1, si esta en las decenas, etc…
Sin embargo, no sé porqué motivo, en el lugar de 10000, si pulso, se aumenta a 10000, a 20000, a 30000 y si vuelvo a pulsar, la variable alcanza el valor máximo (4294967296). Sin embargo, cuando aumento el valor de 100000, no ocurre, no desborda el valor. Adjunto el código por si ven algún error.

Gracias.

#define CLOCK 5
#define LOAD 4
#define DATA 3
#define RESET 2
#define RS 7
#define EN 8
#define D4 9
#define D5 10
#define D6 11
#define D7 12
#define RELAY 6
#define SW 13
#define LEFT A0
#define RIGHT A1
#define OK A2
#define CANCEL A3
#include <LiquidCrystal.h>
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
byte n = 0;
byte m = 12;
byte t = 0;
byte c1 = 0;
byte c2 = 0;
byte c3 = 0;
byte c4 = 0;
byte c5 = 0;
byte c6 = 0;
byte c7 = 0;
byte c8 = 0;
unsigned long frequency = 0;

void setup() {
  pinMode(RIGHT, INPUT);
  pinMode(LEFT, INPUT);
  pinMode(OK, INPUT);
  pinMode(CANCEL, INPUT);
  pinMode(RELAY, OUTPUT);
  pinMode(SW, OUTPUT);
  Serial.begin(9600);
  lcd.begin(16, 2);
  init_AD9850();
  reset_AD9850();
  SetFrequency(0);
  digitalWrite(RELAY, LOW);
  setupSinwave();
}

void loop() {
}

void SetFrequency(unsigned long freq) {
  unsigned long sfreq = freq * 4294967296 / 125000000;
  digitalWrite (LOAD, LOW);
  shiftOut(DATA, CLOCK, LSBFIRST, sfreq);
  shiftOut(DATA, CLOCK, LSBFIRST, sfreq >> 8);
  shiftOut(DATA, CLOCK, LSBFIRST, sfreq >> 16);
  shiftOut(DATA, CLOCK, LSBFIRST, sfreq >> 24);
  shiftOut(DATA, CLOCK, LSBFIRST, 0x0);
  digitalWrite (LOAD, HIGH);
}

void init_AD9850()
{
  pinMode(CLOCK, OUTPUT);
  pinMode(LOAD, OUTPUT);
  pinMode(DATA, OUTPUT);
  pinMode(RESET, OUTPUT);
  digitalWrite(CLOCK, LOW);
  digitalWrite(LOAD, LOW);
  digitalWrite(DATA, LOW);
  digitalWrite(RESET, LOW);
}

void reset_AD9850()
{
  digitalWrite(CLOCK, LOW);
  digitalWrite(LOAD, LOW);
  digitalWrite(RESET, LOW);
  delay(5);
  digitalWrite(RESET, HIGH);
  delay(5);
  digitalWrite(RESET, LOW);
  delay(5);
  digitalWrite(CLOCK, LOW);
  delay(5);
  digitalWrite(CLOCK, HIGH);
  delay(5);
  digitalWrite(CLOCK, LOW);
  delay(5);
  digitalWrite(DATA, LOW);
  digitalWrite(LOAD, LOW);
  delay(5);
  digitalWrite(LOAD, HIGH);
  delay(5);
  digitalWrite(LOAD, LOW);
  delay(5);
}

void Keys() {
  if (digitalRead(RIGHT) == 1) {
    delay(5);
    if (digitalRead(RIGHT) == 1) {
      n = 1;
    }
  }
  if (digitalRead(LEFT) == 1) {
    delay(5);
    if (digitalRead(LEFT) == 1) {
      n = 2;
    }
  }
  if (digitalRead(OK) == 1) {
    delay(5);
    if (digitalRead(OK) == 1) {
      n = 3;
    }
  }
  if (digitalRead(CANCEL) == 1) {
    delay(5);
    if (digitalRead(CANCEL) == 1) {
      n = 4;
    }
  }
}

void setupSinwave() {
  lcd.clear();
  lcd.setCursor(2, 0);
  lcd.print("SINEWAVE");
  lcd.setCursor(15, 0);
  lcd.print(">");
  lcd.setCursor(2, 1);
  lcd.print("SIGNAL");
  do {
    if ((digitalRead(RIGHT) == 0) && (digitalRead(LEFT) == 0) && (digitalRead(OK) == 0) && (digitalRead(CANCEL) == 0)) {
      Keys();
    }
    if (n == 1) {
      n = 0;
      setupSqwave();
    }
    if (n == 2) {
      n = 0;
    }
    if (n == 3) {
      n = 0;
      digitalWrite(RELAY, LOW);
      lcd.clear();
      lcd.setCursor(4, 0);
      lcd.print("SINEWAVE");
      setupDatos();
    }
    if (n == 4) {
      n = 0;
    }
  } while (n == 0);
}

void setupSqwave() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("<");
  lcd.setCursor(2, 0);
  lcd.print("SQUAREWAVE");
  lcd.setCursor(2, 1);
  lcd.print("SIGNAL");
  do {
    if ((digitalRead(RIGHT) == 0) && (digitalRead(LEFT) == 0) && (digitalRead(OK) == 0) && (digitalRead(CANCEL) == 0)) {
      Keys();
    }
    if (n == 1) {
      n = 0;
    }
    if (n == 2) {
      n = 0;
      setupSinwave();
    }
    if (n == 3) {
      n = 0;
      digitalWrite(RELAY, HIGH);
      lcd.clear();
      lcd.setCursor(3, 0);
      lcd.print("SQUAREWAVE");
      setupDatos();
    }
    if (n == 4) {
      n = 0;
    }
  } while (n == 0);
}

void setupDatos() {
  lcd.setCursor(0, 1);
  lcd.print("FQ:");
  lcd.setCursor(14, 1);
  lcd.print("Hz");
  lcd.setCursor(5, 1);
  lcd.print("00000000");
  lcd.cursor();
  lcd.setCursor(m, 1);
  do {
    if ((digitalRead(RIGHT) == 0) && (digitalRead(LEFT) == 0) && (digitalRead(OK) == 0) && (digitalRead(CANCEL) == 0)) {
      Keys();
    }
    if (n == 1) {
      n = 0;
      m = m + 1;
      if (m >= 12) {
        m = 12;
      }
      lcd.setCursor(m, 1);
    }
    if (n == 2) {
      n = 0;
      m = m - 1;
      if (m <= 5) {
        m = 5;
      }
      lcd.setCursor(m, 1);
    }
    if (n == 3) {
      Check();
      lcd.setCursor(5, 1);
      lcd.print("00000000");
      Update();
      SetFrequency(frequency);
    }
    if (n == 4) {
      Check();
      lcd.setCursor(5, 1);
      lcd.print("00000000");
      Update();
      SetFrequency(frequency);
      while (digitalRead(CANCEL) == 1) {
        t = t + 1;
        delay(1);
        if (t >= 3000) {
          frequency = 0;
          c1 = 0;
          c2 = 0;
          c3 = 0;
          c4 = 0;
          c5 = 0;
          c6 = 0;
          c7 = 0;
          c8 = 0;
          m = 12;
          t = 0;
          lcd.noCursor();
          digitalWrite(RELAY, LOW);
          SetFrequency(frequency);
          setupSinwave();
        }
      }
    }
  } while (n == 0);
}

void Check() {
  switch (m) {
    case 12:
      if (n == 3) {
        c1 = c1 + 1;
        if (c1 >= 9) {
          c1 = 9;
        }
      }
      if (n == 4) {
        c1 = c1 - 1;
        if (c1 <= 0) {
          c1 = 0;
        }
      }
      break;
    case 11:
      if (n == 3) {
        c2 = c2 + 1;
        if (c2 >= 9) {
          c2 = 9;
        }
      }
      if (n == 4) {
        c2 = c2 - 1;
        if (c2 <= 0) {
          c2 = 0;
        }
      }
      break;
    case 10:
      if (n == 3) {
        c3 = c3 + 1;
        if (c3 >= 9) {
          c3 = 9;
        }
      }
      if (n == 4) {
        c3 = c3 - 1;
        if (c3 <= 0) {
          c3 = 0;
        }
      }
      break;
    case 9:
      if (n == 3) {
        c4 = c4 + 1;
        if (c4 >= 9) {
          c4 = 9;
        }
      }
      if (n == 4) {
        c4 = c4 - 1;
        if (c4 <= 0) {
          c4 = 0;
        }
      }
      break;
    case 8:
      if (n == 3) {
        c5 = c5 + 1;
        if (c5 >= 9) {
          c5 = 9;
        }
      }
      if (n == 4) {
        c5 = c5 - 1;
        if (c5 <= 0) {
          c5 = 0;
        }
      }
      break;
    case 7:
      if (n == 3) {
        c6 = c6 + 1;
        if (c6 >= 9) {
          c6 = 9;
        }
      }
      if (n == 4) {
        c6 = c6 - 1;
        if (c6 <= 0) {
          c6 = 0;
        }
      }
      break;
    case 6:
      if (n == 3) {
        c7 = c7 + 1;
        if (c7 >= 9) {
          c7 = 9;
        }
      }
      if (n == 4) {
        c7 = c7 - 1;
        if (c7 <= 0) {
          c7 = 0;
        }
      }
      break;
    case 5:
      if (n == 3) {
        c8 = c8 + 1;
        if (c8 >= 1) {
          c8 = 1;
        }
      }
      if (n == 4) {
        c8 = c8 - 1;
        if (c8 <= 0) {
          c8 = 0;
        }
      }
      break;
  }
  frequency =  c8 * 10000000 + c7 * 1000000 + c6 * 100000 + c5 * 10000 + c4 * 1000 + c3 * 100 + c2 * 10 + c1;
  n = 0;
}

void Update() {
  lcd.noCursor();
  if (frequency >= 0) {
    lcd.setCursor(12, 1);
  }
  if (frequency >= 10) {
    lcd.setCursor(11, 1);
  }
  if (frequency >= 100) {
    lcd.setCursor(10, 1);
  }
  if (frequency >= 1000) {
    lcd.setCursor(9, 1);
  }
  if (frequency >= 10000) {
    lcd.setCursor(8, 1);
  }
  if (frequency >= 100000) {
    lcd.setCursor(7, 1);
  }
  if (frequency >= 1000000) {
    lcd.setCursor(6, 1);
  }
  if (frequency >= 10000000) {
    lcd.setCursor(5, 1);
  }
  lcd.print(frequency);
  lcd.cursor();
  lcd.setCursor(m, 1);
}

Ya encontré el fallo, según leí, arduino realiza operaciones del tipo int, y al incrementar en 10000, se desbordaba cuando alcanzaba el valor máximo (32676). Poniendo "ul" en la operación se arregla.

Pido a los moderadores que cierren el tema.

Muchas gracias.

Ponle tu SOLUCIONADO en el TITULO, asi se cierra y de le dice al moderador que queda cerrado el hilo.