ค่าที่อ่านจาก keypad ผิดพลาด แสดงในจอ LCD

ผมจะส่งค่าจากการพิมพ์บรรทัดที่2 ขึ้นไปบนบรรทัดที่1ครับ แต่ค่าหลักแรกมันจะเป็น 0 ตลอดเลย
ช่วยดูหน่อยครับว่าโค้ดมันผิดตรงไหน

#include <Wire.h>
#include<LiquidCrystal_I2C.h>
#include <Keypad.h>

int Buzzer = 11;

const byte ROWS =4;
const byte COLS =4;
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPin[4] = {9, 8, 7, 6};
byte colPin[4] = {5, 4, 3, 2};

Keypad keypad = Keypad(makeKeymap(keys), rowPin, colPin, 4, 4);
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
  lcd.begin();
  lcd.backlight();
  lcd.home();
  lcd.setCursor(0,0);
  lcd.print("Keypad #");
  lcd.setCursor(0,1);
  lcd.print("Key =     ");
  lcd.blink();
  Serial.begin(115200);
  Serial.println("Test Keypad 4x4");
  pinMode(Buzzer,OUTPUT);
  digitalWrite(Buzzer,HIGH);// off buzzer
}
//--------------------------------------
void loop()
{int Num;

  Num = GetNum(4,10,1);//4หลัก คอลัมที่7 แถวที่4
  lcd.setCursor(10,0);
  lcd.print(Num);
}
//--------------------------------------
char BufNum[8];
void  SlideNum(void)
{
  BufNum[6]  = BufNum[5];
  BufNum[5]  = BufNum[4];
  BufNum[4]  = BufNum[3];
  BufNum[3]  = BufNum[2];
  BufNum[2]  = BufNum[1];
  BufNum[1]  = BufNum[0];
}
//จำนวนหลักมากสุด,หลัก,แถว
unsigned long GetNum(int Count,int X,int Y)
{ char Key,i,N;
  int Sum; 

  lcd.setCursor(X+(Count-1),Y); 
  N = 0;
  for(i=0;i<Count;i++)
  {
    BufNum[i] = ' ';
    }
  i = 0;
  while(Key != '#')
  { Key = NO_KEY;
    while(Key == NO_KEY)
    {
      Key = keypad.getKey();
      }    
    Beep(); 
    delay(300);
    
   if(Key == '*'){
    for(i=0;i<Count;i++)
    {
      BufNum[i] = ' ';}N = 0;
    }                  
   if((N < Count)&&(Key >= '0')&&(Key <= '9'))
   { 
    SlideNum();
     BufNum[0] = Key;
     N++;
   }
   lcd.setCursor(X,Y);
   for(i=0;i<Count;i++)
   {
    lcd.print(BufNum[Count-(i+1)]);
    }
   lcd.setCursor(X+(Count-1),Y);  
  
  }
Sum = 0;
for(i=0;i<Count;i++)
 {
   if(BufNum[Count-(i+1)]==0x20){BufNum[Count-(i+1)] = '0';}
   Sum = (Sum*10) + (BufNum[Count-(i+1)]-'0');
 }
lcd.noCursor();
return(Sum);  
}
//--------------------------------------
void Beep(){
  digitalWrite(Buzzer,LOW);delay(50);
  digitalWrite(Buzzer,HIGH);
}

มีอุปกรณ์อะไรต่อบ้างครับ ถ่ายภาพรวมมาดูหน่อย แล้วเวลาป้อนข้อมูลเข้าไปป้อนแบบไหนอธิบายด้วยครับ

arduino uno r3 ต่อกับ keypad4x4

arduino uno r3 ต่อกับ keypad4x4 ต่อกับจอ LCD16x2
การทำงานให้รับค่าจากปุ่มกดไปแสดงค่าส่งค่าจากการพิมพ์บรรทัดที่ 2 ขึ้นไปบนบรรทัดที่1ครับ
ปัญหาก็ตามโพสแรกเลยหลักหน้ามันเป็น0ครับ