refactor code to other files. also attempt to fix leds crashing my power
This commit is contained in:
		
							parent
							
								
									b0c2636569
								
							
						
					
					
						commit
						5e61f83994
					
				
					 3 changed files with 270 additions and 236 deletions
				
			
		
							
								
								
									
										234
									
								
								lcd_manager.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										234
									
								
								lcd_manager.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,234 @@ | ||||||
|  | from time import sleep | ||||||
|  | 
 | ||||||
|  | class Adafruit_CharLCD: | ||||||
|  |    | ||||||
|  |     # commands | ||||||
|  |     LCD_CLEARDISPLAY = 0x01 | ||||||
|  |     LCD_RETURNHOME = 0x02 | ||||||
|  |     LCD_ENTRYMODESET = 0x04 | ||||||
|  |     LCD_DISPLAYCONTROL = 0x08 | ||||||
|  |     LCD_CURSORSHIFT = 0x10 | ||||||
|  |     LCD_FUNCTIONSET = 0x20 | ||||||
|  |     LCD_SETCGRAMADDR = 0x40 | ||||||
|  |     LCD_SETDDRAMADDR = 0x80 | ||||||
|  | 
 | ||||||
|  |     # flags for display entry mode | ||||||
|  |     LCD_ENTRYRIGHT = 0x00 | ||||||
|  |     LCD_ENTRYLEFT = 0x02 | ||||||
|  |     LCD_ENTRYSHIFTINCREMENT = 0x01 | ||||||
|  |     LCD_ENTRYSHIFTDECREMENT = 0x00 | ||||||
|  | 
 | ||||||
|  |     # flags for display on/off control | ||||||
|  |     LCD_DISPLAYON = 0x04 | ||||||
|  |     LCD_DISPLAYOFF = 0x00 | ||||||
|  |     LCD_CURSORON = 0x02 | ||||||
|  |     LCD_CURSOROFF = 0x00 | ||||||
|  |     LCD_BLINKON = 0x01 | ||||||
|  |     LCD_BLINKOFF = 0x00 | ||||||
|  | 
 | ||||||
|  |     # flags for display/cursor shift | ||||||
|  |     LCD_DISPLAYMOVE = 0x08 | ||||||
|  |     LCD_CURSORMOVE = 0x00 | ||||||
|  | 
 | ||||||
|  |     # flags for display/cursor shift | ||||||
|  |     LCD_DISPLAYMOVE = 0x08 | ||||||
|  |     LCD_CURSORMOVE = 0x00 | ||||||
|  |     LCD_MOVERIGHT = 0x04 | ||||||
|  |     LCD_MOVELEFT = 0x00 | ||||||
|  | 
 | ||||||
|  |     # flags for function set | ||||||
|  |     LCD_8BITMODE = 0x10 | ||||||
|  |     LCD_4BITMODE = 0x00 | ||||||
|  |     LCD_2LINE = 0x08 | ||||||
|  |     LCD_1LINE = 0x00 | ||||||
|  |     LCD_5x10DOTS = 0x04 | ||||||
|  |     LCD_5x8DOTS = 0x00 | ||||||
|  | 
 | ||||||
|  |     def __init__(self, pin_rs=24, pin_e=23, pin_b=4, pins_db=[17, 25, 27, 22], GPIO=None): | ||||||
|  |         # Emulate the old behavior of using RPi.GPIO if we haven't been given | ||||||
|  |         # an explicit GPIO interface to use | ||||||
|  |         if not GPIO: | ||||||
|  |             import RPi.GPIO as GPIO | ||||||
|  |         self.GPIO = GPIO | ||||||
|  |         self.pin_rs = pin_rs | ||||||
|  |         self.pin_e = pin_e | ||||||
|  |         self.pin_b = pin_b | ||||||
|  |         self.pins_db = pins_db | ||||||
|  | 
 | ||||||
