from utime import sleep
import rp2
from rp2 import PIO, asm_pio
from machine import Pin

# Programa para o PIO
@asm_pio(set_init=rp2.PIO.OUT_LOW,autopush=False)
def ULTRA_PIO():
  # Aguarda uma solicitação do programa
  pull()
  mov (x,osr)

  # Gera um pulso de 10 us (20 ciclos)
  set(pins,1) [19]
  set(pins,0)

  # Aguarda (indefinidamente) o inicio do pulso de eco
  wait(1,pin,0)

  # Aguarda o fim do pulso de eco
  # Decrementa X a cada 2 ciclos (1us)
  label('espera')
  jmp(pin,'continue')
  jmp('fim')
  label('continue')
  jmp(x_dec,'espera')

  # Retorna a duração do pulso de eco
  label('fim')
  mov(isr,x)
  push()

trigger = Pin(3, Pin.OUT)
echo = Pin(2, Pin.IN)
sm = rp2.StateMachine(0)

while True:
  sm.init(ULTRA_PIO,freq=2000000,set_base=trigger,in_base=echo,jmp_pin=echo)
  sm.active(1)
  sm.put(300000)
  val = sm.get()
  sm.active(0)
  tempo = 300000 - val
  distancia = (tempo * 0.0343) / 2
  print('Distancia: {0:.1f} cm'.format(distancia))
  sleep_ms(1000)
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT