Python Forum
20 x 4 Line 2 scrolling text for LCD-I2C Display
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
20 x 4 Line 2 scrolling text for LCD-I2C Display
#1
Hello Everyone,
I am new to coding and the Raspberry Pi, and I hope you can help me out?
I have a code to display to an LCD-I2C 20x4 display but I want (LCD_LINE_2) to scroll from Right to Left. This would be easy if I had just 1 line of the same text to display, but for each #Train I want a different set of "Calling At" stations so the text will change every time.
I have tried contacting the person who wrote he code but I have had no reply.
I am using Python3.x
Thank you for any and all help in this matter.

#!/usr/bin/python
#--------------------------------------
#    ___  ___  _ ____
#   / _ \/ _ \(_) __/__  __ __
#  / , _/ ___/ /\ \/ _ \/ // /
# /_/|_/_/  /_/___/ .__/\_, /
#                /_/   /___/
#
#  lcd_i2c.py
#  LCD test script using I2C backpack.
#  Supports 16x2 and 20x4 screens.
#
# Author : Matt Hawkins
# Date   : 20/09/2015
#
# http://www.raspberrypi-spy.co.uk/
#
# Copyright 2015 Matt Hawkins
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
#--------------------------------------
import smbus
import time

# Define some device parameters
I2C_ADDR  = 0x27 # I2C device address
LCD_WIDTH = 20   # Maximum characters per line

# Define some device constants
LCD_CHR = 1 # Mode - Sending data
LCD_CMD = 0 # Mode - Sending command

LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line
LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line
LCD_LINE_3 = 0x94 # LCD RAM address for the 3rd line
LCD_LINE_4 = 0xD4 # LCD RAM address for the 4th line

LCD_BACKLIGHT  = 0x08  # On
#LCD_BACKLIGHT = 0x00  # Off

ENABLE = 0b00000100 # Enable bit

# Timing constants
E_PULSE = 0.0005
E_DELAY = 0.0005

#Open I2C interface
#bus = smbus.SMBus(0)  # Rev 1 Pi uses 0
bus = smbus.SMBus(1) # Rev 2 Pi uses 1

def lcd_init():
  # Initialise display
  lcd_byte(0x33,LCD_CMD) # 110011 Initialise
  lcd_byte(0x32,LCD_CMD) # 110010 Initialise
  lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction
  lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off 
  lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size
  lcd_byte(0x01,LCD_CMD) # 000001 Clear display
  time.sleep(E_DELAY)

def lcd_byte(bits, mode):
  # Send byte to data pins
  # bits = the data
  # mode = 1 for data
  #        0 for command

  bits_high = mode | (bits & 0xF0) | LCD_BACKLIGHT
  bits_low = mode | ((bits<<4) & 0xF0) | LCD_BACKLIGHT

  # High bits
  bus.write_byte(I2C_ADDR, bits_high)
  lcd_toggle_enable(bits_high)

  # Low bits
  bus.write_byte(I2C_ADDR, bits_low)
  lcd_toggle_enable(bits_low)

def lcd_toggle_enable(bits):
  # Toggle enable
  time.sleep(E_DELAY)
  bus.write_byte(I2C_ADDR, (bits | ENABLE))
  time.sleep(E_PULSE)
  bus.write_byte(I2C_ADDR,(bits & ~ENABLE))
  time.sleep(E_DELAY)

def lcd_string(message,line):
  # Send string to display

  message = message.ljust(LCD_WIDTH," ")

  lcd_byte(line, LCD_CMD)

  for i in range(LCD_WIDTH):
    lcd_byte(ord(message[i]),LCD_CHR)

def main():
  # Main program block

  # Initialise display
  lcd_init()

  while True:
    
    # Train 1
    lcd_string("1st Victoria Only",LCD_LINE_1)
    lcd_string("Calling At Victoria Only",LCD_LINE_2)
    lcd_string("2nd Orpington",LCD_LINE_3)
    lcd_string("3rd Wisbech         ",LCD_LINE_4)

    time.sleep(180)
  
    # Train 2
    lcd_string("1st Orpington",LCD_LINE_1)
    lcd_string("Calling At Bromley, Petts Wood, Bickley And Orpington",LCD_LINE_2)
    lcd_string("2nd Wisbech",LCD_LINE_3)
    lcd_string("3rd Victoria",LCD_LINE_4)

    time.sleep(180)
    
    # Train 3
    lcd_string("1st Wisbech",LCD_LINE_1)
    lcd_string("Calling At Peterborough, Ely and Wisbech",LCD_LINE_2)
    lcd_string("2nd Victoria",LCD_LINE_3)
    lcd_string("3rd Orpington",LCD_LINE_4)
    
    time.sleep(180)
    

if __name__ == '__main__':

  try:
    main()
  except KeyboardInterrupt:
    pass
  finally:
    lcd_byte(0x01, LCD_CMD)
Reply
#2
How do you expect to get the text you want to display? Is it written in a file, or do want to generate automatically in your code?
Reply
#3
Hi Marsokod,
The text is in the code at the bottom, under the "While True". it does display on the LCD, but as "LCD_LINE_2" is longer than the 20 characters, I need that line to scroll, which it does not do currently. I have found scrolling strings, but I can only put one line of text in (e.g. "this is my long string"). In my case I need the text to change for each #Train as they have different "Calling at" stations.

This project is for a model railway, but i want it to mimic a real life train station display board, but I won't be using real train station names when I'm finished.

I hope this helps, any other questions please don't hesitate to ask.
Thanks,
RoadieMunky
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  help with scrolling text on RGB Matrix Foutsy 3 252 Apr-09-2024, 09:00 PM
Last Post: deanhystad
  Scrolling in Python newpyt 6 737 Nov-23-2023, 09:10 PM
Last Post: newpyt
  How to display <IPython.core.display.HTML object>? pythopen 3 45,915 May-06-2023, 08:14 AM
Last Post: pramod08728
  Graphic line plot with matplotlib, text file in pytho khadija 2 1,375 Aug-15-2022, 12:00 PM
Last Post: khadija
  Skipping line in text without Restarting Loop IdMineThat 4 1,477 Apr-05-2022, 04:23 AM
Last Post: deanhystad
  Find and delete above a certain line in text file cubangt 12 3,458 Mar-18-2022, 07:49 PM
Last Post: snippsat
  CSV to Text File and write a line in newline atomxkai 4 2,685 Feb-15-2022, 08:06 PM
Last Post: atomxkai
  How to make for loop display on 1 Line Extra 3 1,426 Jan-12-2022, 09:29 PM
Last Post: Extra
  raspberry use scrolling text two lines together fishbone 0 1,446 Sep-06-2021, 03:24 AM
Last Post: fishbone
  Can Python be used to create scrolling credits (as follows) digger 3 2,908 Aug-27-2021, 03:15 PM
Last Post: Larz60+

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020