|  |         self.GPIO.setwarnings(False) | ||||||
|  |         self.GPIO.setmode(GPIO.BCM) | ||||||
|  |         self.GPIO.setup(self.pin_e, GPIO.OUT) | ||||||
|  |         self.GPIO.setup(self.pin_rs, GPIO.OUT) | ||||||
|  |         self.GPIO.setup(self.pin_b, GPIO.OUT) | ||||||
|  | 
 | ||||||
|  |         for pin in self.pins_db: | ||||||
|  |             self.GPIO.setup(pin, GPIO.OUT) | ||||||
|  | 
 | ||||||
|  |         self.GPIO.output(self.pin_b, True) | ||||||
|  | 
 | ||||||
|  |         self.write4bits(0x33)  # initialization | ||||||
|  |         self.write4bits(0x32)  # initialization | ||||||
|  |         self.write4bits(0x28)  # 2 line 5x7 matrix | ||||||
|  |         self.write4bits(0x0C)  # turn cursor off 0x0E to enable cursor | ||||||
|  |         self.write4bits(0x06)  # shift cursor right | ||||||
|  | 
 | ||||||
|  |         self.displaycontrol = self.LCD_DISPLAYON | self.LCD_CURSOROFF | self.LCD_BLINKOFF | ||||||
|  | 
 | ||||||
|  |         self.displayfunction = self.LCD_4BITMODE | self.LCD_1LINE | self.LCD_5x8DOTS | ||||||
|  |         self.displayfunction |= self.LCD_2LINE | ||||||
|  | 
 | ||||||
|  |         """ Initialize to default text direction (for romance languages) """ | ||||||
|  |         self.displaymode = self.LCD_ENTRYLEFT | self.LCD_ENTRYSHIFTDECREMENT | ||||||
|  |         self.write4bits(self.LCD_ENTRYMODESET | | ||||||
|  |                         self.displaymode)  # set the entry mode | ||||||
|  | 
 | ||||||
|  |         self.clear() | ||||||
|  | 
 | ||||||
|  |     def begin(self, cols, lines): | ||||||
|  | 
 | ||||||
|  |         if (lines > 1): | ||||||
|  |             self.numlines = lines | ||||||
|  |             self.displayfunction |= self.LCD_2LINE | ||||||
|  |             self.currline = 0 | ||||||
|  | 
 | ||||||
|  |     def home(self): | ||||||
|  | 
 | ||||||
|  |         self.write4bits(self.LCD_RETURNHOME)  # set cursor position to zero | ||||||
|  |         self.delayMicroseconds(3000)  # this command takes a long time! | ||||||
|  | 
 | ||||||
|  |     def clear(self): | ||||||
|  | 
 | ||||||
|  |         self.write4bits(self.LCD_CLEARDISPLAY)  # command to clear display | ||||||
|  |         # 3000 microsecond sleep, clearing the display takes a long time | ||||||
|  |         self.delayMicroseconds(3000) | ||||||
|  | 
 | ||||||
|  |     def setCursor(self, col, row): | ||||||
|  | 
 | ||||||
|  |         self.row_offsets = [0x00, 0x40, 0x14, 0x54] | ||||||
|  | 
 | ||||||
|  |         if (row > self.numlines): | ||||||
|  |             row = self.numlines - 1  # we count rows starting w/0 | ||||||
|  | 
 | ||||||
|  |         self.write4bits(self.LCD_SETDDRAMADDR | (col + self.row_offsets[row])) | ||||||
|  | 
 | ||||||
|  |     def noDisplay(self): | ||||||
|  |         """ Turn the display off (quickly) """ | ||||||
|  |         self.GPIO.output(self.pin_b, False) | ||||||
|  |         self.displaycontrol &= ~self.LCD_DISPLAYON | ||||||
|  |         self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol) | ||||||
|  | 
 | ||||||
