element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      • Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Arduino
  • Products
  • More
Arduino
Arduino Forum Arduino lcd button input help
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Arduino to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Verified Answer
  • Replies 16 replies
  • Answers 2 answers
  • Subscribers 403 subscribers
  • Views 1933 views
  • Users 0 members are here
  • help
  • asap
  • beginner
Related

Arduino lcd button input help

Former Member
Former Member over 11 years ago

I am working on a project and i'm trying to get the lcd to print what button was pressed, but it does not respond to the buttons I am going off of my "Arduino Projects Book" so that may be why the code is a bit messy.

 

 

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int buttonOne = 8;

const int buttonTwo = 7;

int prevSwitchState = 0;

int switchState = 0;

int prevSwitchStateTwo = 0;

int switchStateTwo = 0;

void setup(){

  lcd.begin(16, 2); 

pinMode(buttonOne &&  buttonTwo, INPUT);

   lcd.print("Welcome"); 

lcd.setCursor(0,1);

  lcd.print("Lftbtn = A");

  delay (5000); 

lcd.clear();//Clears screen

lcd.print("Rgtbtn = B");

  delay (5000); 

lcd.clear();

}

void loop(){ 

  lcd.setCursor(0,0);

   lcd.print("test"); 

switchState = digitalRead(buttonOne); 

if (prevSwitchState != switchState){   

if (buttonOne == HIGH){    lcd.print("B");   

} 

} 

else if ( prevSwitchStateTwo != switchStateTwo){  

  if (buttonTwo == HIGH){  

lcd.print("A");   

} 

} 

}

  • Sign in to reply
  • Cancel
