Python Forum
Thread Rating:
  • 1 Vote(s) - 3 Average
  • 1
  • 2
  • 3
  • 4
  • 5
LED control menu
#15
We're nearly there, the code works and i can change which gpio is true or false via the doHAT only problem is when your faced with the on or off options the previous error appears in the shell,
however the on and off also dont scroll so you dont know which is selected it appears like:
Off
>On
Off
you also cant seem to go back once on this screen
#!/usr/bin/env python

import sys
import time

import dothat.backlight as backlight
import dothat.lcd as lcd
import dothat.touch as nav
from dot3k.menu import Menu, MenuOption
from time import sleep 

# Add the root examples dir so Python can find the plugins
sys.path.append('/home/pi/Pimoroni/displayotron/examples')

from plugins.clock import Clock
from plugins.graph import IPAddress, GraphTemp, GraphCPU, GraphNetSpeed, GraphSysReboot, GraphSysShutdown
from plugins.text import Text
from plugins.utils import Backlight, Contrast

import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setup(13,GPIO.OUT)
GPIO.setup(5,GPIO.OUT)

print("""
This advanced example uses the menu framework.
It gives you a basic menu setup with plugins. You should be able to view system info and adjust settings!

Press CTRL+C to exit.
""")

class Lightcontrol(MenuOption):
    """Control; Lights"""
    def __init__(self):
        self.selected_option = 0
        self.options = [
        'On',
        'Off',
        ]
        self.actions = [
            self.handle_On,
            self.handle_Off,
            ]
    def handle_On(self):
        GPIO.output(13,0)
        GPIO.output(5,0)
        GPIO.output(13,1)
        print('ON! Doing monkey stuff!')
        time.sleep(2)
        print('Done monkey stuff!')
        

    def handle_Off(self):
        GPIO.output(5,0)
        GPIO.output(13,0)
        GPIO.output(5,1)
        print("OFF! Doing donkey stuff!")
        time.sleep(2)
        print("Done donkey stuff!")

    def select_option(self):
        self.actions[self.selected_option]()

    def next_option(self):
        self.selected_option = (self.selected_option + 1) % len(self.options)

    def prev_option(self):
        self.selected_option = (self.selected_option - 1) % len(self.options)

    def up(self):
        self.prev_option()

    def down(self):
        self.next_option()

    def right(self):
        self.select_option()

    def get_current_option(self):
        return self.options[self.selected_option]

    def get_next_option(self):
        return self.options[(self.selected_option + 1) % len(self.options)]

    def get_prev_option(self):
        return self.options[(self.selected_option - 1) % len(self.options)]

    def redraw(self, menu):
        menu.write_option(
            row=0,
            margin=1,
            icon='',
            text=self.get_prev_option()
            )

        menu.write_option(
            row=1,
            margin=1,
            icon='>',  # Let's use a > to denote the currently selected option
            text=self.get_current_option()
            )

        menu.write_option(
            row=2,
            margin=1,
            icon='',
            text=self.get_next_option()
            )
    
    
"""
Using a set of nested lists you can describe
the menu you want to display on dot3k.

Instances of classes derived from MenuOption can
be used as menu items to show information or change settings.

See GraphTemp, GraphCPU, Contrast and Backlight for examples.
"""


menu = Menu(
    structure={
            'Power Options': {
                'Reboot':GraphSysReboot(),
                'Shutdown':GraphSysShutdown(),
                },
            'Aquarium': {
                'Lighting': {
                    'Control': Lightcontrol(),
                    }
                },
        'Clock': Clock(backlight),
        'Status': {
            'IP': IPAddress(),
            'CPU': GraphCPU(backlight),
            'Temp': GraphTemp()
        },
        'Settings': {
            'Display': {
                'Contrast': Contrast(lcd),
                'Backlight': Backlight(backlight)
            }
        }
    },
    lcd=lcd,
    idle_timeout=30,
    input_handler=Text())

"""
You can use anything to control dot3k.menu,
but you'll probably want to use dot3k.touch
"""
nav.bind_defaults(menu)

while 1:
    menu.redraw()
    time.sleep(0.05)

Just tried this think thats what you meant but now i get the name 'handle_on'is not defined again

#!/usr/bin/env python
 
import sys
import time
 
import dothat.backlight as backlight
import dothat.lcd as lcd
import dothat.touch as nav
from dot3k.menu import Menu, MenuOption
from time import sleep 
 
# Add the root examples dir so Python can find the plugins
sys.path.append('/home/pi/Pimoroni/displayotron/examples')
 
from plugins.clock import Clock
from plugins.graph import IPAddress, GraphTemp, GraphCPU, GraphNetSpeed, GraphSysReboot, GraphSysShutdown
from plugins.text import Text
from plugins.utils import Backlight, Contrast
 
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
GPIO.setup(13,GPIO.OUT)
GPIO.setup(5,GPIO.OUT)
 
