from machine import Pin
import time
# configurnado pines de salida
pin_out= [11,10,9,8,7,6,5,4,3,2]
#configurnado pines de entrada
pin_in = [19,18,17,16]
#configurnado los pines
# Creando una lista de objetos Pin configurados como salida
sal = [Pin(p, Pin.OUT) for p in pin_out]
# Creando una lista de objetos Pin configurados como entrada
# cada entrada (se asume conectado a GND con resistencia pull-up interna)
ent = [Pin(p,Pin.IN, Pin.PULL_UP) for p in pin_in]
def salp(datos):
ii=512
cbin =""
ind=0
for pins in pin_out:
if ((datos & ii) !=0):
sal[ind].value(1)
cbin=cbin+"1"
else:
sal[ind].value(0)
cbin=cbin+"0"
ii=ii>>1
ind=ind+1
return cbin
def entp():
ii=8
cbin =""
num=0
ind=0
for pins in pin_in:
if (ent[ind].value() ==0):
num=num | ii
cbin=cbin+"1"
else:
cbin=cbin+"0"
ii=ii>>1
ind=ind+1
return num,cbin
def fibonacci(n):
a, b = 0, 1
out = []
for _ in range(n):
out.append(a)
cadena=salp(a)
print("numero=",a,"="+cadena)
a, b = b, a + b
time.sleep_ms(50)
return out
def lucas(n):
a, b = 2, 1
out = []
for _ in range(n):
out.append(a)
cadena=salp(a)
print("numero=",a,"="+cadena)
a, b = b, a + b
time.sleep_ms(50)
return out
def tribonacci(n):
# T(0)=0, T(1)=0, T(2)=1; T(n)=T(n-1)+T(n-2)+T(n-3)
a, b, c = 0, 0, 1
out = []
for _ in range(n):
out.append(a)
cadena=salp(a)
print("numero=",a,"="+cadena)
a, b, c = b, c, a + b + c
time.sleep_ms(50)
return out
def tetranacci(n):
# 0,0,0,1 y luego suma de los 4 previos
a, b, c, d = 0, 0, 0, 1
out = []
for _ in range(n):
out.append(a)
cadena=salp(a)
print("numero=",a,"="+cadena)
a, b, c, d = b, c, d, a + b + c + d
time.sleep_ms(50)
return out
def padovan(n):
# P(0)=P(1)=P(2)=1; P(n)=P(n-2)+P(n-3)
if n <= 0: return []
if n == 1: return [1]
if n == 2: return [1, 1]
P = [1, 1, 1]
for k in range(3, n):
P.append(P[k-2] + P[k-3])
time.sleep_ms(50)
return P
def perrin(n):
# R(0)=3, R(1)=0, R(2)=2; R(n)=R(n-2)+R(n-3)
if n <= 0: return []
if n == 1: return [3]
if n == 2: return [3, 0]
R = [3, 0, 2]
for k in range(3, n):
cadena=salp(R[k-2] + R[k-3])
print("numero=",R[k-2] + R[k-3],"="+cadena)
R.append(R[k-2] + R[k-3])
time.sleep_ms(50)
return R
def pell(n):
# P(0)=0, P(1)=1; P(n)=2P(n-1)+P(n-2)
a, b = 0, 1
out = []
for _ in range(n):
out.append(a)
cadena=salp(a)
print("numero=",a,"="+cadena)
a, b = b, 2*b + a
time.sleep_ms(50)
return out
def jacobsthal(n):
# J(0)=0, J(1)=1; J(n)=J(n-1)+2J(n-2)
a, b = 0, 1
out = []
for _ in range(n):
out.append(a)
cadena=salp(a)
print("numero=",a,"="+cadena)
a, b = b, b + 2*a
time.sleep_ms(50)
return out
def catalan(n):
# C0=1; C_{k+1} = C_k * 2*(2k+1)/(k+2) (entero exacto)
out = []
c = 1
for k in range(n):
out.append(c)
cadena=salp(c)
print("numero=",c,"="+cadena)
c = c * 2 * (2*k + 1) // (k + 2) if k + 1 < n else c
time.sleep_ms(50)
return out
def mersenne(n):
# M(n) = 2^n - 1
return [(1 << k) - 1 for k in range(n)] # rápido en uPython
N=25
while True:
op,cnumero=entp()
cadena=salp(op)
print(op,"=",cnumero,"=",cadena)
if op==0:
fibonacci(N)
if op==1:
lucas(N)
if op==2:
tribonacci(N)
if op==3:
tetranacci(N)
if op==4:
padovan(N)
if op==5:
perrin(N)
if op==6:
pell(N)
if op==7:
jacobsthal(N)
if op==8:
catalan(N)
if op==9:
mersenne(N)