import utime
import machine
from machine import I2C
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd
from Keypad import TvalueOf
I2C_ADDR = 0x27
I2C_NUM_ROWS = 2
I2C_NUM_COLS = 16
last_two_numbers = []
last_two_actions = []
shrek_intro = ["Había una vez una", "encantadora princesa",
"pero estaba", "condenada por un terrible",
"hechizo que solo podía", "romperse con el",
"primer beso del", "verdadero amor",
"la habían encerrado", "en un castillo que",
"vigilaba un horrible", "dragón que escupía",
"fuego",
"muchos valientes", "caballeros habían",
"intentado liberarla de", "esa sombría",
"prisión pero ninguno", "lo había logrado",
"y custodiada por el", "dragón esperaba en",
"el último cuarto de", "la torre más alta a",
"su primer amor el", "primer beso de su",
"verdadero amor así como", "si estas cosas",
"pasaran"]
def test_main():
global last_two_numbers, last_two_actions
while True:
T=TvalueOf()
i2c = I2C(0, sda=machine.Pin(8), scl=machine.Pin(9), freq=200000)
lcd = I2cLcd(i2c, I2C_ADDR, I2C_NUM_ROWS, I2C_NUM_COLS)
if T in ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]:
lcd.putstr("Presionaste el:" + T)
lcd.move_to(0,1)
lcd.putstr("Prro")
last_two_numbers.append(int(T))
if len(last_two_numbers) > 2:
last_two_numbers.pop(0)
elif T == "*":
if len(last_two_numbers) == 2:
suma = sum(last_two_numbers)
lcd.clear()
lcd.putstr("La suma es: ")
lcd.move_to(0,1)
lcd.putstr(str(suma))
last_two_actions.append(("suma", last_two_numbers.copy()))
if len(last_two_actions) > 2:
last_two_actions.pop(0)
elif T == "#":
if len(last_two_numbers) == 2 and last_two_numbers[1] != 0:
division = last_two_numbers[0] / last_two_numbers[1]
lcd.clear()
lcd.putstr("La division es: ")
lcd.move_to(0,1)
lcd.putstr(str(division))
last_two_actions.append(("division", last_two_numbers.copy()))
if len(last_two_actions) > 2:
last_two_actions.pop(0)
elif T == 'A' or T == 'B' or T == 'D':
utime.sleep(2)
lcd.clear()
if T == 'A':
lcd.putstr("0,1,2,3,4,5,6,7")
lcd.move_to(0,1)
lcd.putstr("8,9")
elif T == 'B':
lcd.putstr("9,8,7,6,5,4,3,2")
lcd.move_to(0,1)
lcd.putstr("1,0")
elif T == 'D':
for i in range(0,len(shrek_intro), 2):
lcd.clear()
lcd.putstr(shrek_intro[i])
if i+1 < len(shrek_intro):
lcd.move_to(0,1)
lcd.putstr(shrek_intro[i+1])
utime.sleep(1)
last_two_actions.append((T,))
if len(last_two_actions) > 2:
last_two_actions.pop(0)
elif T == 'C':
utime.sleep(2)
for action in last_two_actions:
if action[0] == 'suma':
suma = sum(action[1])
lcd.clear()
lcd.putstr("La suma es: ")
lcd.move_to(0,1)
lcd.putstr(str(suma))
utime.sleep(1)
elif action[0] == 'division':
division = action[1][0] / action[1][1]
lcd.clear()
lcd.putstr("La division es: ")
lcd.move_to(0,1)
lcd.putstr(str(division))
utime.sleep(1)
elif action[0] == 'A':
utime.sleep(2)
lcd.clear()
lcd.putstr("0,1,2,3,4,5,6,7")
lcd.move_to(0,1)
lcd.putstr("8,9")
utime.sleep(1)
elif action[0] == 'B':
utime.sleep(2)
lcd.clear()
lcd.putstr("9,8,7,6,5,4,3,2")
lcd.move_to(0,1)
lcd.putstr("1,0")
utime.sleep(1)
elif action[0] == 'D':
for i in range(0,len(shrek_intro), 2):
lcd.clear()
lcd.putstr(shrek_intro[i])
if i+1 < len(shrek_intro):
lcd.move_to(0,1)
lcd.putstr(shrek_intro[i+1])
utime.sleep(1)
test_main()