print("""
This advanced example uses the menu framework.
It gives you a basic menu setup with plugins. You should be able to view system info and adjust settings!
 
Press CTRL+C to exit.
""")
 
class Lightcontrol(MenuOption):
    """Control; Lights"""
    def __init__(self):
        self.selected_option = 0
        self.options = [
        'On',
        'Off',
        ]
        self.actions = [
            handle_On,
            handle_Off,
            ]
    def handle_On(self):
        GPIO.output(13,0)
        GPIO.output(5,0)
        GPIO.output(13,1)
        print('ON! Doing monkey stuff!')
        time.sleep(2)
        print('Done monkey stuff!')
         
 
    def handle_Off(self):
        GPIO.output(5,0)
        GPIO.output(13,0)
        GPIO.output(5,1)
        print("OFF! Doing donkey stuff!")
        time.sleep(2)
        print("Done donkey stuff!")
 
def select_option(self):
    self.actions[self.selected_option]()
 
def next_option(self):
    self.selected_option = (self.selected_option + 1) % len(self.options)
 
def prev_option(self):
    self.selected_option = (self.selected_option - 1) % len(self.options)
 
def up(self):
    self.prev_option()
 
def down(self):
    self.next_option()
 
def right(self):
    self.select_option()
 
def get_current_option(self):
    return self.options[self.selected_option]
 
def get_next_option(self):
    return self.options[(self.selected_option + 1) % len(self.options)]
 
def get_prev_option(self):
    return self.options[(self.selected_option - 1) % len(self.options)]

def redraw(self, menu):
    menu.write_option(
        row=0,
        margin=1,
        icon='',
        text=self.get_prev_option()
        )
 
    menu.write_option(
        row=1,
        margin=1,
        icon='>',  # Let's use a > to denote the currently selected option
        text=self.get_current_option()
        )
 
    menu.write_option(
        row=2,
        margin=1,
        icon='',
        text=self.get_next_option()
        )
     
     
"""
Using a set of nested lists you can describe
the menu you want to display on dot3k.
 
Instances of classes derived from MenuOption can
be used as menu items to show information or change settings.
 
See GraphTemp, GraphCPU, Contrast and Backlight for examples.
"""
 
 
menu = Menu(
    structure={
            'Power Options': {
                'Reboot':GraphSysReboot(),
                'Shutdown':GraphSysShutdown(),
                },
            'Aquarium': {
                'Lighting': {
                    'Control': Lightcontrol(),
                    }
                },
        'Clock': Clock(backlight),
        'Status': {
            'IP': IPAddress(),
            'CPU': GraphCPU(backlight),
            'Temp': GraphTemp()
        },
        'Settings': {
            'Display': {
                'Contrast': Contrast(lcd),
                'Backlight': Backlight(backlight)
            }
        }
    },
    lcd=lcd,
    idle_timeout=30,
    input_handler=Text())
 
"""
You can use anything to control dot3k.menu,
but you'll probably want to use dot3k.touch
"""
nav.bind_defaults(menu)
 
while 1:
    menu.redraw()
    time.sleep(0.05)
Reply


Messages In This Thread
LED control menu - by trippyt - May-31-2018, 06:43 AM
RE: LED control menu - by wavic - May-31-2018, 06:59 AM
RE: LED control menu - by trippyt - May-31-2018, 01:55 PM
RE: LED control menu - by trippyt - May-31-2018, 07:22 AM
RE: LED control menu - by wavic - May-31-2018, 09:27 AM
RE: LED control menu - by trippyt - May-31-2018, 11:58 AM
RE: LED control menu - by wavic - May-31-2018, 12:02 PM
RE: LED control menu - by trippyt - May-31-2018, 12:10 PM
RE: LED control menu - by wavic - May-31-2018, 12:49 PM
RE: LED control menu - by wavic - May-31-2018, 02:30 PM
RE: LED control menu - by trippyt - May-31-2018, 02:40 PM
RE: LED control menu - by wavic - May-31-2018, 03:19 PM
RE: LED control menu - by trippyt - May-31-2018, 03:35 PM
RE: LED control menu - by wavic - May-31-2018, 03:42 PM
RE: LED control menu - by trippyt - May-31-2018, 03:51 PM
RE: LED control menu - by wavic - May-31-2018, 04:02 PM
RE: LED control menu - by trippyt - May-31-2018, 04:13 PM
RE: LED control menu - by wavic - May-31-2018, 04:47 PM
RE: LED control menu - by trippyt - May-31-2018, 04:53 PM
RE: LED control menu - by wavic - May-31-2018, 05:18 PM
RE: LED control menu - by trippyt - May-31-2018, 05:45 PM
RE: LED control menu - by trippyt - May-31-2018, 06:58 PM
RE: LED control menu - by wavic - May-31-2018, 07:16 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Remote control of the Visual Studio 2013 debug menu using Python MariusTo 0 2,537 Jan-17-2018, 04:58 PM
Last Post: MariusTo

Forum Jump:

User Panel Messages

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