from machine import Pin
import rp2
Pin(2,Pin.IN,Pin.PULL_UP) #pin ingresso uguale ingresso statemachine
@rp2.asm_pio(autopull=True,autopush=True,set_init=rp2.PIO.OUT_LOW,out_init=rp2.PIO.OUT_LOW,in_shiftdir=0,out_shiftdir=0)
def myspi():
out(pins,1)
set(pins,1)[10]
in_(pins,1)
set(pins,0)[10]
wrap()
sm=rp2.StateMachine(0,myspi,freq=10000,set_base=Pin(0),out_base=Pin(1),in_base=Pin(2),push_thresh=32,pull_thresh=32)
sm.active(1)
out_exp=0 #variabile di uscita myspi
class uscita_exp(object):
def __init__(self, pin):
self.pin=pin
def on(self):
global out_exp
out_exp=out_exp|1<<self.pin
def off(self):
global out_exp
out_exp=out_exp^1<<self.pin
def value(self):
global out_exp
var=out_exp
return bool(var & 1<<self.pin)
in_exp=0b101010 #variabile da myspi
class ingresso_exp(object):
def __init__(self, pin):
self.pin=pin
def value(self):
global in_exp
var=in_exp
return bool(var & 1<<self.pin)
motore=uscita_exp(1) #gpio corrispondenti espansione
luce=uscita_exp(2)
pulsante=ingresso_exp(3)
interruttore=ingresso_exp(0)
motore.on()
print(bin(out_exp))
print(motore.value())
luce.on()
print(bin(out_exp))
print(luce.value())
motore.off()
print(bin(out_exp))
print(motore.value())
luce.off()
print(bin(out_exp))
print(luce.value())
print (pulsante.value())
print(bin(in_exp))
print (interruttore.value())
print(bin(in_exp))
if sm.tx_fifo()==0: #se tx buffer vuoto
sm.put(out_exp)
if sm.rx_fifo()>=1: #se rx buffer c'e qualcosa
in_exp=sm.get() #vanno all'interno ciclo while