Simple Menu on a Nokia 5110 LCD Arduino Tutorial





  • Connect the pin 1 (RST Pin) to the pin 3 of Arduino through the 10K resistor.
  • Connect the pin 2 (SCE Pin) to the pin 4 of Arduino through the 1K resistor.
  • Connect the pin 3 (D/C Pin) to the pin 5 of Arduino through the 10K resistor.
  • Connect the pin 4 (DIN Pin) to the pin 11 of Arduino through the 10K resistor.
  • Connect the pin 5 (CLK Pin) to the pin 13 of Arduino through the 10K resistor.
  • Connect the pin 6 (VCC Pin) to the 3.3V pin of Arduino.
  • Connect the pin 7 (LED Pin) to the pin 7 of Arduino through the 10K resistor.
  • Connect the pin 8 (GND Pin) to the GND of Arduino.

Sketch Arduino Nokia LCD 5110 Simple Menu

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

#define DEFAULT_CONTRAST 65

boolean backlight = true;
int contrast=DEFAULT_CONTRAST;

int menuitem = 1;
int page = 1;

volatile boolean up = false;
volatile boolean down = false;
volatile boolean middle = false;

int downButtonState = 0;
int upButtonState = 0; 
int selectButtonState = 0;         
int lastDownButtonState = 0;
int lastSelectButtonState = 0;
int lastUpButtonState = 0;

Adafruit_PCD8544 display = Adafruit_PCD8544( 5, 4, 3);

void setup() {

  pinMode(2, INPUT_PULLUP);
  pinMode(1, INPUT_PULLUP);
  pinMode(0, INPUT_PULLUP);
 
  pinMode(7,OUTPUT);

  digitalWrite(7,LOW); //Turn Backlight ON
 
  Serial.begin(9600);
 
  display.begin();     
  display.setContrast(contrast); //Set contrast to 50
  display.clearDisplay();
  display.display(); 
}

void loop() {
 
  Menu();

  checkIfDownButtonIsPressed();
  checkIfUpButtonIsPressed();
  checkIfSelectButtonIsPressed();

}

void checkIfDownButtonIsPressed()
{
    downButtonState   = digitalRead(2);
   
    if (downButtonState != lastDownButtonState)
  {
    if (downButtonState == 0)
    {
      down=true;
    }
    delay(50);
  }
   lastDownButtonState = downButtonState;
 }

void checkIfUpButtonIsPressed()
{
  upButtonState     = digitalRead(0);
  if (upButtonState != lastUpButtonState)
  {
    if (upButtonState == 0) {
      up=true;
    }
    delay(50);
  }
   lastUpButtonState = upButtonState;
}

void checkIfSelectButtonIsPressed()
{
   selectButtonState = digitalRead(1);
   if (selectButtonState != lastSelectButtonState)
  {
    if (selectButtonState == 0) {
      middle=true;
    }
    delay(50);
  }
   lastSelectButtonState = selectButtonState;
}

 
void Menu()
{

    switch( page ){
     case 1: drawMainMenu();
             mainMenuAction();
             
     break;
     case 2: drawSubMenuItem1();
             subMenuItem1Action();
     break;
     
    }
   
 
}

void resetDefaults()
{
    contrast = DEFAULT_CONTRAST;
    setContrast();
    backlight = true;
    turnBacklightOn();
}

void setContrast()
{
    display.setContrast(contrast);
    display.display();
}

void turnBacklightOn()
{
    digitalWrite(7,LOW);
}

void turnBacklightOff()
{
    digitalWrite(7,HIGH);
}

void drawMainMenu()
{
 
    drawMenuTitle(15,1,"MAIN MENU");

    drawSelected();
 
    display.setCursor(10, 15);         
    display.print("Contrast");
   
    display.setCursor(10, 25);   
    display.print("Light: ");
   
    if (backlight)
    {
      display.print("ON");
    }
    else
    {
      display.print("OFF");
    }
     
    display.setCursor(10, 35);
    display.print("Reset");
   
    display.display();
   
}
void drawSubMenuItem1()
{
    drawMenuTitle(15,1, "CONTRAST");
     
    display.setCursor(5, 15);
    display.print("Value");
   
    display.setTextSize(2);
   
    display.setCursor(5, 25);
    display.print(contrast);

    display.display();
   
}
void drawMenuTitle(int x,int y, String title)
{
    display.setTextSize(1);
    display.clearDisplay();
    display.fillRect(0,0,84,9,BLACK);
    display.setTextColor(WHITE, BLACK);
   
    display.setCursor(x, y);
    display.print(title);

    display.setTextColor(BLACK, WHITE);
}
void drawSelected()
{   uint8_t y = 15 + ( (menuitem - 1) * 10) ;
    display.fillTriangle(0,y,0,y+6,5,y+3,BLACK);
}
void mainMenuAction()
{
    if ( up ) {
          up = false;
          menuitem = (--menuitem == 0)?3:menuitem ;           
       }
     if (down) {
          down = false;
          menuitem = (++menuitem == 4)?1:menuitem;
       }

     if (middle) {
          middle = false;
          switch( menuitem ){
           
            case 1 : page=2;
            break;
            case 2 :
                    if (backlight)
                    {
                        backlight = false;
                        turnBacklightOff();
                    }
                    else
                    {
                        backlight = true;
                        turnBacklightOn();
                    }
            break;
            case 3 : resetDefaults();
            break;
          }
     }
}
void subMenuItem1Action()
{
   if ( up ) {
        up = false;
        contrast--;
        setContrast();
     }

   else if ( down ) {
         down = false;
         contrast++;
         setContrast();
     }

   else if ( middle ) {
        middle = false;
        page=1;   
   }
}

ความคิดเห็น