|  |     def display(self): | ||||||
|  |         """ Turn the display on (quickly) """ | ||||||
|  |         self.GPIO.output(self.pin_b, True) | ||||||
|  |         self.displaycontrol |= self.LCD_DISPLAYON | ||||||
|  |         self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol) | ||||||
|  | 
 | ||||||
|  |     def noCursor(self): | ||||||
|  |         """ Turns the underline cursor on/off """ | ||||||
|  | 
 | ||||||
|  |         self.displaycontrol &= ~self.LCD_CURSORON | ||||||
|  |         self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol) | ||||||
|  | 
 | ||||||
|  |     def cursor(self): | ||||||
|  |         """ Cursor On """ | ||||||
|  | 
 | ||||||
|  |         self.displaycontrol |= self.LCD_CURSORON | ||||||
|  |         self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol) | ||||||
|  | 
 | ||||||
|  |     def noBlink(self): | ||||||
|  |         """ Turn on and off the blinking cursor """ | ||||||
|  | 
 | ||||||
|  |         self.displaycontrol &= ~self.LCD_BLINKON | ||||||
|  |         self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol) | ||||||
|  | 
 | ||||||
|  |     def noBlink(self): | ||||||
|  |         """ Turn on and off the blinking cursor """ | ||||||
|  | 
 | ||||||
|  |         self.displaycontrol &= ~self.LCD_BLINKON | ||||||
|  |         self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol) | ||||||
|  | 
 | ||||||
|  |     def DisplayLeft(self): | ||||||
|  |         """ These commands scroll the display without changing the RAM """ | ||||||
|  | 
 | ||||||
|  |         self.write4bits(self.LCD_CURSORSHIFT | | ||||||
|  |                         self.LCD_DISPLAYMOVE | self.LCD_MOVELEFT) | ||||||
|  | 
 | ||||||
|  |     def scrollDisplayRight(self): | ||||||
|  |         """ These commands scroll the display without changing the RAM """ | ||||||
|  | 
 | ||||||
|  |         self.write4bits(self.LCD_CURSORSHIFT | | ||||||
|  |                         self.LCD_DISPLAYMOVE | self.LCD_MOVERIGHT) | ||||||
|  | 
 | ||||||
|  |     def leftToRight(self): | ||||||
|  |         """ This is for text that flows Left to Right """ | ||||||
|  | 
 | ||||||
|  |         self.displaymode |= self.LCD_ENTRYLEFT | ||||||
|  |         self.write4bits(self.LCD_ENTRYMODESET | self.displaymode) | ||||||
|  | 
 | ||||||
|  |     def rightToLeft(self): | ||||||
|  |         """ This is for text that flows Right to Left """ | ||||||
|  |         self.displaymode &= ~self.LCD_ENTRYLEFT | ||||||
|  |         self.write4bits(self.LCD_ENTRYMODESET | self.displaymode) | ||||||
|  | 
 | ||||||
|  |     def autoscroll(self): | ||||||
|  |         """ This will 'right justify' text from the cursor """ | ||||||
|  | 
 | ||||||
|  |         self.displaymode |= self.LCD_ENTRYSHIFTINCREMENT | ||||||
|  |         self.write4bits(self.LCD_ENTRYMODESET | self.displaymode) | ||||||
|  | 
 | ||||||
|  |     def noAutoscroll(self): | ||||||
|  |         """ This will 'left justify' text from the cursor """ | ||||||
|  | 
 | ||||||
|  |         self.displaymode &= ~self.LCD_ENTRYSHIFTINCREMENT | ||||||
|  |         self.write4bits(self.LCD_ENTRYMODESET | self.displaymode) | ||||||
|  | 
 | ||||||
|  |     def write4bits(self, bits, char_mode=False): | ||||||
|  |         """ Send command to LCD """ | ||||||
|  | 
 | ||||||
|  |         self.delayMicroseconds(1000)  # 1000 microsecond sleep | ||||||
|  | 
 | ||||||