Parents
  • Robert Peter Oakes
    0 Robert Peter Oakes over 11 years ago

    first you can not initialise two inputs with one statement

    pinMode(buttonOne &&  buttonTwo, INPUT); will not work, you just tried to initialise button 0 (7 && 8) results in 0

    you need to do this

    pinMode(buttonOne, INPUT);

    pinMode(buttonTwo, INPUT);



    second you cant read two buttons at one with this kind of code, you can do it but using more advanced code, your not there yet


    so you need

    switchState = digitalRead(buttonOne);  
    if (prevSwitchState != switchState){    
         if (buttonOne == HIGH){   
               lcd.print("B");    
         }  
    }  
    switchStateTwo = digitalRead(buttonTwo);  
    if (prevSwitchStateTwo != switchStateTwo ){    
         if (buttonTwo== HIGH){   
               lcd.print("A");    
         }  
    } 


    this should fix your problem, note this is only correcting part of your program, you will need to fit it into your code


    Regards


    Peter

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Reject Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to Robert Peter Oakes

    So in the end it should be like this?

     

     

    #include LiquidCrystal

    lcd(12, 11, 5, 4, 3, 2);

    const int buttonOne = 8;

    const int buttonTwo = 7;

    int prevSwitchState = 0;

    int switchState = 0;

    int prevSwitchStateTwo = 0;

    int switchStateTwo = 0;

    void setup(){ 

    lcd.begin(16, 2);

      pinMode(buttonOne, INPUT);

      pinMode(buttonTwo, INPUT);

    lcd.print("Welcome"); 

    lcd.setCursor(0,1);

    lcd.print("Lftbtn = A");

      delay (5000);

      lcd.clear();//Clears screen

      lcd.print("Rgtbtn = B");

      delay (5000);

      lcd.clear();

    }

    void loop(){

      lcd.setCursor(0,0);

      switchState = digitalRead(buttonOne);

      if (prevSwitchState != switchState){       

      if (buttonOne == HIGH){      

         lcd.print("B");       

      }  

    }   

    switchStateTwo = digitalRead(buttonTwo);

       if (prevSwitchStateTwo != switchStateTwo ){   

          if (buttonTwo== HIGH){        

         lcd.print("A");       

      }  

    }  

    }

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Robert Peter Oakes
    0 Robert Peter Oakes over 11 years ago in reply to Former Member

    looks correct, have you tried it yet ?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Reply
  • Robert Peter Oakes
    0 Robert Peter Oakes over 11 years ago in reply to Former Member

    looks correct, have you tried it yet ?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Children
  • Former Member
    0 Former Member over 11 years ago in reply to Robert Peter Oakes

    Ya I have tried it, but it still doesn't print the letters out. Maybe the buttons are broken?

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to Former Member

    Do you get the messages displayed on the LCD during the setup? (The welcome message etc) That would at least confirm the LCD and Arduino are both functional.

     

    You can easily test if the buttons are broken by using either a resistance / continuity function on a multimeter, or failing that just take a line from the 5v on your Arduino, put an LED into a current limiting resistor and then the switch / button the other side of which connect to GND.

     

    Have you pulled the pins 7 & 8 down to GND with a resistor (I usually go for 10K but most higher values would be ok)? This ensures the pin isn't floating and will read correctly when the switch is pushed.

     

    The other thing that you could be giving you problems is switch bouncing. It looks like the code you have based you sketch on originally had some debouncing in it that hasn't quite made it across to your version. That is my assumption of the use of the prevSwitchState int as in your sketch it never changes and I can't really see a need for it.

     

    There are a couple of different ways of debouncing a button if you believe that this is causing you a problem. Check out the Examples folder in the arduino IDE. In there you will see the Digital folder and inside a Debounce sketch which takes a reading from a button but doesn't act upon it for a few milliseconds when it can be sure that the switch has finished bouncing.

     

    A good video to watch that might help you with tracking down some of these problems is the Tutorials for Arduino series by Jeremy Blum, specifically episode 2 where is sets up and input switch and walks though writing the code to debounce the input. https://www.youtube.com/watch?v=_LCCGFSMOr4

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to Former Member

    The setup messages are displayed and I have 10K resistors to ground, and the buttons seem to be working. I'll look up Jermey Blum's video.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to Former Member

    You could test the continuity of the buttons pressed state with either the Ohms or continuity settings on a multimeter to test your buttons. Also your buttons could be in the wrong position, if you are using regular through hole tactile switches look and see which side the leads are coming out the two pins there are the correct ones to connect to your Arduino.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to Former Member

    The continuity seems to be fine and the pins are the right way on the tactile switches

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 11 years ago in reply to Former Member

    Are you able to test the pin voltage with a multimeter when the button is pressed? If it is reading correctly in both states then at least you'd know that it's now just a coding issue

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • mcb1
    0 mcb1 over 11 years ago in reply to Former Member

    Guys

    The above code will never detect the second button as its outside of the main loop, and is not being called.

     

    Try this to prove the switches work.

    They should be connected to +5v and the pin, with the resistor from the pin to ground.

     

    #include <LiquidCrystal.h>
    
    LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
    
    const int buttonOne = 8;
    const int buttonTwo = 7;
    int prevSwitchState = 0;
    int switchState = 0;
    int prevSwitchStateTwo = 0;
    int switchStateTwo = 0;
    
    void setup(){ 
    
    lcd.begin(16, 2);
      pinMode(buttonOne, INPUT);
      pinMode(buttonTwo, INPUT);
    lcd.print("Welcome"); 
    lcd.setCursor(0,1);
    lcd.print("Lftbtn = A");
      delay (5000);
      lcd.clear();//Clears screen
      lcd.print("Rgtbtn = B");
      delay (5000);
      lcd.clear();
    
    }
    
    void loop()
    {
      lcd.setCursor(0,0);                //this is the top line at the far left position
    
      //switchState = digitalRead(buttonOne);
    
      //if (prevSwitchState != switchState){       
    
      if (digitalRead (buttonOne) == HIGH)
      {      
         lcd.print("B");       
      }  
        if (digitalRead (buttonTwo) == HIGH)
      {      
         lcd.print("A");       
      }
      
    
    }   
    
    
    
    
    // this will never run as its outside the loop. I commented it to compile.
    
    
    //switchStateTwo = digitalRead(buttonTwo);
    
    //   if (prevSwitchStateTwo != switchStateTwo ){   
    
    //      if (buttonTwo== HIGH){        
    
    //     lcd.print("A");       
    
    //  }  
    
    //}  
    
    //}

     

     

    If you get this far then you can worry about doing the other things.

     

     

    Cheers

    Mark

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Reject Answer
    • Cancel
  • Robert Peter Oakes
    0 Robert Peter Oakes over 11 years ago in reply to mcb1

    sorry mark, just tried what I had posted and it is in the loop, it is badly formatted so I re-aligned the braces below, both versions compile ok

     

    peter

     

    #include LiquidCrystal
    lcd(12, 11, 5, 4, 3, 2);
    const int buttonOne = 8;
    const int buttonTwo = 7;
    int prevSwitchState = 0;
    int switchState = 0;
    int prevSwitchStateTwo = 0;
    int switchStateTwo = 0;
    void setup(){ 
      lcd.begin(16, 2);
      pinMode(buttonOne, INPUT);
      pinMode(buttonTwo, INPUT);
      lcd.print("Welcome"); 
      lcd.setCursor(0,1);
      lcd.print("Lftbtn = A");
      delay (5000);
      lcd.clear();//Clears screen
      lcd.print("Rgtbtn = B");
      delay (5000);
      lcd.clear();
    }
    void loop()
    {
       lcd.setCursor(0,0);
       switchState = digitalRead(buttonOne);
       if (prevSwitchState != switchState)
        {       
        if (buttonOne == HIGH)
          {      
             lcd.print("B");       
          }  
        }   
      switchStateTwo = digitalRead(buttonTwo);
      if (prevSwitchStateTwo != switchStateTwo )
       {   
          if (buttonTwo== HIGH)
          {        
             lcd.print("A");       
          }  
       }    
    }

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube