3

Since the DUE works on 3.3 volts has anyone successfully modified a 5V 16x2 LCD shield to work with Arduino DUE? I'm thinking 3.3V will be seen as a logic "1" by the 5V LCD shield and there are no 5V outputs that feed back to the 3.3V due if the R/~W line on the LCD is simply grounded.

Would love to hear anyone's opinion on this.

Thanks, Charlie

dda
1,5951 gold badge12 silver badges17 bronze badges
asked Apr 7, 2015 at 18:35
1
  • Is the R/W line broken out, or always connected to ground? During startup the pins are floating, which the lcd might interpret as a HIGH, outputting 5V to the data pins. You could add an external pull-down resistor to that pin, just to be safe. Other than that, you are totally correct. No problem. Commented Apr 7, 2015 at 18:54

1 Answer 1

3

I understand this is an 8yo thread, however my answer might still help someone. I connected an unmodified no-brand LCD Shield to an Arduino DUE and it works perfectly - the only thing I had to change was the analog thresholds to identify the buttons. Just upload the sketch and read out the real values on the display then enter the averages between adjacent buttons in read_LCD_buttons function.

//Sample using LiquidCrystal library
#include <LiquidCrystal.h>
/*******************************************************
This program will test the LCD panel and the buttons
Mark Bramwell, July 2010
********************************************************/
// select the pins used on the LCD panel
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// define some values used by the panel and buttons
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
// read the buttons
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // read the value from the sensor
if (adc_key_in < 90) return btnRIGHT;
if (adc_key_in < 297) return btnUP;
if (adc_key_in < 533) return btnDOWN;
if (adc_key_in < 814) return btnLEFT;
if (adc_key_in < 1000) return btnSELECT;
return btnNONE; // when all others fail, return this...
}
int button_count=1;
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
int i;
void setup()
{
lcd.begin(16, 2); // start the library
lcd.setCursor(0,0);
lcd.print("Push the buttons"); // print a simple message
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
void loop()
{
 delay(100);
 lcd.setCursor(9,1); // move cursor to second line "1" and 9 spaces over
 lcd.print(" ");
 lcd.setCursor(9,1); // move cursor to second line "1" and 9 spaces over
 lcd.print(analogRead(0)); // display A0 analog input to calibrate values
 lcd.setCursor(0,1); // move to the begining of the second line
 lcd_key = read_LCD_buttons(); // read the buttons
 switch (lcd_key) // depending on which button was pushed, we perform an action
 {
 case btnRIGHT:
 lcd.print("RIGHT ");
 button_count = 2;
 break;
 case btnLEFT:
 lcd.print("LEFT ");
 button_count = 3;
 break;
 case btnUP:
 lcd.print("UP ");
 button_count = 4;
 break;
 case btnDOWN:
 lcd.print("DOWN ");
 button_count = 5;
 break;
 case btnSELECT:
 lcd.print("SELECT");
 button_count = 6;
 break;
 case btnNONE:
 lcd.print("NONE ");
 button_count = 1;
 break;
 }
}
answered Oct 17, 2023 at 6:17

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.