|  |         bits = bin(bits)[2:].zfill(8) | ||||||
|  | 
 | ||||||
|  |         self.GPIO.output(self.pin_rs, char_mode) | ||||||
|  | 
 | ||||||
|  |         for pin in self.pins_db: | ||||||
|  |             self.GPIO.output(pin, False) | ||||||
|  | 
 | ||||||
|  |         for i in range(4): | ||||||
|  |             if bits[i] == "1": | ||||||
|  |                 self.GPIO.output(self.pins_db[::-1][i], True) | ||||||
|  | 
 | ||||||
|  |         self.pulseEnable() | ||||||
|  | 
 | ||||||
|  |         for pin in self.pins_db: | ||||||
|  |             self.GPIO.output(pin, False) | ||||||
|  | 
 | ||||||
|  |         for i in range(4, 8): | ||||||
|  |             if bits[i] == "1": | ||||||
|  |                 self.GPIO.output(self.pins_db[::-1][i-4], True) | ||||||
|  | 
 | ||||||
|  |         self.pulseEnable() | ||||||
|  | 
 | ||||||
|  |     def delayMicroseconds(self, microseconds): | ||||||
|  |         # divide microseconds by 1 million for seconds | ||||||
|  |         seconds = microseconds / float(1000000) | ||||||
|  |         sleep(seconds) | ||||||
|  | 
 | ||||||
|  |     def pulseEnable(self): | ||||||
|  |         self.GPIO.output(self.pin_e, False) | ||||||
|  |         # 1 microsecond pause - enable pulse must be > 450ns | ||||||
|  |         self.delayMicroseconds(1) | ||||||
|  |         self.GPIO.output(self.pin_e, True) | ||||||
|  |         # 1 microsecond pause - enable pulse must be > 450ns | ||||||
|  |         self.delayMicroseconds(1) | ||||||
|  |         self.GPIO.output(self.pin_e, False) | ||||||
|  |         self.delayMicroseconds(1)   # commands need > 37us to settle | ||||||
|  | 
 | ||||||
|  |     def message(self, text): | ||||||
|  |         """ Send string to LCD. Newline wraps to second line""" | ||||||
|  | 
 | ||||||
|  |         for char in text: | ||||||
|  |             if char == '\n': | ||||||
|  |                 self.write4bits(0xC0)  # next line | ||||||
|  |             else: | ||||||
|  |                 self.write4bits(ord(char), True) | ||||||
							
								
								
									
										241
									
								
								leds.py
									
										
									
									
									
								
							
							
						
						
									
										241
									
								
								leds.py
									
										
									
									
									
								
							|  | @ -7,243 +7,10 @@ | ||||||
| # | # | ||||||
| 
 | 
 | ||||||
| from time import sleep | from time import sleep | ||||||
| import neopixel | import lcd_manager | ||||||
| import board | import light_manager | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Adafruit_CharLCD: |  | ||||||
| 
 |  | ||||||
|     # commands |  | ||||||
|     LCD_CLEARDISPLAY = 0x01 |  | ||||||
|     LCD_RETURNHOME = 0x02 |  | ||||||
|     LCD_ENTRYMODESET = 0x04 |  | ||||||
|     LCD_DISPLAYCONTROL = 0x08 |  | ||||||
|     LCD_CURSORSHIFT = 0x10 |  | ||||||
|     LCD_FUNCTIONSET = 0x20 |  | ||||||
|     LCD_SETCGRAMADDR = 0x40 |  | ||||||
|     LCD_SETDDRAMADDR = 0x80 |  | ||||||
| 
 |  | ||||||
|     # flags for display entry mode |  | ||||||
|     LCD_ENTRYRIGHT = 0x00 |  | ||||||
|     LCD_ENTRYLEFT = 0x02 |  | ||||||
|     LCD_ENTRYSHIFTINCREMENT = 0x01 |  | ||||||
|     LCD_ENTRYSHIFTDECREMENT = 0x00 |  | ||||||
| 
 |  | ||||||
