下記の仕組みがよくわかりません。
for i in range(LCD_WIDTH):
lcd_byte(ord(message[i]),LCD_CHR)
・LCD_WIDTHは16。
・0.1.2......15までrange関数でiに順に代入される
・message[1],message[2]...のようなイメージ
・messageはmain関数のwhile Trueループの"文字列text"が代入される。
・ord関数で文字列がユニコードに変換される。
上記までは理解しております。
この場合、messageの文字列(例えばCreated by)は一文字ずつ分解され、
一文字ずつがユニコードに変換されるという理解で間違いないでしょうか?
その場合、なぜそのような挙動になるのでしょうか?
[]これは通常リストや配列などで使用されるイメージです。
iが添え字として認識され、messageの文字列が一文字ずつに分解されるようなイメージでしょうか。(例えば、C,r,e,a,t,e,d,b,yと分解され、一文字ずつがユニコードに変換される)
ご教示よろしくお願いします。
下記が動作確認中のコードとなります。
python
1import smbus 2import time 3 4# Define some device parameters 5I2C_ADDR = 0x27 # I2C device address, if any error, change this address to 0x3f アドレス指定 6LCD_WIDTH = 16 # Maximum characters per line 7 8# Define some device constants 9LCD_CHR = 1 # Mode - Sending data 10LCD_CMD = 0 # Mode - Sending command 11 12LCD_LINE_1 = 0x80 # LCD RAM address for the 1st line 13LCD_LINE_2 = 0xC0 # LCD RAM address for the 2nd line 14LCD_LINE_3 = 0x94 # LCD RAM address for the 3rd line 15LCD_LINE_4 = 0xD4 # LCD RAM address for the 4th line 16 17LCD_BACKLIGHT = 0x08 # On 18#LCD_BACKLIGHT = 0x00 # Off 19 20ENABLE = 0b00000100 # Enable bit 21 22# Timing constants 23E_PULSE = 0.0005 24E_DELAY = 0.0005 25 26#Open I2C interface 27#bus = smbus.SMBus(0) # Rev 1 Pi uses 0 28bus = smbus.SMBus(1) # Rev 2 Pi uses 1 29 30def lcd_init(): 31 # Initialise display 32 lcd_byte(0x33,LCD_CMD) # 110011 Initialise 33 lcd_byte(0x32,LCD_CMD) # 110010 Initialise 34 lcd_byte(0x06,LCD_CMD) # 000110 Cursor move direction 35 lcd_byte(0x0C,LCD_CMD) # 001100 Display On,Cursor Off, Blink Off 36 lcd_byte(0x28,LCD_CMD) # 101000 Data length, number of lines, font size 37 lcd_byte(0x01,LCD_CMD) # 000001 Clear display 38 time.sleep(E_DELAY) 39 40def lcd_byte(bits, mode): 41 # Send byte to data pins 42 # bits = the data 43 # mode = 1 for data 44 # 0 for command 45 46 bits_high = mode | (bits & 0xF0) | LCD_BACKLIGHT 47 bits_low = mode | ((bits<<4) & 0xF0) | LCD_BACKLIGHT 48 49 # High bits 50 bus.write_byte(I2C_ADDR, bits_high) 51 lcd_toggle_enable(bits_high) 52 53 # Low bits 54 bus.write_byte(I2C_ADDR, bits_low) 55 lcd_toggle_enable(bits_low) 56 57def lcd_toggle_enable(bits): 58 # Toggle enable 59 time.sleep(E_DELAY) 60 bus.write_byte(I2C_ADDR, (bits | ENABLE)) 61 time.sleep(E_PULSE) 62 bus.write_byte(I2C_ADDR,(bits & ~ENABLE)) 63 time.sleep(E_DELAY) 64 65def lcd_string(message,line): 66 # Send string to display 67 68 message = message.ljust(LCD_WIDTH," ") 69 70 lcd_byte(line, LCD_CMD) 71 72 for i in range(LCD_WIDTH): 73 lcd_byte(ord(message[i]),LCD_CHR) 74 75 76def main(): 77 # Main program block 78 79 # Initialise display 80 lcd_init() 81 82 while True: 83 # Send some test 84 lcd_string("Created by <",LCD_LINE_1) 85 lcd_string("Osoyoo.com <",LCD_LINE_2) 86 87 time.sleep(3) 88 89 # Send some more text 90 lcd_string("> Tutorial Url:",LCD_LINE_1) 91 lcd_string("> http://osoyoo.com",LCD_LINE_2) 92 93 time.sleep(3) 94 95if __name__ == '__main__': 96 97 try: 98 main() 99 except KeyboardInterrupt: 100 pass 101 finally: 102 lcd_byte(0x01, LCD_CMD) 103
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/24 23:10