Deleted lcdMenu.py
as it was a copy of the old ProgramChooser, and this project will be a complete rewrite
This commit is contained in:
		
							
								
								
									
										90
									
								
								lcdMenu.py
									
									
									
									
									
								
							
							
						
						
									
										90
									
								
								lcdMenu.py
									
									
									
									
									
								
							| @@ -1,90 +0,0 @@ | |||||||
| """ |  | ||||||
| ProgramChooser - a program launcher for microPython |  | ||||||
| Copyright (C) 2024  Benjamin Burkhardt <bluefox@privacynerd.de> |  | ||||||
|  |  | ||||||
| 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 <https://www.gnu.org/licenses/>. |  | ||||||
| """ |  | ||||||
|  |  | ||||||
| from machine import Pin, I2C |  | ||||||
| from PCF8574T import I2C_LCD |  | ||||||
| import time |  | ||||||
|  |  | ||||||
| class ProgramChooser: |  | ||||||
|     def __init__(self, programs: list, next_btn: int, ok_btn: int, debug=False, run_directly=False): |  | ||||||
|         self.next_btn = Pin(next_btn, Pin.IN, Pin.PULL_DOWN) |  | ||||||
|         self.ok_btn = Pin(ok_btn, Pin.IN, Pin.PULL_DOWN) |  | ||||||
|         self._i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000) |  | ||||||
|         self.lcd = I2C_LCD(self._i2c, 0x27, 2, 16) |  | ||||||
|         self.lcd.custom_char(0, bytearray([0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x00]))  # three dots in one, chr(0) |  | ||||||
|         |  | ||||||
|         self.lcd.move_to(0,0) |  | ||||||
|         self.lcd.putstr("[ProgramChooser]<              >") |  | ||||||
|          |  | ||||||
|         self.current_selection = None  # no selection |  | ||||||
|         self.programs = programs  # a dictionary of programs and it's callbacks e.g. {"lora_test": some_callback} |  | ||||||
|          |  | ||||||
|         self.show_selection() |  | ||||||
|          |  | ||||||
|         if run_directly: self.run() |  | ||||||
|          |  | ||||||
|     def log(self, msg, is_debug=False): |  | ||||||
|         print(f"[ProgramChooser] {msg}") |  | ||||||
|      |  | ||||||
|      |  | ||||||
|     def show_selection(self): |  | ||||||
|         self.lcd.move_to(1,1) |  | ||||||
|          |  | ||||||
|         if len(self.programs) == 0: |  | ||||||
|             self.lcd.putstr(" No programs!") |  | ||||||
|             return True |  | ||||||
|         if self.current_selection == None:  # set it initially |  | ||||||
|             self.current_selection = 0 |  | ||||||
|          |  | ||||||
|         # the actual displaying process |  | ||||||
|         to_show = list(self.programs.keys())[self.current_selection] |  | ||||||
|         if len(to_show) > 14: |  | ||||||
|             to_show = to_show[:13] + chr(0) |  | ||||||
|         else: |  | ||||||
|             to_show = to_show[:14] |  | ||||||
|         to_show = to_show.center(14) |  | ||||||
|         self.lcd.putstr(to_show) |  | ||||||
|         return True |  | ||||||
|      |  | ||||||
|      |  | ||||||
|     def run(self): |  | ||||||
|         while True: |  | ||||||
|             if self.next_btn.value() == 1: |  | ||||||
|                 former_program_name = list(self.programs.keys())[self.current_selection] |  | ||||||
|                 self.current_selection = (self.current_selection+1)%len(list(self.programs.keys())) |  | ||||||
|                 self.show_selection() |  | ||||||
|                 now_program_name = list(self.programs.keys())[self.current_selection] |  | ||||||
|                 self.log(f"Selected next program (\"{former_program_name}\" -> \"{now_program_name}\")") |  | ||||||
|                 while self.next_btn.value() == 1: time.sleep(0.01)  # wait till release |  | ||||||
|             if self.ok_btn.value() == 1: |  | ||||||
|                 program_name = list(self.programs.keys())[self.current_selection] |  | ||||||
|                 self.log(f"Running selected program! (\"{program_name}\")") |  | ||||||
|                 # shorten the name for displaying (if too long) |  | ||||||
|                 if len(program_name) > 14: |  | ||||||
|                     program_name = program_name[:13] + chr(0) |  | ||||||
|                 else: |  | ||||||
|                     program_name = program_name[:14] |  | ||||||
|                 program_name = program_name.center(14) |  | ||||||
|                 self.lcd.move_to(0,0) |  | ||||||
|                 self.lcd.putstr(f" {program_name}   Executing...  ") |  | ||||||
|                 self.execute_selection() |  | ||||||
|                 while self.ok_btn.value() == 1: time.sleep(0.01)  # wait till release (e.g. if the "program" is a simple send action) |  | ||||||
|                 self.lcd.putstr(f" {program_name}    Closing...   ") |  | ||||||
|                 time.sleep(1) |  | ||||||
|                 self.lcd.move_to(0,0) |  | ||||||
|                 self.lcd.putstr("[ProgramChooser]<              >") |  | ||||||
|                 self.show_selection() |  | ||||||
|                  |  | ||||||
|             time.sleep(0.01) |  | ||||||
|      |  | ||||||
|      |  | ||||||
|     def execute_selection(self):  # execute the current selected program's callback |  | ||||||
|         self.programs[list(self.programs.keys())[self.current_selection]]() |  | ||||||
		Reference in New Issue
	
	Block a user