|     # flags for display on/off control |  | ||||||
|     LCD_DISPLAYON = 0x04 |  | ||||||
|     LCD_DISPLAYOFF = 0x00 |  | ||||||
|     LCD_CURSORON = 0x02 |  | ||||||
|     LCD_CURSOROFF = 0x00 |  | ||||||
|     LCD_BLINKON = 0x01 |  | ||||||
|     LCD_BLINKOFF = 0x00 |  | ||||||
| 
 |  | ||||||
|     # flags for display/cursor shift |  | ||||||
|     LCD_DISPLAYMOVE = 0x08 |  | ||||||
|     LCD_CURSORMOVE = 0x00 |  | ||||||
| 
 |  | ||||||
|     # flags for display/cursor shift |  | ||||||
|     LCD_DISPLAYMOVE = 0x08 |  | ||||||
|     LCD_CURSORMOVE = 0x00 |  | ||||||
|     LCD_MOVERIGHT = 0x04 |  | ||||||
|     LCD_MOVELEFT = 0x00 |  | ||||||
| 
 |  | ||||||
|     # flags for function set |  | ||||||
|     LCD_8BITMODE = 0x10 |  | ||||||
|     LCD_4BITMODE = 0x00 |  | ||||||
|     LCD_2LINE = 0x08 |  | ||||||
|     LCD_1LINE = 0x00 |  | ||||||
|     LCD_5x10DOTS = 0x04 |  | ||||||
|     LCD_5x8DOTS = 0x00 |  | ||||||
| 
 |  | ||||||
|     def __init__(self, pin_rs=24, pin_e=23, pin_b=4, pins_db=[17, 25, 27, 22], GPIO=None): |  | ||||||
|         # Emulate the old behavior of using RPi.GPIO if we haven't been given |  | ||||||
|         # an explicit GPIO interface to use |  | ||||||
|         if not GPIO: |  | ||||||
|             import RPi.GPIO as GPIO |  | ||||||
|         self.GPIO = GPIO |  | ||||||
|         self.pin_rs = pin_rs |  | ||||||
|         self.pin_e = pin_e |  | ||||||
|         self.pin_b = pin_b |  | ||||||
|         self.pins_db = pins_db |  | ||||||
| 
 |  | ||||||
|         self.GPIO.setwarnings(False) |  | ||||||
|         self.GPIO.setmode(GPIO.BCM) |  | ||||||
|         self.GPIO.setup(self.pin_e, GPIO.OUT) |  | ||||||
|         self.GPIO.setup(self.pin_rs, GPIO.OUT) |  | ||||||
|         self.GPIO.setup(self.pin_b, GPIO.OUT) |  | ||||||
| 
 |  | ||||||
|         for pin in self.pins_db: |  | ||||||
|             self.GPIO.setup(pin, GPIO.OUT) |  | ||||||
| 
 |  | ||||||
|         self.GPIO.output(self.pin_b, True) |  | ||||||
| 
 |  | ||||||
|         self.write4bits(0x33)  # initialization |  | ||||||
|         self.write4bits(0x32)  # initialization |  | ||||||
|         self.write4bits(0x28)  # 2 line 5x7 matrix |  | ||||||
|         self.write4bits(0x0C)  # turn cursor off 0x0E to enable cursor |  | ||||||
|         self.write4bits(0x06)  # shift cursor right |  | ||||||
| 
 |  | ||||||
|         self.displaycontrol = self.LCD_DISPLAYON | self.LCD_CURSOROFF | self.LCD_BLINKOFF |  | ||||||
| 
 |  | ||||||
|         self.displayfunction = self.LCD_4BITMODE | self.LCD_1LINE | self.LCD_5x8DOTS |  | ||||||
|         self.displayfunction |= self.LCD_2LINE |  | ||||||
| 
 |  | ||||||
