On 26/09/2019 12:55, Rhodri James wrote:
On 26/09/2019 11:58, RobH wrote:
Thanks, but was is Python REPR.

DL was referring to the interactive program you get when you type "python" at a Linux or Windows command prompt.  Here's an example, copied from my Linux box:

rhodri@scrote:~$ python
Python 2.7.15+ (default, Jul  9 2019, 16:51:35)
[GCC 7.4.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
 >>> import cgi
 >>> help(cgi)
[[screeds of documentation for the cgi module cut]]
 >>> [[type control-D to get out]]
rhodri@scrote:~$

(The bits in [[double square brackets]] are my comments, not something either I or Python typed!)

This my adaptation of non working code. Bodged from the char_lcd.py code:

   GNU nano 2.7.4                          File: char_lcd.py

#!/usr/bin/python
# Example using a character LCD connected to a Raspberry Pi or BeagleBone Black.
import time

import Adafruit_CharLCD as LCD

Aha, that's the critical information we were lacking earlier.  I found the Adafruit_CharLCD library after a little googling.  It's marked as deprecated (the author now uses something else), but if it works for you you might as well keep on using it.

[[Much set-up for the Pi cut for brevity]]

# Initialize the LCD using the pins above.
lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,
                            lcd_columns, lcd_rows, lcd_backlight)

# Print a two line message
# lcd.message('Hello\nworld!')
lcd.message( "Hello" 1)

It looks like lcd.message() takes a text string and displays on the LCD, starting at the current cursor position (I'll get back to that).  You optimistically added an extra argument, the line number to start at (you're missing a comma, but that's an easy typo to make and I assume you already caught it).  Unfortunately lcd.message() only takes the one argument, the text string.  This is where that error message comes from: "TypeError: message() takes exactly 2 arguments (3 given)" means that you gave the function more arguments than it knew what to do with.

(Why 2 and 3 instead of 1 and 2?  "lcd" itself is an argument to message(), telling it which lcd to send the message to if you had more than one.  When you look at the function definition, you'll see that it start with "def message(self, text):" which makes that a bit more explicit.  Anyway, that's beside the point.)

So how do you control where you start your message on the LCD?  It looks like the answer is the lcd.set_cursor() function.  The cursor is the point from which your printing starts.  In your text editor it's probably a blinking vertical line (or underscore, or blob... editors vary).  On your LCD display it's probably invisible, though it looks like there's another function to change that.

Anyway, you give set_cursor() a column number and a row number in that order.  I think they start from 0, so to write "Hello" to the second line of your display you would write:

   lcd.set_cursor(0, 1)
   lcd.message("Hello")

The gotcha here is that message() is only going to write the characters you tell it to, and won't overwrite anything else.  If for example you followed up the two lines above with:

   lcd.set_cursor(0, 1)  # Back to the start of the line
   lcd.message("Bye")

you would end up with "Byelo" displayed on the LCD.  You would need to put extra spaces on the end of your message to overwrite the characters you don't want any more, but not so many that you overwrite what you want to keep.  Working out how many spaces that is for any given message could be quite tedious.  You may well find it easier to lcd.clear() the whole display and rewrite everything when you want to change anything.

Anyway, I hope that helps.


Thank you, that does help me just great.
So simple as well. Actually I have worked quite a lot with Arduinos and the code or sketch for an lcd there is just the same to write to the 2nd line. I didn't think it would work for python, but it does! Other lines like lcd.delay(1000) and lcd.begin(16,2), do not work in python, but I thought to try them to find out.

I am using a Raspberry Pi Zero for this little project, which now does what I want for now.

Thanks again.
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to