Hello,
I’ve come across an unexpected issue that may be hard to diagnose due to required hardware, but here goes.
I have a Raspberry Pi connected to an LCD display that I’m testing turning the screen on and off (not worrying about displaying text, I’ve previously written a program that uses a DHT22 sensor to display the temperature & humidity and external weather conditions using the Pirate Weather API).
While trying to write a simple program just to turn the display on or off, I run into an issue.
Here’s the code:
import board
import datetime
# I2C driver from:
# https://gist.github.com/vay3t/8b0577acfdb27a78101ed16dd78ecba1
import I2C_LCD_driver
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("state", help="'on' to turn on the screen, 'off' to turn off",type=str)
args = parser.parse_args()
mylcd = I2C_LCD_driver.lcd()
match args.state:
case "on":
power = 1
case "off":
power = 0
case _:
print("Please enter 'on' or 'off'")
power = None
if power != None:
print(power) # this is just to test
mylcd.backlight(power)
What’s happening that I don’t understand is if power == None, the if statement will not trigger but the display will turn on.
The only way I’ve been able to keep the display off is if I add an else statement:
else:
pass
This is using Python 3.10. My understanding is the else should not be needed at all. Any suggestions as to why the display might be turning on, or a better suggestion on how to handle the match statement?
–EDIT–
So it turns out initializing the display is turning it on at the same time. For a community that had no activity for ~2 years before this post, I’m pleasantly surprised with the amount of responses I’ve gotten - you all are awesome!
It’s been a while since I’ve done Python so I might be hazy on my syntax but that code reads to me like the if statement is only applying to the print immediately below. Especially with what you’re saying of it working properly adding that basically empty else case.
So like if I were to add some imaginary grouping, instead of
if power != None: { print(power) # this is just to test mylcd.backlight(power) }
You’re getting
if power != None: { print(power) # this is just to test } mylcd.backlight(power)
And the mylcd.backlight(power) statement is running regardless of the state of the power variable? Again it’s been a few years since I’ve done Python so I might be misremembering the syntax rules. But that’s how it’s reading to me.
The code is intended to only run mylcd.backlight(power) if the power variable was anything but 1 or 0, but the initialization was turning it on unexpectedly.
I’d think if it was related to initialization then the else statement wouldn’t result in the display staying off as you mentioned in the post though. Either way, glad you figured it out and it’s doing what you want it to now.