|         """ Initialize to default text direction (for romance languages) """ |  | ||||||
|         self.displaymode = self.LCD_ENTRYLEFT | self.LCD_ENTRYSHIFTDECREMENT |  | ||||||
|         self.write4bits(self.LCD_ENTRYMODESET | |  | ||||||
|                         self.displaymode)  # set the entry mode |  | ||||||
| 
 |  | ||||||
|         self.clear() |  | ||||||
| 
 |  | ||||||
|     def begin(self, cols, lines): |  | ||||||
| 
 |  | ||||||
|         if (lines > 1): |  | ||||||
|             self.numlines = lines |  | ||||||
|             self.displayfunction |= self.LCD_2LINE |  | ||||||
|             self.currline = 0 |  | ||||||
| 
 |  | ||||||
|     def home(self): |  | ||||||
| 
 |  | ||||||
|         self.write4bits(self.LCD_RETURNHOME)  # set cursor position to zero |  | ||||||
|         self.delayMicroseconds(3000)  # this command takes a long time! |  | ||||||
| 
 |  | ||||||
|     def clear(self): |  | ||||||
| 
 |  | ||||||
|         self.write4bits(self.LCD_CLEARDISPLAY)  # command to clear display |  | ||||||
|         # 3000 microsecond sleep, clearing the display takes a long time |  | ||||||
|         self.delayMicroseconds(3000) |  | ||||||
| 
 |  | ||||||
|     def setCursor(self, col, row): |  | ||||||
| 
 |  | ||||||
|         self.row_offsets = [0x00, 0x40, 0x14, 0x54] |  | ||||||
| 
 |  | ||||||
|         if (row > self.numlines): |  | ||||||
|             row = self.numlines - 1  # we count rows starting w/0 |  | ||||||
| 
 |  | ||||||
|         self.write4bits(self.LCD_SETDDRAMADDR | (col + self.row_offsets[row])) |  | ||||||
| 
 |  | ||||||
|     def noDisplay(self): |  | ||||||
|         """ Turn the display off (quickly) """ |  | ||||||
|         self.GPIO.output(self.pin_b, False) |  | ||||||
|         self.displaycontrol &= ~self.LCD_DISPLAYON |  | ||||||
|         self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol) |  | ||||||
| 
 |  | ||||||
|     def display(self): |  | ||||||
|         """ Turn the display on (quickly) """ |  | ||||||
|         self.GPIO.output(self.pin_b, True) |  | ||||||
|         self.displaycontrol |= self.LCD_DISPLAYON |  | ||||||
|         self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol) |  | ||||||
| 
 |  | ||||||
|     def noCursor(self): |  | ||||||
|         """ Turns the underline cursor on/off """ |  | ||||||
| 
 |  | ||||||
|         self.displaycontrol &= ~self.LCD_CURSORON |  | ||||||
|         self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol) |  | ||||||
| 
 |  | ||||||
|     def cursor(self): |  | ||||||
|         """ Cursor On """ |  | ||||||
| 
 |  | ||||||
|         self.displaycontrol |= self.LCD_CURSORON |  | ||||||
|         self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol) |  | ||||||
| 
 |  | ||||||
|     def noBlink(self): |  | ||||||
|         """ Turn on and off the blinking cursor """ |  | ||||||
| 
 |  | ||||||
|         self.displaycontrol &= ~self.LCD_BLINKON |  | ||||||
|         self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol) |  | ||||||
| 
 |  | ||||||
|     def noBlink(self): |  | ||||||
|         """ Turn on and off the blinking cursor """ |  | ||||||
| 
 |  | ||||||
|         self.displaycontrol &= ~self.LCD_BLINKON |  | ||||||
|         self.write4bits(self.LCD_DISPLAYCONTROL | self.displaycontrol) |  | ||||||
| 
 |  | ||||||
|     def DisplayLeft(self): |  | ||||||
|         """ These commands scroll the display without changing the RAM """ |  | ||||||
| 
 |  | ||||||
|         self.write4bits(self.LCD_CURSORSHIFT | |  | ||||||
|                         self.LCD_DISPLAYMOVE | self.LCD_MOVELEFT) |  | ||||||
| 
 |  | ||||||
|     def scrollDisplayRight(self): |  | ||||||
|         """ These commands scroll the display without changing the RAM """ |  | ||||||
| 
 |  | ||||||
|         self.write4bits(self.LCD_CURSORSHIFT | |  | ||||||
|                         self.LCD_DISPLAYMOVE | self.LCD_MOVERIGHT) |  | ||||||
| 
 |  | ||||||
|     def leftToRight(self): |  | ||||||
|         """ This is for text that flows Left to Right """ |  | ||||||
| 
 |  | ||||||
|         self.displaymode |= self.LCD_ENTRYLEFT |  | ||||||
|         self.write4bits(self.LCD_ENTRYMODESET | self.displaymode) |  | ||||||
| 
 |  | ||||||
|     def rightToLeft(self): |  | ||||||
|         """ This is for text that flows Right to Left """ |  | ||||||
|         self.displaymode &= ~self.LCD_ENTRYLEFT |  | ||||||
|         self.write4bits(self.LCD_ENTRYMODESET | self.displaymode) |  | ||||||
| 
 |  | ||||||
|     def autoscroll(self): |  | ||||||
|         """ This will 'right justify' text from the cursor """ |  | ||||||
| 
 |  | ||||||
|         self.displaymode |= self.LCD_ENTRYSHIFTINCREMENT |  | ||||||
|         self.write4bits(self.LCD_ENTRYMODESET | self.displaymode) |  | ||||||
| 
 |  | ||||||
|     def noAutoscroll(self): |  | ||||||
|         """ This will 'left justify' text from the cursor """ |  | ||||||
| 
 |  | ||||||
|         self.displaymode &= ~self.LCD_ENTRYSHIFTINCREMENT |  | ||||||
|         self.write4bits(self.LCD_ENTRYMODESET | self.displaymode) |  | ||||||
| 
 |  | ||||||
|     def write4bits(self, bits, char_mode=False): |  | ||||||
|         """ Send command to LCD """ |  | ||||||
| 
 |  | ||||||
|         self.delayMicroseconds(1000)  # 1000 microsecond sleep |  | ||||||
| 
 |  | ||||||
|         bits = bin(bits)[2:].zfill(8) |  | ||||||
| 
 |  | ||||||
|         self.GPIO.output(self.pin_rs, char_mode) |  | ||||||
| 
 |  | ||||||
|         for pin in self.pins_db: |  | ||||||
|             self.GPIO.output(pin, False) |  | ||||||
| 
 |  | ||||||
|         for i in range(4): |  | ||||||
|             if bits[i] == "1": |  | ||||||
|                 self.GPIO.output(self.pins_db[::-1][i], True) |  | ||||||
| 
 |  | ||||||
|         self.pulseEnable() |  | ||||||
| 
 |  | ||||||
|         for pin in self.pins_db: |  | ||||||
|             self.GPIO.output(pin, False) |  | ||||||
| 
 |  | ||||||
|         for i in range(4, 8): |  | ||||||
|             if bits[i] == "1": |  | ||||||
|                 self.GPIO.output(self.pins_db[::-1][i-4], True) |  | ||||||
| 
 |  | ||||||
|         self.pulseEnable() |  | ||||||
| 
 |  | ||||||
|     def delayMicroseconds(self, microseconds): |  | ||||||
|         # divide microseconds by 1 million for seconds |  | ||||||
|         seconds = microseconds / float(1000000) |  | ||||||
|         sleep(seconds) |  | ||||||
| 
 |  | ||||||
|     def pulseEnable(self): |  | ||||||
|         self.GPIO.output(self.pin_e, False) |  | ||||||
|         # 1 microsecond pause - enable pulse must be > 450ns |  | ||||||
|         self.delayMicroseconds(1) |  | ||||||
|         self.GPIO.output(self.pin_e, True) |  | ||||||
|         # 1 microsecond pause - enable pulse must be > 450ns |  | ||||||
|         self.delayMicroseconds(1) |  | ||||||
|         self.GPIO.output(self.pin_e, False) |  | ||||||
|         self.delayMicroseconds(1)   # commands need > 37us to settle |  | ||||||
| 
 |  | ||||||
|     def message(self, text): |  | ||||||
|         """ Send string to LCD. Newline wraps to second line""" |  | ||||||
| 
 |  | ||||||
|         for char in text: |  | ||||||
|             if char == '\n': |  | ||||||
|                 self.write4bits(0xC0)  # next line |  | ||||||
|             else: |  | ||||||
|                 self.write4bits(ord(char), True) |  | ||||||
| 
 |  | ||||||
| debug_statements = True | debug_statements = True | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -270,7 +37,8 @@ def color(lcd): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def loop(): | def loop(): | ||||||
|     lcd = Adafruit_CharLCD() |     lcd = lcd_manager.Adafruit_CharLCD() | ||||||
|  |     lights = light_manager.LightStrip() | ||||||
|     level = 0 |     level = 0 | ||||||
|     level_max = 14 |     level_max = 14 | ||||||
|     idle = 0 |     idle = 0 | ||||||
|  | @ -281,6 +49,7 @@ def loop(): | ||||||
|         query_level = querylightlevel() |         query_level = querylightlevel() | ||||||
|         idle = idle + 1 |         idle = idle + 1 | ||||||
|         debug("idle value: {}".format(idle)) |         debug("idle value: {}".format(idle)) | ||||||
|  |         lights.tick() | ||||||
|         if query_level != level: |         if query_level != level: | ||||||
|             level = query_level |             level = query_level | ||||||
|             lights.set_light_level(level / level_max) |             lights.set_light_level(level / level_max) | ||||||
|  |  | ||||||
|  | @ -0,0 +1,31 @@ | ||||||
|  | from time import sleep | ||||||
|  | import neopixel | ||||||
|  | import board | ||||||
|  | 
 | ||||||
|  | def defaultPattern(n, t): | ||||||
|  |     return (255, 0, 200) | ||||||
|  | 
 | ||||||
|  | class LightStrip: | ||||||
|  |   def __init__(self, data_pin = board.D18, string_length = 300, brightness = 1, pixel_order = neopixel.GRB): | ||||||
|  |         self.data_pin = data_pin | ||||||
|  | 
 | ||||||
|  |         self.np = neopixel.NeoPixel(self.data_pin, string_length, brightness = brightness, auto_write=True, pixel_order = pixel_order) | ||||||
|  |         self.pattern = defaultPattern | ||||||
|  |         self.cur_tick = 0 | ||||||
|  | 
 | ||||||
|  |   def set_light_level(self, level): | ||||||
|  |     self.np.brightness = level | ||||||
|  |   def pattern(self, pattern_callback): | ||||||
|  |     self.pattern = pattern_callback | ||||||
|  |    | ||||||
|  |   def tick(self): | ||||||
|  |     np = self.np | ||||||
|  |     t = self.cur_tick | ||||||
|  |     n = np.n | ||||||
|  |     for i in range(n): | ||||||
|  |       col = self.pattern(i, t) | ||||||
|  |       if np[i] != col: | ||||||
|  |         #np[i] = col | ||||||
|  |         print("CHANGE COLOR OF PIXEL {} ON TICK {}".format(col, t)) | ||||||
|  |         break; | ||||||
|  |     self.cur_tick = t + 1 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue